如果我从原始映像导入 vm 101 的磁盘映像,它将创建一个 50GB 的磁盘映像:
# qm importdisk 101 disk.img local-zfs
importing disk '446-jenkinsmite.img' to VM 101 ...
transferred 0.0 B of 50.0 GiB (0.00%)
transferred 512.0 MiB of 50.0 GiB (1.00%)
transferred 1.0 GiB of 50.0 GiB (2.00%)
transferred 1.5 GiB of 50.0 GiB (3.00%)
...
transferred 49.9 GiB of 50.0 GiB (99.76%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
Successfully imported disk as 'unused0:local-zfs:vm-101-disk-0'
命令
qm create 101 --scsi0 local-zfs:0,import-from=/root/disk.img,size=13G
仍会创建一个 50GiB 的磁盘。
我意识到,该图像尚未占用 50GB,它应该表现得像一个稀疏文件:
# zfs list rpool/data/vm-101-disk-0
NAME USED AVAIL REFER MOUNTPOINT
rpool/data/vm-101-disk-0 12.2G 2.50T 12.2G -
但是,虚拟机将看到磁盘大小为 50GB,并且如果安装了一些云客户工具,它将调整分区和文件系统的大小以使用可用空间,并且可能随着时间的推移用尽该空间。
我还没有尝试导入大于 50GiB 的磁盘映像,但这也可能导致问题......
如何在导入镜像时设置目标磁盘的大小?
答案1
我很快就找到了一个解决方法。您可以通过运行以下命令来设置 ZFS 子卷大小:
zfs set volsize=1GiB rpool/data/vm-101-disk-0
当心!
- 如果您设置的尺寸小于原始图像,则将会丢失数据!
- 如果您输入错误的卷名,将会丢失数据!
没有警告或询问您是否确定,因此最好好好计算大小并确保您正在调整适当的卷大小。
此外,proxmox 仍然列出磁盘大小为 50GiB:
# qm list
VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
101 VM 101 running 512 50.00 2128896
我不知道这是否会导致任何不愉快的副作用(VM 似乎将磁盘视为 ZFS 子卷大小),所以我很高兴有一个更好的解决方案,最好是创建具有适当大小的子卷的解决方案。