qemu-nbd挂载虚拟机镜像文件系统
qemu-nbd挂载虚拟机镜像文件系统基本原理操作步骤1.加载NBD驱动2. 连接 qemu-nbd3.挂载4.解挂虚机文件系统为LVM实例1.加载驱动2.连接qemu-nbd3.挂载lvm分区4.卸载盘符虚机文件系统为非LVM虚机文件系统为NTFS基本原理nbd(网络块设备: Network Block Device),利用qemu-nbd将qemu虚拟机镜像挂载到Linux上。 展开来讲,n
qemu-nbd挂载虚拟机镜像文件系统
基本原理
nbd(网络块设备: Network Block Device),利用qemu-nbd将qemu虚拟机镜像挂载到Linux上。
展开来讲,nbd可以将一个远程主机的磁盘空间,当作一个块设备来使用,就像一块硬盘一样。使用它,你可以很方便的将另一台服务器的硬盘空间,增加到本地服务器上。
NBD与NFS有所不同:NFS只是提供一个挂载点供客户端使用,客户端无法改变这个挂载点的分区格式;而NBD提供的是一个块设备,客户端可以把这个块设备格式化成各种类型的分区,更便于用户的使用。
NBD是一个内核模块,大部分Linux发行版都已包含它。
在centos中, 编译成模块NBD, 保存在 /lib/modules/$version/kernel/driver/block/
远程服务器是一段轻量级的守护进程代码,它提供对远程设备的访问,而且该守护进程并不需要运行在linux平台之上。本地操作系统必须是linux,而且要支持Linux内核NBD驱动,并且能够运行本地客户端进程。
文件系统能被挂载到NBD上(上图),而且NBD设备也能够用来组成冗余磁盘阵列(RAID)。在本地Linux上挂载一个EXT2文件系统到NBD,其传输率要比在同样的远程机器上挂载一个NFS快。
操作步骤
1.加载NBD驱动
-
某些版本的 Linux 不加 max_part 参数会导致没有设备节点 /dev/nbd0p{1,2,3,4…} 等。用 kpartx 也不行。
-
查看有没有加载nbd模块
sudo lsmod |grep nbd
-
加载nbd模块
sudo modprobe nbd max_part=16
备注信息:查看Linux 模块信息(modinfo),例如查看nbd模块的参数【执行命令modinfo nbd
】 。 加载后,在/dev/目录下,根据参数创建nbdxx块设备文件。
2. 连接 qemu-nbd
qemu-nbd -c nbd设备路径 虚拟机镜像路径 [$ sudo qemu-nbd -c /dev/nbd0 centos.qcow2
]
这里注意查看分区: sudo fdisk -l nbd设备[sudo fdisk -l /dev/nbd0
],可能虚拟机不止一个分区(一般还会有一个boot分区)
3.挂载
sudo mount nbd分区 挂载路径 [$ sudo mount /dev/nbd0p1 /mnt/test1
]
4.解挂
sudo qemu-nbd -d nbd分区[$ sudo qemu-nbd -d /dev/nbd0p1
]
虚机文件系统为LVM实例
1.加载驱动
#查看加载的nbd模块
lsmod |grep nbd
#加载nbd模块
modprobe nbd max_part=16
2.连接qemu-nbd
云课堂中,从日志查看镜像路径 vi /var/log/qemu/vmmagent.log
#连接命令qemu-nbd -f qcow2 -c /dev/your/nbddev /image/path
qemu-nbd -f qcow2 -c /dev/nbd9 /opt/lessons/images/local_img.qcow2
#更新lvm分区
pvscan --cache
lvscan
vgscan
vgchange -a y
#查看新增文件系统结构
lsblk -f
root@RainOS:/opt/lessons/images# qemu-nbd -f qcow2 -c /dev/nbd9 /opt/lessons/images/local_img.qcow2
root@RainOS:/opt/lessons/images# pvscan --cache
root@RainOS:/opt/lessons/images# lvscan
inactive '/dev/vg202105200202373534/lv1' [33.20 GiB] inherit
root@RainOS:/opt/lessons/images# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg202105200202373534" using metadata type lvm2
root@RainOS:/opt/lessons/images# vgchange -a y
1 logical volume(s) in volume group "vg202105200202373534" now active
root@RainOS:/opt/lessons/images# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop7 7:7 0 700M 0 loop /var/log
sda 8:0 0 238.5G 0 disk
├─sda4 8:4 0 4.5G 0 part /
├─sda2 8:2 0 100M 0 part
├─sda5 8:5 0 231.5G 0 part /opt/lessons
├─sda3 8:3 0 2.3G 0 part
└─sda1 8:1 0 100M 0 part /boot/efi
nbd9 43:288 0 40G 0 disk
├─nbd9p1 43:289 0 300M 0 part
├─nbd9p4 43:292 0 33.2G 0 part
│ └─vg202105200202373534-lv1 253:0 0 33.2G 0 lvm
├─nbd9p2 43:290 0 1.5G 0 part
└─nbd9p3 43:291 0 5G 0 part
3.挂载lvm分区
#挂载分区mount /dev/vgname/lvname /your/mount/point
mount /dev/kylinvg2021042901/lv1 /tmp/test/
mount /dev/nbd9p3 /tmp/boot/
4.卸载盘符
#取消挂载
umount /tmp/test/
vgchange -an
#断开NBD连接qemu-nbd -d /dev/your/nbddev
qemu-nbd -d /dev/nbd9
pvscan --cache
虚机文件系统为非LVM
#连接镜像
qemu-nbd -f qcow2 -c /dev/your/nbddev /image/path
#查看新增文件系统结构
lsblk -f
#挂载分区
mount /dev/[yournbddev][pn] /your/mount/point # 其中pn代表你要挂载的时镜像里的分区n
#卸载分区
umount /your/mount/point
#断开nbd连接
qemu-nbd -d /dev/your/nbddev
虚机文件系统为NTFS
#连接镜像
qemu-nbd -f qcow2 -c /dev/your/nbddev /image/path
lsblk -f #查看新增文件系统结构#挂载分区
mount -t ntfs-3g /dev/[yournbddev][pn] /your/mount/point # 其中pn代表你要挂载的时镜像里的分区n#卸载分区
umount /your/mount/point#断开nbd连接
qemu-nbd -d /dev/your/nbddev
注意
- 一般如果虚机在运行中突然断电关机(比如直接杀死qemu进程或者用virsh destroy命令关闭),此时虚机文件系统可能损坏,这时候直接mount一般会出错,建议用-o ro,norecovery选项挂载
- 在卸载过程中需要考虑是否有进程正在占用文件,一般用fuser -k
- 注意mount和umount命令的用法
参考
挂载qcow2文件,qcow2里边还有个lvm
linux nbd & qemu-nbd
QEMU-NBD
通过qemu-nbd方式挂载qcow2镜像格式
基于LVM和NBD实现网络远程LVM镜像方法
How to Mount Guest Qcow2 Virtual disk Image containing LVM on KVM Host Machine
更多推荐
所有评论(0)