收集信息
确认内核版本
uname -a 查看 内核版本低于3.6 ,采取删除分区重建分区来扩容(这是迫不得已的方法,只有在没有dracut-modules-growroot 这个包时才使用此方法)
查看分区文件系统
执行blkid
看到都是ext4
但是执行fdisk -l
看到start 是 1 ,正常fdisk -l 查看MBR分区应该是从2048开始
查看分区参数
执行fdisk -lu
让分区按照sector 来显示 ①
扩容
执行yum install -y dracut-modules-growroot
安装growpart工具,提示找不到包。
决定采用删除分区再新建分区的方案 执行fdisk 删除分区
[root@localhost ~]# fdisk /dev/xvdaWARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').Command (m for help): pDisk /dev/xvda: 53.7 GB, 53687091200 bytes255 heads, 63 sectors/track, 6527 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000215a8 Device Boot Start End Blocks Id System/dev/xvda1 * 1 5222 41942016 83 LinuxCommand (m for help): dSelected partition 1Command (m for help): nCommand action e extended p primary partition (1-4)pPartition number (1-4): 1First cylinder (1-6527, default 1): 1Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527):Using default value 6527Command (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.The kernel still uses the old table. The new table will be used atthe next reboot or after you run partprobe(8) or kpartx(8)Syncing disks.
由于操作的是正在使用的分区,因此需要重启来加载新的分区表,重启后系统就挂了,grub 无法识别分区文件系统。 因为一个cylinder 会包含多个sector ,这也是为什么前面fdisk 看 xvda 和xvdb 都是1,但是起始扇区却不一致的原因。 前面新建分区按照起始cylinder 设置为1 ,没有指定扇区② 已经注定了这个分区文件系统将会异常。
恢复分区文件系统
使用PE 启动后,执行testdisk /dev/xvda
来进行恢复
由于是MBR分区,系统自动就选择 了第一项 【Inter】Inter/PC partition③
分析当前分区结果并找回丢失的分区
不用等待扫描完就主动停止,因为除了修改分区起始扇区没做其它操作不需要深度扫描,绿色的就是找到的分区,按P查看文件是不是想要的(如果看不到,说明这个分区不对)
按Enter 继续并将分区信息写会磁盘,执行partprobe /dex/xvda告诉内核重新加载分区表
重新扩容磁盘
扩展分区
由于PE的fdisk版本较高,因此这里新建分区会按照sector 来显示,可以看到默认就是2048 扇区开始
需要注意的是,在提示分区包含一个ext4 的signature,提示是否需要移除时,一定要输入N ,否则保存后,文件系统会再次无法识别。
操作完毕后,执行blkid 分区文件系统正常。
扩展文件系统
执行resize2fs 提示需要先e2fsck -f ,执行e2fsck -n 是先确认分区是否有异常。
扩容文件系统完成,分区大小已经发生变化
注:
❶ fdisk 低版本是按照cylinder来显示的 ,如果不加参数u 默认以cylinder为单位,而一个cylinder上会有多个sector导致在新建分区时无法指定准确的起始位置。
❷ fdisk 新建分区时,输入u 可以按照扇区sector来 指定起始扇区。
❸ 如果是GPT分区 选择第二项【EFI GPT】,遇到MBR 分区搜索不到正确的分区时尝试当做GPT分区扫描。