硬盘损坏,抢救数据

2020-09-26 周六 by 黄复雄.

上两周坏了一个硬盘。——这还是第一次把硬盘用坏。虽然此前20天备份过一次,可想到要重做这二十天的工,很是沮丧。好在经过两三天的尝试,全部恢复了。现记录如下。

前兆

大概两三个月前,有天晚上关机着急,没等主机关闭就关了点。结果导致固态C盘损坏。换盘,重装了系统。这跟今次硬盘损坏大概没有关系,存疑。

这次D盘损坏前大概两三周,一个正在操作的问题突然报出无法找到。到所在位置去看,文件夹打不开了。用win10自带的磁盘“差错”工具处理后,在根目录隐藏文件夹found.000中找到了恢复的文件夹和文件。

这大概就是一个前兆,但当时没太在意,没有备份文件。

磁盘崩溃过程

当天写笔记,编译为html时突然报刚才写的文件找不到,紧接着很多文件都无法找到。然后win10系统卡死,无法正常关机。

关电重启后报系统检查错误(具体记不清了),很久无进展。

再关电重启,停留在主板logo页面,下面的圈长久不停。

以上两种状态常交替出现。

拆下硬盘能正常启动

拆下D盘后能正常启动。

买了一个硬盘底座,连接后,用各种磁盘工具、数据恢复工具都无法处理,多半卡死。

硬盘底座有个硬盘对拷的功能,不知道工作原理,尝试了一下,很久没看到进展,就没敢再用。

用U盘Ubuntu制作启动盘

根据这个网页的提示,制作了一个U盘的Ubuntu系统。——这个网页推荐Knoppix LiveCD系统,但我不熟悉。

具体制作方法可以看这个简单教程。主要包括两步:

  1. 安装Rufus;
  2. 用一个U盘制作Ubuntu系统,也就是直接用U盘启动、运行,不需要安装的系统。Rufus很容易用,只看这里的设置就可以:

refus

启动Ubuntu,安装软件

做好后插在电脑上,准备启动。最好只留下问题盘和一张容量等于或大于问题盘的空磁盘(用于存储恢复的数据),sata连接,其余的全部拆除,以免误操作。

把启动时更改biso的引导顺序,通过刚才的U盘引导。启动后不要操作问题盘和存储数据用的盘,不要装载!以免出问题。

进入Ubuntu系统后先添加国内的程序源,以便安装程序。也就是在源文件/etc/apt/sources.list后添加源列表。比如阿里源:

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

然后更新系统:

sudo apt-get update
sudo apt-get upgrade

安装gddrescue。注意软件包名字前有个g,但是命令没有g,只是ddrescue

sudo apt-get install gddrescue

还可以安装通过图形查看进度的工具ddrescueview

sudo apt-get install ddrescueview

使用ddrescue复制、抢救数据

先查看磁盘列表:

lshw -C disk

或者:

fdisk -l

磁盘信息.jpg

磁盘通常显示为/dev/sda, /dev/sdb这样的格式。其下后还可能显示分卷,如/dev/sda1/dev/sda1下面处理时,应该操作整盘,而不是分卷。

这里是ddrecue的手册,详细解释了算法和处理过程,有助于你在漫长的等待过程中免于焦虑。

ddrescue有很多选项,但我们通常只需要两个步骤。

第一步,快速抓取大部分无错区域:

sudo ddrescue -n -f /dev/问题盘 /dev/存储盘 rescued.log

注意,选项-f意味着存储盘上的内容会被覆盖。

rescued.log是记录进度的文件。如果临时停止,重新开始后,ddrescue可以根据这个文件接着做。U盘系统重启后会丢失用户文件,所以这个文件应该通过在线邮箱等方式妥善保存。

可以使用ddrescueview查看进度(可以用-r 30s这样的选项来设置刷新间隔):

sudo ddrescueview rescued.log

效果如下:

图形信息.jpg

我的问题盘是1T容量,数据大概900G,完成第一步耗时近6小时。

结果信息.jpg

第二步,尝试从有错区域中“刮取”,也就是最大限度地恢复数据:

sudo ddrescue -r 1 /dev/old_disk /dev/new_disk rescued.log

选项-r 1表示重复次数。这个步骤很耗时,如果时间允许重复两三次也是可以的。这一步我只做了一小会儿。拆下来发现绝大多数已经恢复,就不再做了。

使用win10磁盘工具查错

复制得到的磁盘是有错误的,我使用win10磁盘工具查错后,在根目录的隐藏文件夹found.000中找到了很多恢复的文件、文件夹。再通过TC,过滤时间后,得到未备份的内容,加到备份中。 (可能ddrescueview有相应的除错工具,我没有注意到。)

后来使用文件时,发现个别文件看起来正常,但无法打开。所以,重要文件最好逐一打开看看。

赶紧买了个4T的硬盘,所有文件都备份在这里。还重新打开谷歌硬盘,把重要文件和最近正处理的文件备份到网上。问题盘暂时还留着,后面如果再发现问题,还可以更精细地处理。


Comments

Fork me on GitHub