Linux 上基于文件的动态分配硬盘

Har*_*rry 3 linux virtualbox hard-drive vhd

我可以在现有的文件系统(例如 ext4)上创建一个常规文件,将其放入块设备(通过losetup),并使用它自己的 ext4 文件系统对其进行格式化。

但上述硬盘是固定大小的。

题:

  1. VirtualBox允许您创建大小固定或动态大小的 VDI、VMDK 和 VHD 类型的硬盘。有没有办法制作一个基于文件的动态大小的硬盘供 Linux 主机操作系统使用?

  2. 是否可以VirtualBox在 Linux 主机操作系统上使用这三种基于文件的、动态大小的硬盘中的任何一种?

我在 Ubuntu 16.04 上。

Del*_*tik 5

  1. 是的,如果您的文件系统支持稀疏文件。(ext4 支持稀疏文件。)

    以下是创建最初几乎不占用空间的64GiB原始图像的方法disk.img

    truncate -s 64G disk.img
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您现在可以将disk.img用作环回块设备,它会在您写入时扩展。


奖励功能

如果要将磁盘映像转换disk.img为另一种格式,例如物理磁盘/dev/sdb,请使用qemu-img

qemu-img convert -O raw disk.img /dev/sdb
Run Code Online (Sandbox Code Playgroud)

如果您想将 VDI、VMDK、VHD 或其他容器格式转换为 RAW 以便您可以使用内置工具(如losetup/kpartx

源图像是什么格式并不重要。 qemu-img可以处理的不仅仅是 VDI、VMDK、VHD 和原始图像。要查看支持的图像列表,请运行以下命令:

    root@node51 [~]# qemu-img --help | grep 'Supported formats:'
    Supported formats: bochs vvfat rbd vpc parallels tftp ftp ftps raw https qcow http dmg qcow2 quorum null-aio cloop vdi null-co vhdx blkverify file vmdk host_cdrom blkdebug host_device sheepdog iscsi qed nbd
Run Code Online (Sandbox Code Playgroud)