共计 1332 个字符,预计需要花费 4 分钟才能阅读完成。
1. 加载nbd模块
NBD(网络块设备: Network Block Device),利用 qemu-nbd 将 qemu 虚拟机镜像挂载到 Linux 上。
展开来讲,nbd 可以将一个远程主机的磁盘空间,当作一个块设备来使用,就像一块硬盘一样。使用它,你可以很方便的将另一台服务器的硬盘空间,增加到本地服务器上。
NBD 与 NFS 有所不同:NFS 只是提供一个挂载点供客户端使用,客户端无法改变这个挂载点的分区格式;而NBD提供的是一个块设备,客户端可以把这个块设备格式化成各种类型的分区,更便于用户的使用。
# 加载nbd模块,max_part表示每个设备的分区,根据实际情况修改,默认为0
modprobe nbd max_part=8
# 查看nbd设备文件
ls /dev/nbd*
ubuntu 或 debain 似乎自带该模块,如果是 centos 可能需要编译安装,参考 CentOS 7 编译安装 nbd 模块。
2. 映射磁盘为nbd
- qcow2格式镜像
# 将磁盘映射为第一个nbd设备
qemu-nbd -c /dev/nbd0 /var/lib/vz/images/102/vm-102-disk-0.qcow2
# 可以查看磁盘分区
fdisk -l /dev/nbd0
- raw格式镜像
qemu-nbd -f raw -c /dev/nbd0 /var/lib/vz/images/102/vm-102-disk-0.qcow2
# 可以查看磁盘分区
fdisk -l /dev/nbd0
当然,raw 和 qcow2 格式是可以相互转换的,使用 qemu-img 命令。
# 将 raw 格式转换为 qcow2 格式
qemu-img convert -f raw -O qcow2 input.raw output.qcow2
# 将 qcow2 格式转换为 raw 格式
qemu-img convert -f qcow2 -O raw input.qcow2 output.raw
3. 激活lvm
这一步需要看具体情况,如果没有使用 lvm 进行分区,那么可以跳过这一步。怎么判断是否使用了 lvm 呢,上面执行了 fdisk
命令是可以看见的。
如果使用了 lvm,那么就要先激活该磁盘的卷组。如果没有安装 lvm,可以使用如下命令安装:
apt-get install lvm2 -y
查看映射的磁盘的逻辑卷组名称,这里可以通过磁盘大小判断。
vgs
激活卷组:
# centos 为上获取到的名称
vgchange -ay centos
4. 挂载
接下来就可以进行挂载了,如果是标准分区,那么直接挂载 nbd 设备块即可。
- 标准分区
mount /dev/nbd0p2 /mnt
/dev/nbd0p2
是 fdisk -l
查找到的结果。
- lvm 分区
mount /dev/centos/root /mnt/
/dev/centos/root
是 lvdisplay
查询得到的结果。
挂载成功以后就可以对磁盘里面的内容进行操作了,拷贝或者是磁盘修复。
5. 取消挂载
取消挂载也需要分是否是标准分区,lvm 取消挂载以后还要设置卷组为未激活,不然会导致 lvm 产生错误。
- 标准分区
cd && umount /mnt && qemu-nbd --disconnect /dev/nbd0
- lvm 分区
cd && umount /mnt && vgchange -an centos && qemu-nbd --disconnect /dev/nbd0
提醒:本文发布于568天前,文中所关联的信息可能已发生改变,请知悉!