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驱动,并且能够运行本地客户端进程。
图1. NBD在本地客户端代表远程资源

图1.NBD在本地客户端代表远程资源

文件系统能被挂载到NBD上(上图),而且NBD设备也能够用来组成冗余磁盘阵列(RAID)。在本地Linux上挂载一个EXT2文件系统到NBD,其传输率要比在同样的远程机器上挂载一个NFS快。
图2. 使用NBD的冗余磁盘阵列

图2.使用NBD的冗余磁盘阵列

操作步骤

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

注意

  1. 一般如果虚机在运行中突然断电关机(比如直接杀死qemu进程或者用virsh destroy命令关闭),此时虚机文件系统可能损坏,这时候直接mount一般会出错,建议用-o ro,norecovery选项挂载
  2. 在卸载过程中需要考虑是否有进程正在占用文件,一般用fuser -k
  3. 注意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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值