有没有办法在运行驻留在 UFS /root 分区上的操作系统时调整其大小?我正在运行 FreeBSD。
答案1
有一个关于在 FreeBSD 下扩展磁盘的相当全面的指南在手册中对于UFS(FreeBSD的默认设置),从内核版本10.0及以上版本都可以在线升级。
但是,更改已安装文件系统周围的分区可能会导致数据丢失或不一致,这些数据可能会在系统下次尝试引导时首先发现。还要记住检查您的引导加载程序。
增长文件系统基本上可以归结为:
调整分区表。执行此步骤时要非常小心,因为这里搞乱可能会导致整个磁盘损坏。您可能希望卸载运行最小系统不需要的所有分区,尤其是交换分区。
从你的问题来看,我假设你知道如何使用
gpart
来实现这一点。完成调整后,您可以安全地重新安装所有分区并重新启用交换。
- 实际成长FS。
growfs <blockdevice>
对于 FreeBSD,这就像<blockdevice>
发出调整大小的分区一样简单。
为了缩小,您必须反向执行这些步骤:
- 缩小文件系统确保您不会覆盖任何重要的内容:
growfs -s <new_size> <blockdevice>
.确保您选择小于新目标的尺寸文件系统大小,即如果您想从 100GB 分区减小到 70GB,请在此步骤将 FS 大小调整为大约 60-65GB。超调越多意味着更多的空间,但通常也意味着更多的重新定位,从而导致更长的等待时间。 - 调整分区表。与以前不同,在此步骤中您可以选择确切的目标尺寸。您可能也想在此步骤卸载其他分区,特别是如果您移动其他分区(事实上,在这种情况下您必须卸载这些)。
- 扩大文件系统。这消除了您在(新)分区末尾留下的净空:
growfs <blockdevice>
。省略大小参数会告诉它使用整个分区。
答案2
有一个更好的方法可以做到这一点:
service growfs onestart
它将调用/etc/rc.d/growfs
一次。该脚本基本上调用 FreeBSD 手册中的所有相同命令。该脚本旨在在首次启动时调用,以便您可以分配一个非常小的虚拟硬盘,然后当它在大型虚拟硬盘上首次启动时,VM 会扩展以使用提供的整个磁盘。如果您稍后扩展虚拟磁盘(或者将dd
文件系统扩展到更大的物理磁盘),您可以手动调用一次脚本来执行所有正确的操作。
答案3
您必须将 rootfs 挂载为只读,并在调整大小完成后立即重新启动。