硬盘故障恢复
你有没有在早晨醒来后对自己说:“今天我终于要备份我的工作站了!” 结果却发现你晚了一天,还少了大约 320Gb 的数据?嗯,这就是我最近遇到的情况,但别担心,故事有个美好的结局。不过我有点跑题了。
大多数人不进行日常维护或定期备份的借口是他们没有时间。所以当我发现自己有一些空闲时间时,我决定处理一下工作站上的一些问题。我执行了系统更新。由于我一直开着系统,我决定升级内核,并尝试让软件挂起工作,这样我就可以减少办公室的能源消耗和热量产生。最后,我决心完成备份我的 home 目录。
系统更新顺利完成,内核编译和安装也没有错误。下一步是重启到新的内核。当内核崩溃时,我以为我在内核配置中遗漏了什么,所以我重启回到旧内核,结果也崩溃了。由于这个系统在 15 分钟前还在运行,我知道情况要变得糟糕了。
这时,我想起我一直在用 Ubuntu Live CD 做一些测试,所以我启动了 Live CD。至少现在,我可以做一些工作了,即使我的工作站“翘辫子”了。这也给了我一个平台来处理我的常规硬盘,至少我是这么想的。当我尝试挂载 /dev/sda3 时,我被告知它不存在。Fdisk 告诉我我的分区表几乎消失了!只剩下 /dev/sda1(我存放内核的地方)和 /dev/sda2(我的交换分区)。我在 Gentoo 用户组发布了一条消息描述我的情况,被告知我应该研究一个名为 testdisk 的程序。
我想我至少应该评估一下 /dev/sda1,所以我尝试挂载它。没那么幸运。文件系统无法识别。快速查看 /proc/filesystems 告诉我 Ubuntu 没有将 ext2 支持加载到内核中。进一步调查显示,Ubuntu 从初始 ram 磁盘加载所有驱动程序,并且它们在 /lib/modules 中不可立即使用。我无法让自己在一个正在 ram 磁盘上运行的系统上解剖初始 ram 磁盘映像,所以 Gentoo 安装 CD 派上了用场。
在观看 Gentoo CD 启动时,我第一次看到了 IDE 磁盘寻道错误消息。我不太经常重启我的系统,Ubuntu Live CD 会隐藏这些消息,所以谁知道我已经使用需要更换的驱动器工作了多久?
一旦 Gentoo CD 启动,就该尝试恢复我的系统了。我发现 CD 上没有安装 testdisk,所以我必须先 wget 和解压它。奇怪的是,我必须运行 testdisk 并重启几次,才能得到一个看起来正常的分区表。当我尝试挂载文件系统时,我被告知 mount 找不到有效的文件系统。作为最后的努力,我决定尝试 fsck 文件系统。fsck 程序报告说它找不到超级块,但这是到目前为止我收到的第一个好消息;我知道我可以使用 -b 参数,并要求 fsck 使用备份超级块。至少 fsck 没有完全崩溃。所以,我发出了一个类似 fsck -y -t ext2 -b 8192 /dev/sda3 的命令,看看会发生什么。当 fsck 开始喷出错误消息,指示它正在执行的修复时,我断定这个过程会花费一段时间,就去睡觉了。
当我醒来时,我发现 fsck 已经完成了,所以我挂载了生成的文件系统。我真的希望看到我的所有文件都完好无损,但没有,我只看到了 /lost+found。当我 cd 进入 lost+found 目录时,我第一次看到了情况有多糟糕。fsck 程序完成了它的工作,恢复了我的文件系统,但它无法恢复分区根目录下的任何文件名,所以它将文件移动到 lost+found 目录,并以文件的 I 节点号重命名每个文件。我所拥有的只是一系列文件和目录,名称类似于 #19539303。而且目录列表有好几屏长;我通常保持一个非常干净的 / 目录,所以显然,fsck 遇到了很多麻烦。
这些奇怪命名的目录中有一个是我的 /home 目录。我做了一个有根据的猜测,猜到哪个是,果然,我有了用户目录。(我的 /home 目录是报告文件大小最大的那个。)更深入的检查显示,我的大部分文件似乎都在那里,而且它们的名字是正确的!我成功了!
当我的新硬盘到货时,我安装了它,并开始将我的旧文件复制到新驱动器上。我立刻被这个过程的缓慢程度震惊了。就好像我正在通过拨号调制解调器传输文件一样!更糟糕的是,IDE 子系统在这个过程中重启了几次。照这个速度,新驱动器在我的文件恢复完成之前就会过保,所以我必须做点什么。事实证明,我在我的 home 目录中积累了很多我真正不需要的文件。我下载了游戏和其他软件,只是在我的 home 目录中构建它们,而不是安装在系统上。在我删除了所有我不在乎的文件和目录之后,我才得以恢复其余的 /home 目录。
就是这样。当我开始时,我有一台死机,一个故障的硬盘,一个损坏的分区表和一个损坏的文件系统。当我完成时,我至少从系统中恢复了重要的文件,并且能够在没有太多中断的情况下继续我的日常工作,这要归功于 Live CD。但这里有一些经验教训值得学习,这就是我选择写下我的经历的原因。
我应该昨天备份的。但要记录在案的是,我的业务文件在我的服务器上,并且我对它们进行了冗余的异地备份。我主要感兴趣的是恢复我的密码钱包、一些我保存的照片和视频,以及一些杂项文档。好吧,吸取教训了。
但还有更多。我很高兴能够使用 Live CD 继续运行。但是,我是一个 KDE 用户,而我拥有的 Ubuntu CD 是基于 Gnome 的。我完成了我的工作,但在我习惯使用的环境中工作会更好。将来,我会随时准备一张 Knoppix 或 Kubuntu CD。
我还发现我的 Gentoo CD 根本无法胜任系统恢复的任务。我将刻录一张真正的恢复光盘,一旦我有一个可以刻录 CD 的系统。
在这种情况下,我真的需要一套应急 CD。我可以想象有一个 CD 包,里面有一张 Live CD、一张恢复 CD 和一张安装 CD。手头有这些 CD 会为我节省很多时间。
话虽如此,我不得不说我很高兴能够恢复我的数据,并且在恢复过程中没有停机太久。我还想提及 Linux 社区在这种时候是多么乐于助人。我是一个相当有经验的 Linux 用户,但能够在实际提交更改到磁盘之前提出问题真是太好了。我希望我的悲惨故事既能对你起到警示作用,又能给你带来鼓励;事情会发生,你可以从中恢复。