获取 PVE 虚拟机虚拟磁盘里面的文件


共计 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

# 将磁盘映射为第一个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/nbd0p2fdisk -l 查找到的结果。

  • lvm 分区
mount /dev/centos/root /mnt/

/dev/centos/rootlvdisplay 查询得到的结果。

挂载成功以后就可以对磁盘里面的内容进行操作了,拷贝或者是磁盘修复

5. 取消挂载

取消挂载也需要分是否是标准分区,lvm 取消挂载以后还要设置卷组为未激活,不然会导致 lvm 产生错误。

  • 标准分区
cd && umount /mnt && qemu-nbd --disconnect /dev/nbd0
  • lvm 分区
cd && umount /mnt && vgchange -an centos &&  qemu-nbd --disconnect /dev/nbd0

提醒:本文发布于508天前,文中所关联的信息可能已发生改变,请知悉!

Tips:清朝云网络工作室

阅读剩余
THE END