方法一:libguestfs
- 安装libguestfs工具集
#安装libguestfs工具集
apt install libguestfs-tools
2.编辑虚拟机磁盘文件
#虚拟机关机状态操作
#如果是windows虚拟机,如果开机过一次,就需要关闭电源管理里的快速启动选项(快速启动会把内存数据写入磁盘保存,导致虚拟机磁盘无法编辑)
#创建挂载点
mkdir /kk
#挂载磁盘
guestmount -a /mnt/data/images/103/vm-103-disk-1.qcow2 -i --rw /kk
- 编辑模板磁盘文件
#解除模板磁盘文件锁定
chattr -i base-114-disk-1.qcow2
#创建挂载点
mkdir /kk
#挂载磁盘
guestmount -a base-114-disk-1.qcow2 -i --rw /kk
- 编辑磁盘内容
#进入挂载点
cd /kk
#编辑磁盘内容
-
移除挂载
umount /kk
方法二:qemu-nbd
- 安装qemu-utils(pve自带,不用安装),安装nfts-3g
#安装qemu-utils
apt install qemu-utils
#安装ntfs-3g
apt install ntfs-3g
2.创建nbd网络块设备
#加载nbd内核模块,并创建8个nbd块设备
modprobe nbd max_part=8
3.将磁盘导出为网络块设备
#将磁盘导出为网络块设备
qemu-nbd --connect=/dev/nbd0 /mnt/data/images/102/vm-102-disk-1.qcow2
- 查看nbd块分区情况
#查看nbd块分区情况
fdisk -l /dev/nbd0
#windows分区一般有3个
root@pve:/kk# fdisk -l /dev/nbd0
Disk /dev/nbd0: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EA0D45E0-A220-4547-8D89-7B1E34142D39
Device Start End Sectors Size Type
/dev/nbd0p1 2048 206847 204800 100M EFI System
/dev/nbd0p2 206848 239615 32768 16M Microsoft reserved
/dev/nbd0p3 239616 62910494 62670879 29.9G Microsoft basic data
- 挂载虚拟机磁盘和模板磁盘文件
##虚拟机关机状态操作
#如果是windows虚拟机,如果开机过一次,就需要关闭电源管理里的快速启动选项(快速启动会把内存数据写入磁盘保存,导致虚拟机磁盘无法编辑
#挂载虚拟机磁盘,nbd00p3为windows系统分区
mount -t ntfs /dev/nbd0p3 /kk
#挂载模板磁盘(同理)
#解除模板磁盘文件锁定
chattr -i /mnt/data/images/114/base-114-disk-1.qcow2
qemu-nbd --connect=/dev/nbd0 /mnt/data/images/114/base-114-disk-1.qcow2
mount -t ntfs /dev/nbd0p3 /kk
- 编辑磁盘内容
#进入挂载点
cd /kk
#编辑磁盘内容
7.移除挂载
#移除/kk挂载点
umount /kk
#移除块设备挂载
qemu-nbd --disconnect /dev/nbd0