17.3. 调整或增加磁盘

Originally contributed by Allan Jude.

磁盘的容量可以在不改变已经存在的数据的情况下增加。这种情况经常发生在虚拟机上,当虚拟磁盘压缩或扩展时,就会出现这种情况。有时磁盘镜像被写入USB存储器,但没有使用全部容量。这里我们介绍一下如何调整或增大磁盘,以利用增加的容量。

可以通过/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分区方格式,则该磁盘可能显示为已损坏,因为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)

分区只能调整为连续的可用空间。在这里,磁盘上的最后一个分区是交换分区,但第二个分区是需要调整大小的分区。交换分区只包含临时数据,因此可以安全地卸载、删除第三个分区,然后在调整第二个分区的大小后重新创建第三个分区。

停用交换分区:

# swapoff /dev/ada0p3

-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)

警告:

对于已挂载的分区,修改分区表有造成数据丢失的风险。所以尽量避免在已挂载的设备上进行分区修改操作。如果非要在已挂载的分区上修改分区表,需要禁用 GEMO 安全功能:

# 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

这样,文件系统和分区就都调整好了。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.