1. 简介

Linux磁盘及文件系统扩容/缩容涉及的命令:

  • df
  • parted,K、M、G以1000为基,要使用1024为基准的单位,需要用KiB、MiB、GiB、TiB
  • fdisk
  • e2fsck
  • resize2fs,‘K’, ‘M’, ‘G’, ‘T’,无论大小写,都是1024为基,也可以使用s来以512 bytes的sector为基。
  • mkfs

命令执行需要root权限,可以切换到root用户或者在命令前加sudo执行。

使用过程中需要注意单位是以1000还是1024为基准,如parted的默认使用的单位跟resize2fs就是不同的。

2. 扩大文件系统

在将两个分区合并为一个分区,或者是增大虚拟机磁盘空间大小后,需要调整文件系统大小才能使用增加的空间。

  1. 如果文件系统已经被挂载,使用umount命令卸载
  2. partedfdisk调整分区大小
  3. e2fsck -f /dev/part_name检查文件系统
  4. 使用resize2fs /dev/part_name part_size修改文件系统大小,调整文件系统大小,如果比超过了分区大小,会提示失败
  5. 使用mount重新挂载文件系统

2.1. 根文件系统扩容

需要用启动盘进入系统,使用启动盘的根文件系统启动,此时命令行通常为busybox,之后的扩容步骤与普通文件系统的扩容一致。

3. 文件系统和磁盘分区缩容

  1. 如果文件系统已经被挂载,使用umount命令卸载
  2. e2fschk -f /dev/xxx检查文件系统
  3. 确定文件系统缩小后的值,可以用resize2fs -P /dev/xxx查看,输出值乘以4k(4 * 1024)就是文件系统最小大小,也可以卸载前用df查看。
  4. resize2fs /dev/xxx [size],调整文件系统大小,size要比已占用的稍大。
  5. partedfdisk调整分区大小,操作过程会提示可能丢失数据,无需关心

如果是虚拟磁盘,这是将空闲空间划分为一个新的分区,如/dev/sda3,之后可以dd if=/dev/zero of=/dev/sda3来清空磁盘,关闭虚拟机后,可以进入虚拟机磁盘工具压缩虚拟磁盘文件大小。详细过程参考《VMware和Hyper-V回收虚拟磁盘空间》。

3.1. 演示

基本步骤汇总

 1umount /path/to/mountpoint
 2e2fsck -f /dev/xxx
 3# 查看文件系统最小占用空间
 4resize2fs -P /dev/xxx
 5# 压缩文件系统
 6resize2fs /dev/xxx xxG
 7# 进入parted命令行,调整分区大小,为空出来的空间创建分区
 8parted /dev/xxx
 9
10# 退出parted命令行,使用dd清零
11dd if=/dev/zero of=/dev/yyy bs=1M

下边只是命令演示,请根据实际大小调整数据

 1$ sudo e2fsck -f /dev/sdb1
 2e2fsck 1.45.5 (07-Jan-2020)
 3Pass 1: Checking inodes, blocks, and sizes
 4Pass 2: Checking directory structure
 5Pass 3: Checking directory connectivity
 6Pass 4: Checking reference counts
 7Pass 5: Checking group summary information
 8share: 614244/30523392 files (0.1% non-contiguous), 9399143/122070056 blocks
 9
10## 获取文件系统最小值
11$ sudo resize2fs -P /dev/sdb1
12resize2fs 1.45.5 (07-Jan-2020)
13Estimated minimum size of the filesystem: 8022240
14
15# 8022240 * 4k ~= 30.6G
16# 压缩文件系统
17resize2fs /dev/sdb1 31G
18
19# 使用parted命令行,调整分区大小,使用前可以使用unit修改单位
20# 只做命令演示,请根据实际大小调整数据
21sudo parted /dev/sdb1
22(parted) print          # 打印当前分区
23# ... ..
24
25Number  Start   End     Size    File system  Name     Flags
26 1      1049kB  67.1MB  66.1MB  ext4         primary
27
28(parted) resizepart 1   # 修改分区1的大小
29End?  [67.1MB]? 128MiB
30(parted) q              # 退出parted
31
32# 完成后确认uuid,一般不会改变
33sudo blkid
34
35# 使用mount或者修改/etc/fstab挂载文件系统