各位看官,你的电脑硬盘坏过么?如果从来没有遇到过,那么多半你还很年轻,使用电脑的时间不是很久,等你长大一些,可能就遇到了。
如果你想问我遇到过多少次,那么答案是数不清了。在我办公室的抽屉里,就有好几块。它们有传统的机械硬盘,也有新式的固态硬盘。
从可观测性的角度来看,我更喜欢机械硬盘,因为它们工作时是有声音的,如果你是一个使用电脑多年的老计算机用户,那么你很可能是能听懂硬盘的声音的。“听懂”的意思是可以从硬盘的声音中分辨出它的健康状态。
就我的经验来看,机械硬盘的响声可以分为如下几种:
- 平稳的“簌簌簌”声,像微风吹过春日的树林,这是健康键盘忙碌的声音。硬盘工作时,内部的盘片要高速旋转,所以发出一些“风声”是很正常的。
- 柔和而且有节奏的“咕嘎”声,像夏日的蛙鸣,虽然声音也很明显,但是不刺耳,柔和舒适,仿佛一只小青蛙在桌面上咕嘎咕嘎的叫,这也是硬盘正常工作时的声音。
- 时断时续的“格拉格拉”声,像老旧的自行车,一些本来不该碰到的部件碰到了。这是硬盘衰老的征兆。
- 把一个铁勺放到一个新的不锈钢铁锅里的清脆声音,这好像是走了7天7夜的猪八戒终于坚持不住了,把手里的钉耙摔在铁板上,“老猪我不干了”,有个著名的歇后语叫:猪八戒摔耙子,就是描述的这个场景。对硬盘来说,这可能是某个零件摔落在盘面上的声音,非常不好,可能导致更多的数据丢失。磁盘正常工作时,磁头被气流托起,悬浮在盘面上方。但对于老旧的硬盘,像是一个衰老的芭蕾舞演员,本该凌空悬转时却摔倒了。
- 像是要把某个东西搬到某个位置,却搬不过去的“咔哒咔哒”。这也是硬盘衰老即将退役的前兆。
上面列举的当然不够全面,欢迎大家在评论区补充。
以我今年年初坏的一块硬盘为例,读上面的文件时,它会发出“格拉格拉”声,有时“格拉格拉”一阵子,文件就读出来了。但有时“格拉格拉”很久,文件也没有读出来,更糟糕的是,过了一阵子后,会听到一个绝望的摔落声。
这块硬盘的总容量为1T,主要有两个分区,都是用来放数据的,一个区名为work,是放代码和工程项目的。一个区名为gedu,主要是放文档的。年初发生异常后,我就让它退休了,换了一块替代它。当时把急需的文件复制到新硬盘一些,但是不完全。有时想起某些文档,就再找过来,通过USB接口连到电脑上,再尝试一下运气。
找电路图
端午假期里,老朋友文波向我要GDK3的电路图,我找遍了新硬盘都没有,忽然想起可能是在旧的硬盘上。
今天上班又想起这件事,找到旧的硬盘,用移动硬盘转接头接到Windows系统中,上电后,争分夺秒地找到work分区,再找到放电路图的文件夹,然后把电路图有关的几个文件快速复制到新的硬盘。然后发给了文波。
一切都很顺利,因为我在插上硬盘之前做了一些准备工作,比如把见到硬盘就遍历上面所有文件的Everything软件退出。如果不退出,那么它可能发出大量的磁盘访问,一旦遇到坏的扇区,可能阻塞对这个个硬盘的其它所有访问。
想起书稿
成功把遗忘的电路图文件从旧硬盘上抢救出来后,我又想起了《软件调试》卷三的书稿。卷三的计划一拖再拖,进展缓慢,回想起来,要数2023年春节时写的比较多,但是今天看新硬盘却没有找到那部分文稿。一意识到这个问题,我的精神立刻紧张起来。敝帚自珍,自己写的东西再差,也是很珍惜的,不能轻易丢啊。
想到这里,我立刻一层层目录展开,寻找记忆中的书稿。author,swdbg, 2e, vol3。打开vol3目录,果然文件数比新硬盘上多很多。全选,复制,选择新硬盘的对应目录,粘贴。但是复制文件的速度非常缓慢,而且硬盘发出令人不安的格拉哥拉声,一个文件还没复制完,就听到让人绝望的摔落声,然后对应的两个分区就不见了。
第一次尝试复制书稿文件失败了。当我拔掉USB接头时,听到硬盘被突然断电时的咔哒声。
检查磁盘
过了一会,我再次尝试,Windows系统失败到硬盘后,提示我做硬盘检查,我接受建议做硬盘检查,但是过了1-2分钟后,检查失败。查看系统日志,报了无数错误。
检查 H: 上的文件系统卷标是 gedu。 阶段 1: 检查基本文件系统结构... 读取失败,状态 0xc000000e 位于 0x400 字节的偏移量 0x1bfe839400 处。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfab。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5d5。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5d6。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5d7。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5d8。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5d9。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5da。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5db。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5dc。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5dd。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfae。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5de。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c5e0。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x5 的子 frs 0xfed9a。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfaf。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb0。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb1。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb2。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb3。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb4。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb5。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb6。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb7。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb8。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfb9。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfba。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfbb。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfbc。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfbd。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfbe。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfbf。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc0。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc1。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc2。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc3。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc4。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc5。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc6。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc7。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc8。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfc9。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfca。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfcb。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfcc。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfcd。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfce。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfcf。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd0。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd1。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd2。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd3。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd4。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd5。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd6。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd7。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd8。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfd9。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfda。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfdb。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfdc。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfdd。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfde。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfdf。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe0。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe1。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe2。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe3。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe4。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe5。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe6。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe7。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe8。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfe9。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfea。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfeb。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfec。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfed。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfee。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfef。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff0。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff1。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff2。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff3。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff4。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff5。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff6。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff7。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff8。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bff9。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bffa。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bffb。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bffc。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bffd。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bffe。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5bfff。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c000。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c001。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c002。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c003。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c004。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c005。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c006。文件 5BFA9 的已删除损坏属性项,包含 80 类型代码。找不到序列号为 0x1 的子 frs 0x5c007。文件 5BFA9 的已删除损坏属性项,
上面的日志已经够多了,但是还省略了很多行。
另辟蹊径
连续几次失败后,我不想再用Windows尝试了,担心把本来就已经坏了硬盘搞得更糟糕,那样的话,书稿可能就彻底没救了。
Windows上的软件太多,一插上硬盘后,很多软件都抢着要读一读,就像一个年轻的姑娘进了一个满是光棍的村庄,每个光棍都忍不住要出来看一下。这给原本已经有了伤痕的硬盘太大的压力。
想到这里,我的脑海中闪现出一个新的想法:使用Linux。
是的,使用Linux,Linux也支持微软的文件系统(NTFS),最重要的时,Linux相对单纯,上面没有那么多的软件争着读硬盘,让它做什么就做什么,不像Windows上的软件自作主张,擅自妄为。
想到这里,我拿过来一台幽兰代码本,开机,然后把旧的硬盘插到了幽兰的USB口上。
果然和Windows系统上的表现大不同。同样的硬盘,插到Windows系统上之后,就仿佛一头要杀的猪一样,发出各种狂叫,但是插到Linux系统上之后,它很安静,几乎没有声音。
是不是没有识别到呢?
Ctrl + Alt + T打开一个控制台窗口,然后执行sudo fdisk -l观察系统里的磁盘设备。
geduer@ulan:~$ sudo fdisk -l[sudo] password for geduer:Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/mtdblock0: 8 MiB, 8388608 bytes, 16384 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type/dev/mtdblock0p1 1 4294967295 4294967295 2T ee GPT
Disk /dev/mmcblk0: 115.23 GiB, 123731968000 bytes, 241664000 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: gptDisk identifier: B879796D-C596-8B44-B743-5F47247E0C59
Device Start End Sectors Size Type/dev/mmcblk0p1 16384 32767 16384 8M Microsoft basic data/dev/mmcblk0p2 32768 1081343 1048576 512M Microsoft basic data/dev/mmcblk0p3 1081344 241663966 240582623 114.7G Microsoft basic data
Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectorsDisk model: S3000Units: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: gptDisk identifier: 0AE464F7-06D8-7347-917E-F0DBE0C09C2C
Device Start End Sectors Size Type/dev/nvme0n1p1 61440 2158591 2097152 1G Linux extended boot/dev/nvme0n1p2 2158592 285605887 283447296 135.2G Linux filesystem/dev/nvme0n1p3 285605888 461400063 175794176 83.8G Linux filesystem/dev/nvme0n1p4 461400064 736194559 274794496 131G Linux filesystem
Disk /dev/sda: 931.51 GiB, 1000204885504 bytes, 1953525167 sectorsDisk model: USB 3.0 CableUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: gptDisk identifier: 9DB0CE4D-3182-4244-A1D7-CE1227DE2708
Device Start End Sectors Size Type/dev/sda1 34 32767 32734 16M Microsoft reserved/dev/sda2 32768 825626623 825593856 393.7G Microsoft basic data/dev/sda3 825626624 1953521663 1127895040 537.8G Microsoft basic data
长长的列表后面,有个大约1TB的磁盘,路径为/dev/sda,它有三个分区,类型中都有微软字样,看起来就是我的坏硬盘。
看来是识别到了。太好了。
接下来使用mount命令先把第二个分区挂到/mnt目录。
geduer@ulan:~$ sudo mount /dev/sda2 /mntThe disk contains an unclean file system (0, 0).The file system wasn't safely closed on Windows. Fixing.
mount命令先是显示了两句话:说这个磁盘包含不干净的文件系统。这个文件系统没有在Windows上安全关闭。说的太对了,在Windows上时是突然的偃旗息鼓,没来得及安全关闭啊。
接下来显示fixing,正在修复,而且看起来修复成功了。真是优秀!
mount命令的执行时间感觉比普通硬盘要久,这是正常的,我安静的等待。
过了一会,跳出一条内核消息:
[ 274.917224] blk_update_request: I/O error, dev sda, sector 6264600 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 0
看起来是在读6264600号扇区时出错了。这也是在预料中的。
又过了一会,mount命令结束了,在命令行中发出ls命令,又等了一会之后,长长的一串目录列表显示出来了。优秀!
geduer@ulan:~$ ls /mnt[ 365.368662] blk_update_request: I/O error, dev sda, sector 83609640 op 0x0:(READ) flags 0x80700 phys_seg 4 prio class 0'$RECYCLE.BIN' nanotune 360 nativeworker.log ada pagefile.sys Apps RK3588_NOR_FLASH.img gecore.tar.gz wdksetup.exe gecpp wincmd Installers 'Windows (C) - 快捷方式.lnk' lenovo.reg Work msys64 wxdata
成功访问work分区后,我发出sudo umount /mnt命令把这个分区卸载,然后尝试挂接包含书稿的第三个分区。
geduer@ulan:/$ sudo mount /dev/sda3 /mnt[ 566.752337] blk_update_request: I/O error, dev sda, sector 32768 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0The disk contains an unclean file system (0, 0).The file system wasn't safely closed on Windows. Fixing.
情况与刚才类似,也是有一个扇区错误。但是挂接成功了。尝试ls命令也成功了。
geduer@ulan:/mnt$ ls[ 803.977348] blk_update_request: I/O error, dev sda, sector 845057328 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 0'$RECYCLE.BIN'
data dbglabs dig disks Downloads dumps
接下来,我不使用比较重的ls命令了,直接使用cd切换目录,一级级的切换到包含书稿的目录,中间有时略有停顿,但是都有惊无险,成功切到vol3目录后,执行ls,可以看到期盼的那些书稿文件,它们似乎也在以期待的眼神看着我,仿佛被洪水围困的一群孩子看到了救援的队伍。
接下来,我执行cp *.docx ~,将所有文档复制到笔记本的home目录,那里是幽兰的本地硬盘,安全地带。
geduer@ulan:/mnt/dig/author/swdbg/2e/vol3$ cp *.docx ~geduer@ulan:/mnt/dig/author/swdbg/2e/vol3$
怀着紧张的心情等待几秒钟后,cp命令顺利结束了。在home目录里打开其中的一个文件,正是2023年春节时写的那个书稿。
看着失而复得的书稿,如见旧友,我长长的松了口气。
根据这次的经验,对于已经有故障的硬盘,尽量不要再把它挂到Windows系统上,找一个Linux系统来抢救上面的文件,要靠谱的多。
本文作者主讲的《纳秒级优化训练营》北京站正在招生中,对低延迟设计感兴趣,或者极致追求性能的同行欢迎垂询,也恳请格友们帮助扩散。
(写文章很辛苦,恳请各位读者点击“在看”,欢迎转发)
*************************************************
正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生
扫描下方二维码或者在微信中搜索“盛格塾”小程序,可以阅读更多文章和有声读物
也欢迎关注格友公众号
(写文章很辛苦,恳请各位读者点击“在看”,欢迎转发)
*************************************************
正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生
扫描下方二维码或者在微信中搜索“盛格塾”小程序,可以阅读更多文章和有声读物
也欢迎关注格友公众号