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. 扩大文件系统
在将两个分区合并为一个分区,或者是增大虚拟机磁盘空间大小后,需要调整文件系统大小才能使用增加的空间。
- 如果文件系统已经被挂载,使用
umount
命令卸载 - 用
parted
或fdisk
调整分区大小 e2fsck -f /dev/part_name
检查文件系统- 使用
resize2fs /dev/part_name part_size
修改文件系统大小,调整文件系统大小,如果比超过了分区大小,会提示失败 - 使用
mount
重新挂载文件系统
2.1. 根文件系统扩容
需要用启动盘进入系统,使用启动盘的根文件系统启动,此时命令行通常为busybox,之后的扩容步骤与普通文件系统的扩容一致。
3. 文件系统和磁盘分区缩容
- 如果文件系统已经被挂载,使用
umount
命令卸载 e2fschk -f /dev/xxx
检查文件系统- 确定文件系统缩小后的值,可以用
resize2fs -P /dev/xxx
查看,输出值乘以4k(4 * 1024)就是文件系统最小大小,也可以卸载前用df查看。 resize2fs /dev/xxx [size]
,调整文件系统大小,size要比已占用的稍大。- 用
parted
或fdisk
调整分区大小,操作过程会提示可能丢失数据,无需关心
如果是虚拟磁盘,这是将空闲空间划分为一个新的分区,如/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挂载文件系统