高和数科 老服务器跑了 5 年没重启,重启直接炸了xfs 不认了


上周给一台跑了好几年的老 Ubuntu 服务器升配置,本来是好事,结果重启完直接给我整懵了: 之前用了好几年的 xfs 数据盘,死活挂载不上,报错就一行:
mount: unknown filesystem type 'xfs'
我当时人都傻了,重启前这硬盘还好好的啊!读写正常,数据都在,怎么重启完,系统直接不认 xfs 了? 而且这盘里存了好几个 T 的业务数据,我差点以为数据丢了,吓出一身冷汗。
第一步:先排除硬盘和文件系统的问题
看到这个报错,我第一反应就是:是不是 xfs 文件系统坏了? 毕竟之前遇到过不少,硬盘坏了,文件系统损坏,系统就认不出格式了。
为了验证,我赶紧把这块云硬盘从这台机器上卸载,挂到了另一台同版本的 Ubuntu16.04 虚机上,试了下挂载:
mount /dev/vdb1 /data
哦!居然一下就挂上了!数据全在,一个文件没少,读写都正常!
这下我松了口气,数据没丢!那说明硬盘没坏,xfs 文件系统也没坏,问题出在这台刚升完配置的机器本身!
排查了一圈,软件包、引导全正常?
那问题出在哪?我挨个排查:
1. 是不是 /boot 引导文件坏了?
刚升完配置重启,会不会是引导文件丢了?导致系统认不出文件系统? 我把 /boot 目录的文件,跟同版本的机器对比了一下,全正常,没缺文件,内核也没错,引导的问题直接排除了。
2. 是不是 xfsprogs 软件包坏了?
那会不会是 xfs 的工具包坏了?毕竟 mount 认 xfs,全靠 xfsprogs 啊。 我赶紧查了下软件包:
dpkg -l |grep xfs
结果输出:
ii xfsprogs 4.3.0+nmu1ubuntu1.1 amd64 Utilities for managing the XFS filesystem
哦?包明明在啊,版本也对,没丢啊。
为了验证,我甚至拿了个新的空硬盘,试了下能不能格式化成 xfs:
mkfs.xfs /dev/vdc
居然成功了!说明 xfsprogs 工具是好的,能格式化,为啥就是挂载不上?
这下我彻底懵了,工具是好的,硬盘是好的,为啥 mount 就是不认 xfs?
最后发现:系统库文件丢了!
折腾了快 6 小时,我突然反应过来:mount 挂载的时候,是不是需要 /lib 里的库文件? 会不会是这台机器的系统库文件丢了?
我赶紧把这台机器的/lib/、/lib64/目录,跟同版本的正常机器对比了一下,好家伙! 这台机器的这两个目录里,少了一堆 xfs 相关的文件!不知道啥时候,装软件的时候给误删了!
合着这坑埋了不知道多久了! 之前没重启的时候,系统已经把 xfs 的模块、库都加载到内存里了,哪怕磁盘上的文件丢了,内存里还有,所以我们用着好好的,读写正常,没人发现文件丢了! 结果这次升配置重启,内存里的东西全清了,要重新挂载硬盘的时候,才发现磁盘上的文件没了,系统直接认不出 xfs 了!
找到问题就好办了,我赶紧找了台同版本的正常机器,把缺的文件同步过来:
rsync -avz /lib/ root@172.31.243.xx:/lib/rsync -avz /lib64/ root@172.31.243.xx:/lib64/
同步完之后,再执行 mount,哦豁!一下就成功了! 数据全在,硬盘正常挂载,啥问题没有了!
给大家提个醒:别乱碰 xfs_repair!
这里必须给大家提个醒: 很多人遇到 xfs 挂载不上,第一反应就是:是不是文件系统坏了?那我整个 xfs_repair 修一下?
千万别!你都没搞清楚问题在哪,上来就修文件系统,很容易把数据搞没了! 这次的问题,根根本不是文件系统坏了,是系统的文件丢了,你要是上来就 xfs_repair,不仅修不好,反而可能把数据搞坏,到时候哭都来不及!
遇到这种挂载不上的问题,先把硬盘挂到别的机器上,看看能不能识别,先排除文件系统的问题,再排查系统的问题,别上来就乱修!
运维避坑:这 3 个坑,千万别踩!
这次的故障,真的给我上了一课,一个丢了不知道多久的系统文件,重启就炸了,差点把我搞疯。 今天也给大家提个醒,这几个坑,千万别踩:
1. 老服务器改完配置,一定要测试重启!
这次我们就是,升配置、调规格,以为只是改个硬件,改完就不管了,谁能想到,重启才炸出这么个埋了好久的坑。 以后不管你给老服务器改啥,改完一定要测试重启,别等线上出问题了,才发现一堆隐患。
2. 别手贱乱删系统目录的文件!
很多人装软件的时候,为了解决依赖问题,手贱就删/lib、/lib64里的文件,觉得删了没事,反正现在用着好好的。 但是你想过没?这些文件,重启的时候就用到了!你删了,当时没事,重启直接炸,你都不知道为啥。
3. 例行重启、故障演练,真的很重要!
文章最后也说了,很多服务器,跑了好几年没重启过,看起来好好的,其实埋了一堆坑,只有重启才会暴露。 有条件的话,一定要给服务器做例行重启、故障演练,把这些隐患提前挖出来,别等真出问题了,你都不知道咋回事,到时候业务停了,数据差点丢了,才后悔。
最后
你看,这次的故障,说复杂也不复杂,就是丢了两个目录里的几个小文件,结果埋了好几年,直到重启才炸,差点把我搞疯。
很多时候,老服务器的故障都是这样,不是什么大的 bug,就是平时的一些小操作,删了个文件,装软件的时候误改了啥,当时没事,就埋成了雷,直到重启才引爆。
千里之堤,溃于蚁穴,运维这活,真的是步步惊心,别以为服务器跑了好几年没重启过,就啥事没有,那些看不见的坑,指不定哪天就给你炸了。
最后问大家一句:你有没有遇到过这种,跑了好几年的服务器,一重启就炸了的经历?有没有踩过 xfs 的坑?欢迎在评论区唠唠!
