调整虚拟硬盘驱动器的大小

Jon*_*n H 5 filesystems dd mkfs

我找到了一个关于如何创建虚拟硬盘的非常好的教程,我正在考虑在我的工作中使用这些教程,以便可靠地和可移植地存储具有相关处理结果的大型数据集。

基本上,本教程包括这样做:

dd if=/dev/zero of=MyDrive.vhd bs=1M count=500
mkfs -t ext3 MyDrive.vhd
mount -t auto -o loop MyDrive.vhd /some/user/folder
Run Code Online (Sandbox Code Playgroud)

它创建了一个 500MB 的 ext3 格式的虚拟硬盘驱动器并将其安装在某处。

现在说我使用该文件并意识到我需要超过 500MB,有没有办法“动态”调整虚拟磁盘的大小?(动态我的意思是除了创建一个新的更大的磁盘并复制数据。)

Ser*_*rge 12

有比dd扩展文件更好的选择。该dd命令需要几个参数才能正常运行(以免损坏您的数据)。我用truncate代替。尽管它的名字,它也可以扩展文件的大小:

truncate - 将文件的大小缩小或扩展到指定的大小

-s, --size=SIZE

通过 SIZE 设置或调整文件大小

SIZE 是一个整数和可选单位(例如:10M 是 10*1024*1024)。单位 > 是 K、M、G、T、P、E、Z、Y(1024 的幂)或 KB、MB、...(1000 的幂)。

SIZE 也可以以下列修饰字符之一作为前缀:'+' 扩展,'-' 减少,'<' 最多,'>' 至少,'/' 向下舍入为倍数,'%' 舍入多达多个。

因此,

truncate -s +1G MyDrive.vhd
Run Code Online (Sandbox Code Playgroud)

安全地将您的文件扩展 1 GB。而且,是的,当底层文件系统支持时,它会进行稀疏扩展,因此实际块将按需分配。

展开文件时,不要忘记运行 resize2fs:

resize2fs MyDrive.vhd
Run Code Online (Sandbox Code Playgroud)

此外,umount对于支持在线调整大小的文件系统,整个过程都可以在线完成(不使用设备):

losetup -c loopdev
Run Code Online (Sandbox Code Playgroud)

更新后备文件的内核信息,

 resize2fs loopdev
Run Code Online (Sandbox Code Playgroud)

在线调整挂载的文件系统的大小


Ipo*_*cer 5

尺寸翻倍:

umount /some/user/folder
dd if=/dev/zero bs=1M count=500 seek=500 >>MyDrive.vhd
resize2fs MyDrive.vhd
Run Code Online (Sandbox Code Playgroud)