proxmox 图像导入会创建一个 50GB 的磁盘,无论图像大小如何

proxmox 图像导入会创建一个 50GB 的磁盘,无论图像大小如何

如果我从原始映像导入 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 子卷大小),所以我很高兴有一个更好的解决方案,最好是创建具有适当大小的子卷的解决方案。

相关内容