之前尝试将root空间扩容,没有先去做准备知识,从home空间减容,然后将多的空间给root,结果home的文件系统是xfs,只能扩容不能减容,改完之后/home下的所有文件都是I/O错误,重启之后就进不去系统了,直接进入紧急模式,心想着重装是小事,home下的数据才是大事,记录下自己补救数据的方法
首先用U盘重新做一个启动盘,我的系统是centos7.9,这一步就不说了,最简单的一步。
做完启动盘后,机器插上U盘,进入U盘系统,先选Troubleshooting,再选Rescue installed system
进入之后按3进入shell
这一步就进入了U盘的救援系统,lvdisplay一下,你会发现电脑里存在之前的逻辑卷
lvm vgscan 查看系统中的逻辑卷组
lvm vgchange -ay
之后使用mount命令将逻辑卷挂载到本地文件夹就行了
可是我就是挂不上,显示超级块丢失
查了半天资料发现xfs文件系统不能减容只能扩容,你将xfs文件系统减容了,它要的blocks数还是之前的大小,但是多余的空间已经给了root,所以home这一块的文件系统就损坏了。这时可能有的人会想,那就把那一块空间还回来不就行了,还回来不就正好能满足home要的blocks数。确实,恢复到之前home的空间确实能恢复home,但是又有一个新问题。你把这块空间给了root,root可是增容了,你让它把这块空间吐出来可不容易,就跟home一样,xfs文件系统只能增容不能减容,减容只能减容后格式化才不会出现文件系统错误。这时就出现了很奇怪的解决方法,你把这块多了的空间给谁,谁就正常,给root root就正常,给home home就正常,谁缺谁文件系统就出错,但就是不能同时拥有
没法,只能备份后再格式化修复文件系统了
我的home文件比较多,所以我备份root的,然后格式化root,你也可以备份home然后格式化home
将这一块空间给root,root文件系统恢复正常,挂载到一个本地文件夹上
给空间这一步,就是通过不断使用lvresize来更改分区大小,挂载失败用dmesg | tail -20来看看报错信息,一般都是root需要多少blocks,但是只有多少blocks这样的错误,看差多少blocks,1blocks等于512bytes,自己算算,然后使用lvresize继续调整大小
使用xfsdump备份文件系统
这一步我是有一个2T的移动硬盘存放备份的文件,如果你没有,那么U盘空间大原系统文件少,U盘可以放的下,那也是木的问题的,要是U盘放不下,看看自己手边有啥存储介质可以放的了备份文件,或者删点不需要的东西,比如日志,不然没地方放备份文件的
xfsdump -f [备份存放路径文件名] [要备份的设备文件或挂载点]
xfsdump -f root.xfsdump /dev/centos/root
改变root所要的空间,将这部分空间还给home
lvresize -L [缩小的空间] /dev/centos/root
备份完格式化root
umount /dev/centos/root
mkfs.xfs -f /dev/centos/root
格式化后挂载root,使用xfsrestore恢复数据
xfsrestore –f [指定需要恢复的备份文件路径] [指定恢复后文件的存放路径]
xfsrestore -f root.xfsdump /dev/centos/root
将多的空间还给home,修复home空间
lvresize -L [空间] /dev/centos/home
这步完成后看root和home能不能同时挂载到本地文件夹中,如果可以,那么重启开机一般就可以进入系统了