qemu-nbd挂载虚拟机镜像文件系统

qemu-nbd挂载虚拟机镜像文件系统

基本原理

nbd(网络块设备: Network Block Device),利用qemu-nbd将qemu虚拟机镜像挂载到Linux上。

一般步骤

  1. 加载 nbd 驱动(sudo modprobe nbd)

    1. 查看有没有加载nbd模块lsmod |grep nbd
    2. 加载nbd模块sudo modprobe nbd max_part=16
  2. 连接 qemu-nbd(sudo qemu-nbd -c nbd设备路径 虚拟机镜像路径)

    1. 查看分区: sudo fdisk -l nbd设备,可能虚拟机不止一个分区(一般还会有一个boot分区)
  3. 挂载(sudo mount nbd分区 挂载路径)

  4. 解挂(sudo qemu-nbd -d nbd分区)。

虚机文件系统为LVM

# 连接镜像
qemu-nbd -f qcow2 -c /dev/yournbddev yourimg

# 更新lvm分区
pvscan --cache

vgscan

lvscan

vgchange -a y 

lsblk -f #查看新增文件系统结构

# 挂载lvm分区
mount /dev/vgname/lvname /your/mount/point

# 卸载分区
umount /your/mount/point

vgchange -an centos

# 断开nbd连接
qemu-nbd -d /dev/yournbddev

pvscan --cache

虚机文件系统为非LVM

# 连接镜像
qemu-nbd -f qcow2 -c /dev/yournbddev yourimg

lsblk -f #查看新增文件系统结构

# 挂载分区
mount /dev/[yournbddev][pn] /your/mount/point	# 其中pn代表你要挂载的时镜像里的分区n

# 卸载分区
umount /your/mount/point

# 断开nbd连接
qemu-nbd -d /dev/yournbddev

虚机文件系统为ntfs

# 连接镜像
qemu-nbd -f qcow2 -c /dev/yournbddev yourimg

lsblk -f #查看新增文件系统结构

# 挂载分区
mount -t ntfs-3g /dev/[yournbddev][pn] /your/mount/point	# 其中pn代表你要挂载的时镜像里的分区n

# 卸载分区
umount /your/mount/point

# 断开nbd连接
qemu-nbd -d /dev/yournbddev

注意

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

参考

挂载qcow2文件,qcow2里边还有个lvm

linux nbd & qemu-nbd

https://manpages.debian.org/testing/qemu-utils/qemu-nbd.8.en.html

通过qemu-nbd方式挂载qcow2镜像格式

于LVM和NBD实现网络远程LVM镜像方法

How to Mount Guest Qcow2 Virtual disk Image containing LVM on KVM Host Machine

posted @ 2022-06-10 07:22  main_c  阅读(788)  评论(0编辑  收藏  举报