Linux扩容失败,启动报错的解决方法

我之前写过一篇Linux如何扩展根目录。这一篇,我想在原来扩展的目录基础之上,重新扩容。

由于Linux主分区只支持4个分区,而我已经使用了3个。我想能不能把扩展的/dev/sda3先删除,然后重新添加一个更大一点的/dev/sda3分区。

操作如下

1
2
3
4
5
6
7
8
9
10
11
fdisk /dev/sda
//删除节点
d
//节点编号
3
//重新添加分区
n
//新分区号
3
//填写分区容量大小
...

我这么一顿操作之后,只看到了fdisk -l下,我的分区容量变了,但是pvcreate以及vgextend命令都不奏效。我想着重启一下看看,谁知道系统进不去了,只能进入紧急模式,紧急模式下报错

buffer io error on dev dm-2, logical block XXXXX, async page read

我想被我给搞砸了,已经扩展的正在投入使用中的分区,不可以随便删除,更不能删了之后,随意指定大小。好在我还有一个备份版本,我打开备份版本,记录下原来/dev/sda3的扇区起始位置,以及扇区结束位置。

那怎么才能修复这个问题呢?我在网上找到一个方法。

由于我的分区格式为ext4,所以要使用命令fsck.ex4来修复出错的目录分区。我的出错的目录分区是我的根目录分区/dev/mapping/VolGroup_root,执行命令

1
fsck.ex4 -y /dev/mapping/VolGroup_root

-y参数就是用来修复磁盘的参数,但问题是它还是报了Error。正在我不知道怎么办的时候,我尝试着执行exit退出命令,直到我完全退出系统,重启系统后,我发现,我没有再次进入紧急模式,而是另一种类似于安全模式的模式。

这个模式下,我可以正常使用一些常用的命令,比如fdisk。于是我想试试恢复到之前的扇区大小,再次执行fdisk命令

1
2
3
4
5
6
7
8
9
10
11
fdisk /dev/sda
//删除节点
d
//节点编号
3
//重新添加分区
n
//新分区号
3
//填写之前记录下的原分区扇区起始以及终止位置
...

重启,看到有一行报错,心想估计不行,没想到重启后竟然进入了正常登录页。整个过程中唯一可以庆幸的是我还有一份备份,可以让我查看原扩展分区的扇区位置大小,如果没有记录下原扇区位置大小,我想我很难恢复回去。估计每次都只能进入安全模式了。

暂时没有找到更好的方法,网上也没找到类似于和我一样的情况,这也是我个人的突然奇想吧。

总结

已存在的扩展分区还是不要随意删除的好,如果要删除也不应该先从fdisk中直接修改大小。估计要先按照Linux扩展目录的步骤,倒着来,先解除扩展绑定,再修改大小。反正我没再试过,我的做法是创建了一个新的分区/dev/sda4来扩展,反正4个主分区用光算数,总比我进不了系统的好。

avatar

chilihotpot

You Are The JavaScript In My HTML