Gotta go faster.

本文章含有较多拍屏图片,因为 Live CD 不方便把截图传出来,请读者忍一下(。

前年的时候我把我家的一台旧电脑升级了下硬件改造成了服务器,持续运行至今没出过什么大问题,直到前两天——

红温的开始

我像往常一样连着 ssh 操作服务器,然后命令行突然没反应了,随后执行什么命令都报 输入/输出错误

输入/输出错误

再过一会儿, ssh 连接也没反应了,我前去查看服务器情况,插上显示器发现没有显示输出,电源也没有断,但是键盘完全无反应,只能硬重启。重启之后发现 BIOS 识别不到系统盘了。我想着可能是接触不良就把硬盘换了个 SATA 接口,启动之后识别到了系统盘并且正常启动了系统,但是没过多久就开始报满屏的 I/O Error

噔噔咚

大事不妙。这块 SSD 很可能已经坏了。糟糕的是我没有对系统盘做任何备份,虽然上面没有什么重要数据,但是重装系统以及重新配置各种服务还是很烦的。

硬重启之后 BIOS 又识别不到硬盘了,必须断电一段时间才能重新识别到。我启动到 Live CD 试图把盘里的数据 dd 出来,结果读到 4GB 就读不出来了:

dd中断

重启之后跳过这一块继续试图 dd ,但是在 8GB 多的地方又失败了,看来坏了不止一个地方。

至少分区表和超级块还在,不过这时候已经晚上11点了,如果继续的话我不知道要干到什么时候,就先睡了 (结果没睡好)

恢复数据

第二天起来查到了一个 ddrescue 工具,可以自动从坏掉的硬盘里读出尽量多的数据。于是就插上 Live CD 开干了。 ddrescue 运行的时候遇到 I/O Error 会等内核重置 SATA 链接之后跳过去继续读。花了约 1.5h 完成 Pass 1 之后已经成功读取了 240GB 中 239.897GB 的数据,看来还坏得不严重。

ddrescue成功读取

继续运行几个小时之后已经只剩 5MB 没有读出来了。我挂载上恢复出来的镜像先 fsck 了一遍,发现没有找到问题,看来文件系统是完好的,损坏的只有文件数据。ddrescue 还会输出一个 map 文件,里面有每一段读取成功/失败的范围,应该可以通过这个范围去寻找被破坏的数据属于哪个文件。

于是找到了superuser上的这个问答,发现可以使用 debugfs 命令来寻找被影响的文件,于是写了个脚本找出了所有损坏的文件。

损坏的少量文件

万幸的是损坏的少量文件都是不重要的文件,只需要重新安装一下软件包就能恢复。

复活!

接下来就简单了,我正好有张几乎是空的 HDD ,直接划个分区出来,把恢复出来的镜像 dd 回去,重新安装 grub ,然后修一下受损的文件就好了。虽然在 HDD 上的系统可能会慢一点,但是我几乎不跑什么 IO 密集型负载,就先凑合着用了。

后记

血的教训:备份很重要,所有丢失了就很烦的数据都应该备份。虽然这次运气好能完全恢复数据,但是下次可不一定。此外这块 致态 SC001 Active SSD竟然用了一年多就坏了, SMART 信息显示写入才 15TB ,看来长江存储也不太能信(?)

阅读此文
post @ 2023-10-24

UPD 2023.10.27 加入了 Waline 评论系统。欢迎在评论区交换友链;-)

从高中开始想搞的博客,咕了5年终于想起来做了。如你所见这是一个 retro 风格的主题,虽然只是表面上 retro ,但是我之后应该会做一个纯html,没有任何jscss的分站。

现在还没想好这里要写什么,想到了再说。首先排除课程笔记。

此帖也用作本站的 Changelog.

阅读此文
⬆︎TOP