之前写过的文章,最近遇到缩小的问题,于是想当然的按照之前的大概步骤做了下,失败了,文件系统发生故障,无法fsck和resize2fs,和同事沟通了下,猛然想起,以前也做过相关测试,方法没什么问题,关键是顺序搞错了,下面作为记录,以免遗忘。

测试环境:
RHEL6.4
分区有三个sda1、sda2、sda3

测试目的:
将sda3的2TB空间,缩小到500GB。

测试过程:
1、当然是备份数据,要养成好习惯;

2、卸载文件系统;
umount /dev/sda3

3、缩小文件系统;
resize2fs /dev/sda3 500G
当然,如果原来sda3里已经有600G数据的话,现在缩小到500G是肯定不行的,所以具体多少合适,要看实际情况而定;

4、缩小分区;
fdisk /dev/sda
输入 p 查看当前状态,将sda的状态拍照,或者手动记录下分区的 start 和 end 值,这点很重要!
输入 d 删除分区3;
输入 n 创建分区3,起点start 和原来保持一致,end的值可以直接输入 +500G ;
输入 p 查看下;
输入 w 保存退出。

5、再次确认下文件系统大小;
resize2fs /dev/sda3
会自动去确认当前文件系统的大小;
如果提示需要先fsck的话,则先执行fsck后,再执行resize2fs操作;

6、挂载使用
mount /dev/sda3 /mnt

备注:
如果先fdisk缩小了分区表,再resize2fs和fsck的时候会出现问题,导致文件系统损坏。
但查看superblock的信息,可以正常显示,所以修复的可能性应该很大。
mkfs.ext4 -n /dev/sda3 查看superblock
dumpe2fs -o superblock=xxx /dev/sda3 查看其中任一一个superblock的信息。

修复过程为:
fdisk /dev/sda 还原分区表;
resize2fs -f /dev/sda3 500G
fdisk /dev/sda 缩小分区表;
resize2fs /dev/sda3
fsck -y /dev/sda3
mount /dev/sda3 /mnt

恢复过程结束,可以正常挂载。