20.3.调整和增加磁盘大小 ======================= 可以增加磁盘的容量,而无需对已经存在的数据做任何改变。这在虚拟机上经常使用,当虚拟机磁盘太小时可以增加容量。有时磁盘镜像被写入 U 盘,但没有使用全部容量。这里我们将介绍如何调整磁盘内容的大小来使用增加的容量。 通过查看 **/var/run/dmesg.boot** 来确定要调整大小的磁盘的设备名称。在这个例子中,系统中只有一个 SATA 磁盘,所以该磁盘将显示为 **ada0**\ 。 列出磁盘上的分区来查看当前的配置: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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 分区方案格式化的,它可能显示为 ``corrupted``\ ,因为 GPT 备份分区表不再位于磁盘的末端。使用 ``gpart`` 可修正备份分区表: .. code:: shell-session # gpart recover ada0 ada0 recovered 现在,磁盘上的额外空间可供一个新的分区使用,或者可以扩展一个现有的分区: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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) 只能在连续的未使用空间上调整分区。此处,磁盘上的最后一个分区是交换分区,但第二个分区是需要调整大小的分区。交换分区只包含临时数据,所以它可以安全地被卸载、删除,然后再调整第二个分区的大小后重建第三个分区。 禁用交换分区: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # swapoff /dev/ada0p3 从 *ada0* 磁盘中删除第三个分区,由 ``-i`` 参数来指定分区: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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 安全功能后调整已挂载文件系统的大小。 .. code:: shell-session # sysctl kern.geom.debugflags=16 调整分区的大小,留出空间来重新创建一个所需大小的交换分区。用 ``-i`` 指定要调整的分区,用 ``-s`` 指定新的期望大小。可以用 ``-a`` 来控制分区的对齐。此处只是修改了分区的大小。将在另一个单独的步骤中扩展分区中的文件系统。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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`` 指定大小,则会使用所有剩余的空间: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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 文件系统,以使用调整后的分区的新容量: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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,调整大小是通过运行带 ``-e`` 的 ``online`` 子命令来触发的: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # zpool online -e zroot /dev/ada0p2 分区和分区上的文件系统大小现在都已被调整,可以使用新的可用磁盘空间了。