< Blog
技术分享

pve 宿主机挂载虚拟机磁盘镜像


背景

有的时候我们需要修改虚拟机的文件,但是此时虚拟机却因为某些原因无法启动了,比如说虚拟机黑苹果修改了 EFI 导致启动不了,这时我们有什么办法呢,有人说我们添加一个可以启动的 EFI 启动设备再来修改原来 ESP 分区 (即原 EFI 文件系统) 不就好了,诚然,这是一个办法,但我们今天要介绍的是另一个办法,直接在宿主机挂载虚拟机的磁盘分区,就拿黑苹果 EFI 分区为例。

Raw

raw 格式的磁盘镜像文件可以使用 losetup 虚拟成一个块设备。再使用 kpartx 读取分区表英创建设备映射,从而可以从设备挂载到宿主机:

安装 kpartx

apt install kpartx

下面以虚拟机编号为 100 的 disk0 为例子 虚拟块设备

losetup /dev/loop0 /dev/mapper/pve-vm--100--disk--0

读取设备的分区表并创建设备分区映射

kpartx -av /dev/loop0

查看分区映射

➜ ~ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 1G 0 loop └─loop0p1 253:23 0 1024M 0 part sda 8:0 1 14.6G 0 disk ├─sda1 8:1 1 11.8G 0 part ├─sda2 8:2 1 16M 0 part ├─sda3 8:3 1 2.7G 0 part ├─sda4 8:4 1 16M 0 part ├─sda5 8:5 1 2M 0 part ├─sda6 8:6 1 512B 0 part ├─sda7 8:7 1 512B 0 part ├─sda8 8:8 1 16M 0 part ├─sda9 8:9 1 512B 0 part ├─sda10 8:10 1 512B 0 part ├─sda11 8:11 1 8M 0 part └─sda12 8:12 1 32M 0 part nvme1n1 259:0 0 238.5G 0 disk ├─nvme1n1p1 259:1 0 238.5G 0 part └─nvme1n1p9 259:2 0 8M 0 part

可以看到 loop0 下有一个分区

挂载分区

mkdir pve-efi mount /dev/mapper/loop0p1 pve-efi

查看分区文件

➜ ~ ls -al pve-efi total 11 drwxr-xr-x 6 root root 512 Jan 1 1970 . drwx------ 18 root root 4096 Jan 16 14:09 .. -rwxr-xr-x 1 root root 4096 Dec 29 07:12 ._EFI drwxr-xr-x 4 root root 512 Dec 29 07:12 EFI drwxr-xr-x 2 root root 512 Jan 13 09:48 .fseventsd drwxr-xr-x 3 root root 512 Dec 29 07:12 .Spotlight-V100 drwxr-xr-x 3 root root 512 Dec 29 07:12 .Trashes

2.2 卸载 按照挂载的顺序反向卸载

# 文件系统 umount pve-efi # 设备分区 kpartx -d /dev/loop0 # 块设备虚拟 losetup -d /dev/loop0

文章引用https://linkzz.org/posts/pve-mount-guest-disk/