Skip to content

Commit 4ba2ac0

Browse files
committed
add post pve-mount-guest-disk
1 parent 2b4688a commit 4ba2ac0

File tree

3 files changed

+209
-4
lines changed

3 files changed

+209
-4
lines changed

config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ menu:
140140
url: /bangumi/
141141
weight: 30
142142
- identifier: about
143-
name: 关于我
143+
name: 关于
144144
url: /about/
145145
weight: 40
146146
# Read: https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#using-hugos-syntax-highlighter-chroma

content/about.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
---
2-
title: "关于我"
2+
title: "关于"
33
showtoc: false
44
ShowReadingTime: false
55
ShowWordCount: false
66
author: " "
77
---
88

9-
> 喜欢 ACG,Vim 爱好者, 你可以查 阅[ACG](/bangumi)页 面查看我 看过的动漫和玩过的
10-
> 游戏, 或者直接 进入我 的[bangumi](https://bgm.tv/user/685827)页面查看。
9+
> 喜欢 ACG,Vim 爱好者, 你可以查 阅[ACG](/bangumi)页 面查看我看过的动漫和玩过的游戏, 或者直接 进入我的[bangumi](https://bgm.tv/user/685827)页面查看。
1110
1211
## 近期游戏生活
1312

content/posts/pve-mount-guest-disk.md

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
---
2+
title: pve 宿主机挂载虚拟机磁盘镜像
3+
date: 2024-01-16
4+
draft: false
5+
description: "pve 宿主机挂载虚拟机磁盘镜像"
6+
tags:
7+
- pve
8+
- 虚拟机
9+
categories:
10+
- pve
11+
- Linux
12+
lightgallery: true
13+
14+
toc:
15+
auto: true
16+
---
17+
18+
## 1. 背景
19+
20+
有的时候我们需要修改虚拟机的文件,但是此时虚拟机却因为某些原因无法启动了,比如说虚拟机黑苹果修改了 `EFI` 导致启动不了,这时我们有什么办法呢,有人说我们添加一个可以启动的 `EFI` 启动设备再来修改原来 `ESP` 分区 (即原 `EFI` 文件系统) 不就好了,诚然,这是一个办法,但我们今天要介绍的是另一个办法,直接在宿主机挂载虚拟机的磁盘分区,就拿黑苹果 `EFI` 分区为例。
21+
22+
## 2. Raw
23+
24+
`raw` 格式的磁盘镜像文件可以使用 `losetup` 虚拟成一个块设备。再使用 `kpartx` 读取分区表英创建设备映射,从而可以从设备挂载到宿主机:
25+
26+
### 2.1 挂载
27+
28+
- 安装 kpartx
29+
30+
```shell
31+
apt install kpartx
32+
```
33+
34+
下面以虚拟机编号为 108 的 disk1 为例子
35+
36+
- 虚拟块设备
37+
38+
```shell
39+
losetup /dev/loop0 /dev/mapper/pve-vm--108--disk--1
40+
```
41+
42+
- 读取设备的分区表并创建设备分区映射
43+
44+
```shell
45+
kpartx -av /dev/loop0
46+
```
47+
48+
- 查看分区映射
49+
50+
```shell
51+
~ lsblk
52+
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
53+
loop0 7:0 0 1G 0 loop
54+
└─loop0p1 253:23 0 1024M 0 part
55+
sda 8:0 1 14.6G 0 disk
56+
├─sda1 8:1 1 11.8G 0 part
57+
├─sda2 8:2 1 16M 0 part
58+
├─sda3 8:3 1 2.7G 0 part
59+
├─sda4 8:4 1 16M 0 part
60+
├─sda5 8:5 1 2M 0 part
61+
├─sda6 8:6 1 512B 0 part
62+
├─sda7 8:7 1 512B 0 part
63+
├─sda8 8:8 1 16M 0 part
64+
├─sda9 8:9 1 512B 0 part
65+
├─sda10 8:10 1 512B 0 part
66+
├─sda11 8:11 1 8M 0 part
67+
└─sda12 8:12 1 32M 0 part
68+
nvme1n1 259:0 0 238.5G 0 disk
69+
├─nvme1n1p1 259:1 0 238.5G 0 part
70+
└─nvme1n1p9 259:2 0 8M 0 part
71+
```
72+
73+
可以看到 `loop0` 下有一个分区
74+
75+
- 挂载分区
76+
77+
```shell
78+
mkdir pve-efi
79+
mount /dev/mapper/loop0p1 pve-efi
80+
```
81+
82+
- 查看分区文件
83+
84+
```shell
85+
~ ls -al pve-efi
86+
total 11
87+
drwxr-xr-x 6 root root 512 Jan 1 1970 .
88+
drwx------ 18 root root 4096 Jan 16 14:09 ..
89+
-rwxr-xr-x 1 root root 4096 Dec 29 07:12 ._EFI
90+
drwxr-xr-x 4 root root 512 Dec 29 07:12 EFI
91+
drwxr-xr-x 2 root root 512 Jan 13 09:48 .fseventsd
92+
drwxr-xr-x 3 root root 512 Dec 29 07:12 .Spotlight-V100
93+
drwxr-xr-x 3 root root 512 Dec 29 07:12 .Trashes
94+
```
95+
96+
### 2.2 卸载
97+
98+
按照挂载的顺序反向卸载
99+
100+
```shell
101+
# 文件系统
102+
umount pve-efi
103+
# 设备分区
104+
kpartx -d /dev/loop0
105+
# 块设备虚拟
106+
losetup -d /dev/loop0
107+
```
108+
109+
## 3. Qcow2
110+
111+
### 3.1 挂载
112+
113+
`Qcow2` 镜像需要通过 nbd 模块挂载
114+
115+
- 检查 nbd 模块是否加载
116+
117+
```shell
118+
lsmod | grep nbd
119+
```
120+
121+
若没有输出结果则加载 nbd
122+
123+
```shell
124+
modprobe nbd max_part=8
125+
```
126+
127+
- 挂载镜像,下面以编号 103 的虚拟机磁盘 2 文件为例
128+
129+
```shell
130+
qemu-nbd --connect=/dev/nbd0 /var/lib/vz-b/images/113/vm-113-disk-1.qcow2
131+
```
132+
133+
- 查看分区
134+
135+
```shell
136+
~ fdisk -l /dev/nbd0
137+
Disk /dev/nbd0: 32 GiB, 34359738368 bytes, 67108864 sectors
138+
Units: sectors of 1 * 512 = 512 bytes
139+
Sector size (logical/physical): 512 bytes / 512 bytes
140+
I/O size (minimum/optimal): 512 bytes / 512 bytes
141+
Disklabel type: gpt
142+
Disk identifier: DACC591B-A767-EA4F-8028-9757172F0505
143+
144+
Device Start End Sectors Size Type
145+
/dev/nbd0p1 11472896 67108815 55635920 26.5G Linux filesystem
146+
/dev/nbd0p2 20480 53247 32768 16M ChromeOS kernel
147+
/dev/nbd0p3 5894144 11472895 5578752 2.7G ChromeOS root fs
148+
/dev/nbd0p4 53248 86015 32768 16M ChromeOS kernel
149+
/dev/nbd0p5 315392 5894143 5578752 2.7G ChromeOS root fs
150+
/dev/nbd0p6 16448 16448 1 512B ChromeOS kernel
151+
/dev/nbd0p7 16449 16449 1 512B ChromeOS root fs
152+
/dev/nbd0p8 86016 118783 32768 16M Linux filesystem
153+
/dev/nbd0p9 16450 16450 1 512B ChromeOS reserved
154+
/dev/nbd0p10 16451 16451 1 512B ChromeOS reserved
155+
/dev/nbd0p11 64 16447 16384 8M unknown
156+
/dev/nbd0p12 249856 315391 65536 32M EFI System
157+
```
158+
159+
可以看到我挂载的是一个 `FydeOS` 虚拟机的镜像文件,是基于 `Chromium OS` 的操作系统,所以看到了文件系统有 `ChromeOS kernel` 等,下面挂载下 `linux filesystem` 分区。
160+
161+
- 挂载分区
162+
163+
```shell
164+
mkdir chromeos-file
165+
mount /dev/nbd0p1 chromeos-file
166+
```
167+
168+
- 查看分区文件
169+
170+
```shell
171+
~ cd chromeos-file
172+
➜ chromeos-file ll
173+
total 275992
174+
drwxr-xr-x 9 root root 4096 Nov 26 15:04 .
175+
drwx------ 18 root root 4096 Jan 16 16:19 ..
176+
drwxr-xr-x. 17 root root 4096 Nov 14 10:59 dev_image
177+
drwxrwxr-x. 2 root root 4096 Nov 26 15:04 encrypted
178+
-rw-------. 1 root root 8357232640 Nov 26 16:26 encrypted.block
179+
-rw-------. 1 root root 48 Nov 26 15:04 encrypted.key
180+
drwxr-xr-x. 3 root root 4096 Nov 26 15:04 etc
181+
drwxr-xr-x. 6 root root 4096 Nov 26 15:04 home
182+
drwx------ 2 root root 16384 Nov 26 14:55 lost+found
183+
drwxr-xr-x. 13 root root 4096 Nov 26 15:04 unencrypted
184+
drwx--x--x. 5 root root 4096 Nov 26 15:04 var_overlay
185+
```
186+
187+
这样就挂载好了一个分区,可以进行编辑了,编辑好了之后卸载回到客户机即可看到改动了。
188+
189+
### 3.2 卸载
190+
191+
卸载还是反向操作
192+
193+
```shell
194+
umount chromeos-file
195+
qemu-nbd --disconnect /dev/nbd0
196+
```
197+
198+
- 卸载 nbd 模块 (可选)
199+
200+
```shell
201+
modprobe -r nbd
202+
```
203+
204+
## 4. 结语
205+
206+
至此就完成了 pve 常用的 2 种格式的镜像文件的挂载操作,该用法的需求是我在折腾黑苹果 `EFI` 开不了机的时候爬帖子学到的,其他格式的文件挂载可以查看 `foxi`[这篇文章](https://foxi.buduanwang.vip/linux/552.html/)

0 commit comments

Comments
 (0)