可以在不更改现有数据的情况下增加磁盘容量。这在虚拟机中很常见,当虚拟磁盘空间不足时,通常会扩大磁盘容量。有时,磁盘映像被写入 U 盘,但未使用完整容量。在这里,我们将介绍如何调整或 扩展 磁盘内容,以充分利用增加的容量。
通过检查 /var/run/dmesg.boot 文件来确定要调整大小的磁盘设备名称。在此示例中,系统中只有一个 SATA 硬盘,因此该硬盘将显示为 ada0 。
列出磁盘上的分区,以查看当前配置:
复制 # gpart show ada0
=> 34 83886013 ada0 GPT (48G) [CORRUPT]
34 128 1 freebsd-boot (64k)
162 79691648 2 freebsd-ufs (38G)
79691810 4194236 3 freebsd-swap (2G)
83886046 1 - free - (512B)
注意
如果磁盘使用的是 分区方案,可能会显示为“损坏”,因为 GPT 备份分区表不再位于磁盘末尾。可以使用 gpart
修复备份分区表:
复制 # gpart recover ada0
ada0 recovered
现在,磁盘上额外的空间可以用来创建新分区,或者扩展现有分区:
复制 # gpart show ada0
=> 34 102399933 ada0 GPT (48G)
34 128 1 freebsd-boot (64k)
162 79691648 2 freebsd-ufs (38G)
79691810 4194236 3 freebsd-swap (2G)
83886046 18513921 - free - (8.8G)
分区只能调整到连续的空闲空间。在这里,磁盘上的最后一个分区是交换分区,但需要调整的是第二个分区。交换分区只包含临时数据,因此可以安全地卸载、删除,然后在调整第二个分区后重新创建第三个分区。
禁用交换分区:
使用 -i
标志从磁盘中删除第三个分区 ada0 :
复制 # gpart delete -i 3 ada0
ada0p3 deleted
# gpart show ada0
=> 34 102399933 ada0 GPT (48G)
34 128 1 freebsd-boot (64k)
162 79691648 2 freebsd-ufs (38G)
79691810 22708157 - free - (10G)
警告
修改已挂载文件系统的分区表存在数据丢失的风险。最好在使用 Live CD-ROM 或 USB 设备运行的情况下,对未挂载的文件系统执行以下步骤。如果必须对已挂载的文件系统进行调整,请禁用 GEOM 安全功能:
复制 # sysctl kern.geom.debugflags=16
调整分区大小,留出空间以重新创建所需大小的交换分区。调整的分区通过 -i
指定,新的目标大小通过 -s
指定。可选地,可以使用 -a
控制分区的对齐方式。此操作仅修改分区的大小,文件系统的扩展将在后续步骤中完成。
复制 # gpart resize -i 2 -s 47G -a 4k ada0
ada0p2 resized
# gpart show ada0
=> 34 102399933 ada0 GPT (48G)
34 128 1 freebsd-boot (64k)
162 98566144 2 freebsd-ufs (47G)
98566306 3833661 - free - (1.8G)
重新创建交换分区并激活它。如果没有使用 -s
指定大小,则会使用所有剩余的空间:
复制 # gpart add -t freebsd-swap -a 4k ada0
ada0p3 added
# gpart show ada0
=> 34 102399933 ada0 GPT (48G)
34 128 1 freebsd-boot (64k)
162 98566144 2 freebsd-ufs (47G)
98566306 3833661 3 freebsd-swap (1.8G)
# swapon /dev/ada0p3
扩展 UFS 文件系统以使用调整大小后的分区的新容量:
复制 # growfs /dev/ada0p2
Device is mounted read-write; resizing will result in temporary write suspension for /.
It's strongly recommended to make a backup before growing the file system.
OK to grow file system on /dev/ada0p2, mounted on /, from 38GB to 47GB? [Yes/No] Yes
super-block backups (for fsck -b #) at:
80781312, 82063552, 83345792, 84628032, 85910272, 87192512, 88474752,
89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432
如果文件系统是 ZFS,可以通过运行 online
子命令并使用 -e
选项来触发调整:
复制 # zpool online -e zroot /dev/ada0p2
现在,分区及其上的文件系统都已调整大小,以利用新增的磁盘空间。