我有一个来自 GoFlex Home NAS 的 2TB Seagate Barracuda 硬盘发生故障。当驱动器将其所有根文件夹和子目录显示为空时,问题的第一个迹象出现了,尽管 Windows(通过安装的共享)仍然显示预期的磁盘使用情况,大约是完全可用的 1.8TB 中的 1.2TB)
在网上研究后,我发现了一份指南,建议首先制作磁盘副本并尝试从中恢复数据。本文推荐 ddrescue,因此我购买了 PartedMagic 和第二个 2TB Seagate Barracuda 驱动器来克隆。
新驱动器和故障驱动器都通过 SATA 电缆直接连接到从 USB 记忆棒运行 PartedMagic 的 PC。我已在 BIOS 中关闭 SMART,并在故障驱动器上方直接安装了一个风扇,因为我预计问题是由于过热造成的(旧驱动器现已脱离其 GoFlex NAS 机箱)。
当故障驱动器打开时,启动速度有点慢(即使我在 BIOS 中将 USB 设置为第一启动设备),但最终 PartedMagic 加载正常。在文件管理器(位置)中,我可以看到新硬盘和出现故障的 GoFlex 硬盘。为了确认连接到系统的块设备的名称,我运行以下命令:
lsblk -o name,label,size,fstype,model
这会按预期显示设备(故障驱动器也会出现在 BIOS 中)
然后我尝试了 ddrescue... 最初使用:
ddrescue -d -f /dev/sda /dev/sdb /media/sdd1/rescue.logfile
(其中 sdd1 是连接到系统的另一个 USB 记忆棒,用于保存日志文件)
但从一开始我就有0 B 复制,当前速率保持在 0B/s,运行时间和成功读取(时间)保持相同。换句话说,据我所知 ddrescue 实际上从未从故障磁盘读取单个字节:
我让它运行大约两天,直到终端中出现 Finished 提示。 0 B 已复制。
因此,我然后尝试对新驱动器进行分区(使用单个 ntfs 分区,以匹配故障驱动器)并重复该过程,但这次仅克隆分区:
ddrescue -d -n -f /dev/sda1 /dev/sdb1 /media/sdd1/rescue2.logfile
相同的结果:
这次我在一小时后使用 Ctrl-C 停止该过程,而不是不必要地进一步损坏驱动器。
我还尝试复制到磁盘映像
ddrescue -d -n /dev/sda1 /dev/sdb1/drive.img /media/sdd1/rescue3.logfile
同样,在 Finished 提示结束后,drive.img 文件为 0B。
阅读通过“对我之前提到的问题的最后评论很有帮助”然后我尝试了不同的 ddrescue 选项,向后读取,有或没有直接访问,使用 --force,多次打开和关闭驱动器电源(畏缩!)每次都希望它会突然开始被 ddrescue 读取......没有运气。
它仍然出现在“位置”中,其分区名称为“GoFlex Home”,因此尽管我知道您无意这样做,有人建议安装驱动器。他们遇到了类似的 0 B 问题,并发现以只读模式安装驱动器可以解决他们的问题。我尝试过,但收到一条错误消息,告诉我存在 I/O 错误,并且驱动器可能存在硬件故障,无法安装。 (抱歉没有收到确切消息的副本)
所以...也许我过于乐观了,但我不明白损坏如此严重的驱动器如何在文件管理器中显示其分区名称完好无损。为什么 ddrescue 不能向前或向后救援单个字节扫描?我不太相信,我一定做错了什么,但我不知道还能尝试什么,我不想进一步不必要地损坏磁盘。
有人有建议吗?我应该尝试其他(非商业)软件吗?我可以使用其他技术来诊断问题吗?
或者我应该硬着头皮考虑将逻辑板从我的新 Seagate Barracuda 换成旧的,作为最后的尝试?
更新:
@斯蒂芬·基特我运行 dmesg (使用 grep 显示问题硬盘)并得到以下输出: 这有什么意义吗?当我连接到主板上的 SATA 端口时,我很惊讶地看到“附加的 SCSI 磁盘”。感谢您的帮助