前言
这是去年7月写的文章,当时对Linux并没什么了解,但是同学向我求助,也就去折腾了一回!
折腾经过:
前天同学打电话给我,说是某单位的华为服务器(H22H-05)进不了系统(Centos7),昆明的技术员说是要重新做系统,数据会丢失!但是,单位是坚决不允许数据丢失的!所以求助于我。。
说实话,之前我从未接触过Centos,甚至都没有研究过,所以问我我也是一问三不知。。
但是呢,研究问题是我比较喜欢的,所以第二天一早我问他搞定了没有,没有的话我先远程研究一下。。
然后就开始了远程折腾。。
远程操作说明:通过一台笔记本连接到服务器的管理口,然后使用华为的工具可以像管理自己电脑一样操作服务器,包括调整BIOS等。然后笔记本装了个向日葵,我在家使用向日葵远程到那台笔记本进行操作。
首先看了一下,确实没有进入正常的系统,屏幕上提示了一堆英文,百度了一下,知道了那是救援模式或者叫救急模式。
然后根据屏上的提示,输入了命令:journalctl 查看系统日志。因为是第一次看Centos的日志,一开始看得很认真,还时不时就百度,后面发现不对,日志内容太多了!看到什么时候都不知道!
于是我直接按下end键,跳到了最后一页。屏幕上赫然出现了三行红色的错误提示!第一行就是:Failed to mount /sysroot 两外两行我没记,大概意思也是和这个提示有关。
然后往前翻了翻,还有一个提示是什么 “i8042控制器没有找到” 之类的,这个不影响。
很明显,不能正常进系统的原因必然是因为它:Failed to mount /sysroot
于是,百度之。。
度娘的结果,不敢说100%,99%给出的解决方法都是这个:xfs_repair -v -L /dev/dm-0
我信了!但是呢,有些人说可能会导致数据丢失!这。。
思来想去觉得不保险,研究了一天寻找更安全的方法,也始终没有敢输入这一串命令!
晚上,我打电话让同学安排把服务器抬过来,我打算先进PE里把数据备份一下,然后再折腾!
今天中午1点,服务器抬来了,开始现场折腾~~
首先,当然是插上我心爱的小U盘,想要进PE。结果试了几次都是,一从U盘启动服务器就自动关机!!PE进不去,头疼。。
研究了一下,发现是UEFI的启动方式,于是在BIOS中把UEFI改成了传统方式,再进PE成功了!
Windows是不能直接读取XFS(Centos默认使用的分区格式)格式的分区的,原本我是寄望于DiskGenius这款国产分区神器!
但是很不幸,它并不支持XFS。幸好我有所准备,拿出另一款超级神器:UFS Explorer !
正确读出了服务器硬盘上的东西,除了一个分区显示 RAW 无法读取外,其它分区的数据都能看到!
于是我让人拿来一个移动硬盘,把单位需要的数据全部备份。
数据备份花了两三个小时,然后开始尝试修复系统!
我输入了网上查来的那串命令:xfs_repair -v -L /dev/dm-0
没用!!我又输入:xfs_repair -v -L /dev/dm-1
还是没用!!有点懵,我以为一下子就可以搞定的。。
想起在PE里,其它分区都对正常读取,只有那个RAW分区很奇怪,各种折腾之后确定那个是swap交换分区。。
我想,可能我和网上的那些情况不同吧。。导致错误的原因可能是swap分区异常!
于是,我开始折腾起这个分区!
服务器原本的救援模式很多命令都变得不可用了,于是我使用了一个有Centos7的U盘来导引,进入了它的救援模式
一翻折腾后,确定swap分区对应的是/dev/dm-5
于是我输入了:xfs_repair -v -L /dev/dm-5
还是没用!!
我也记不清究竟折腾了多少命令,翻了多少百度。。
用过的命令:mkfs.xfs -f -d agcount=2,su=256k,sw=2 -r extsize=512k /dev/dm-5
agcount=2表示使用两个CPU线程,su=256k表示块大小,sw=2 表示阵列有两个盘,extsize=512k 这个值是su*sw。这台服务器是3个硬盘组的RAID5,所以sw设成了2
…………
最后,好像是这样解决的:
swapoff -a 关闭swap
rm -f /mnt/sysimage/dev/mapper/cl-swap 删除swap。swap原本的路径是/dev/mapper/cl-swap,在U盘启动的救援模式中,会挂载到/mnt/sysimage目录下
xfs_repair /dev/dm-5 原本没报什么希望,所以也没加-v -L这两个参数。加不加这两个参数,我觉得这里的结果都是一样的
看到了不一样的提示,我预感它已经正常了!于是我又输入了一次:xfs_repair /dev/dm-5 然后reboot重启!!
这个时候已经快19点,肚子有点饿,还没等服务器重启好,我们就先去吃饭了~~
吃饭回来一看,久违的 localhost login: 出现了!
再次重启,仍是一切正常,搞定收工~~
skyyx2002
2021.07.18
后话
现在回想,这故障应只是swap分区出错导致!
以我现在对Linux的了解,可能几分钟就搞定了。。