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


2

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

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

题:

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

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

我在Ubuntu 16.04上。


有一些工具可以调整分区的大小,但我不知道你打算如何保留未分配硬盘的部分内容。这在VM上更有意义。
Julie Pelletier 2016年

在这种情况下,“雇用”意味着什么?
Deltik 2016年

@Deltik“雇用”我的意思是,在没有VirtualBox的主机操作系统上使用任何基于文件的硬盘格式。例如,如果我在我的主机操作系统上安装这个基于文件的hdisk,并且如果主机程序(例如cat)写入位于此hdisk中的文件,那么此hdd应该在需要时自动扩展。
哈利

如果您的意思是写入原始图像中的分区的挂载并且原始图像最初是稀疏地创建的,那么是的,它将在数据写入原始图像时展开。
Deltik 2016年

@Deltik太棒了!那么,是否qemu-img需要使用?我认为,你的答案中的关键点是稀疏文件,我不知道ext4支持。我可以创建一个稀疏文件,并使用losetupmke2fs,对吧?
哈利

Answers:


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

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

    truncate -s 64G disk.img
    
  2. 您现在可以将其disk.img用作环回块设备,并在写入时进行扩展。


奖金功能

如果要将磁盘映像转换disk.img为其他格式(如物理磁盘)/dev/sdb,请使用qemu-img

qemu-img convert -O raw disk.img /dev/sdb

如果要将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

+1为truncate。命令的名称并没有完全公正,因为它也可以扩展这个东西,而且也很稀疏!
哈利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.