从具有坏扇区的磁盘恢复更快


13

最近,我尝试dd从不正常的HDD到文件。我用过dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync。我的问题是dd遇到坏块时浪费了很多时间。在我的用例中,我很乐意为更快的结果而损失一些数据。

有什么方法可以使错误处理更快?也许是内核调整了(告诉HDD减少读取块的工作量)?还是其他程序?

Answers:


29

首先,要使用该软件:您可以尝试使用ddrescue代替dd

ddrescue可以只进行有限的重试次数。它还可以使用日志文件,因此它记录了哪些块是错误的。如果以后感觉要重试更多,可以使用相同的日志文件以不同的选项ddrescue 再次运行(例如重试),它将仅重试必要的块。

用法示例:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

ddrescue信息页面:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

以下是一些其他使用来源ddrescue


编辑

在案件本身花费的时间太长了硬盘驱动器,你可以尝试启用了一个叫做TLER牛逼 IME 大号 imited Ë RROR [R ecovery)或CCTLç ommand ç ompletion 牛逼 IME 大号 IMIT)。并非所有HDD都有它,但是您可以使用它来限制HDD控制器本身的时间。ddrecue当然,这种方法可以与使用结合使用。

Linux有一个称为的工具smartctl(在smartmontools包装中)。

要检查当前设置(“禁用”表示无限时间,您不需要):

# smartctl -l scterc /dev/sda

要将其设置为固定值(在本示例中为5.0秒。将其设置为0将禁用TLER):

# smartctl -l scterc,50,50 /dev/sda

TLER的来源:http : //en.wikipedia.org/wiki/TLER


2
看看是哪个dc3dd另一个工具是DD的取证版本
fpmurphy

哦,很好,我不知道该工具!
2015年

2
我不知道那个TLER,但这确实挽救了我的一天。在我的磁盘上,这些已被禁用,并且每当我运行ddrescue时,磁盘都会在几秒钟后被阻塞。关闭电源,打开电源,然后再尝试。现在,使用您提到的命令将其设置为2秒,并且它再也不会阻塞,它会跳过某些扇区,但至少会持续进行下去。
Sven Rieke '18


2

要快速而快速地选择恢复光盘,可以使用sh脚本文件并使用sh运行该文件。它包含了这一行,只是重复sudo ddrescuesleep 3多做几次。睡眠用于使驱动器休息几秒钟:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

上面使用的选项:

  • -r0 :无重试
  • -e +0:在第一个错误时退出
  • -T 1s:退出1秒失败读取
  • -d :直接I / O
  • -n :无刮擦

您可以-R-A一次完成后使用一次选项,这将撤消并删除所有错误大小,然后再次向后开始。意味着它将读取不同的错误。


0

取决于您的硬盘驱动器的大小以及它有多少坏块。使用DD 1 tera健康高清视频备份通常需要20分钟。今天早上我刚好恢复了好坏,花了我两次的时间。我在复制(备份磁盘)约30个坏块时遇到问题。我要做的第一件事是使用常规Filezilla备份文件来备份所有良好数据。我注意到一个大文件未正确复制(在中间停止并重新开始传输)。幸运的是,我以前有相同文件的备份。要复制磁盘,则必须使用以下过程在磁盘上找到坏块:

1使用fdisk -l找出标识HD信息的问题磁盘

第二,如果说您的磁盘是/ dev / sdb,则需要运行命令 badblocks -v / dev / sdb,它将列出驱动器上所有的坏块。幸运的是会有一些。如果未找到坏块,则您的驱动器块还可以,需要弄清楚其他问题。我的块大小是512,所以我使用该默认数字来运行DD

第三,每个块的大小为512,所以我要做的是设置bs = 512

每次像往常一样定期运行DD时,发生错误后,我的数据都会损坏。因此,然后按照页面https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html上的说明使用参数,搜索“故障磁盘”部分。

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

花了一段时间。遇到的每个坏块听起来像是故障驱动器上的撞击声。它确实逐块复制,并且所有我的坏块都发出相同的声音。发出噪音的次数是因为它发现了另一个坏块,并告诉您有关显示错误的消息msg。什么是“兑换= NOERROR,同步”呢,是垫出来不好用完全无效读取,而“IFLAG = fullblock”短迎合读取,但在同步你的数据了保持到最后。完全没有损坏,它只是不复制有问题的块,并用空的NUL填充它。

用DD复制完成后,我只是替换了从以前的备份恢复Filezilla的那个坏文件,一切正常。我希望这对其他尝试备份故障驱动器的用户有用。

注意:我的坏块彼此之间非常接近。一次约4个块,一起检测到损坏。如果块全部位于磁盘上,则可能会影响几个文件。幸运的是,就我而言,仅影响了一个大数据库4gb文件。


1
如果相同答案回答多个问题,则很有可能这些问题重复。如果是这样,最好回答一个并标记另一个为可能的重复项。这样可以避免重复的答案过分膨胀,并且将问题链接在一起可以使读者更轻松地找到所有答案。
fixer1234

并非如此,但是如果您这样认为,请告诉我,以便我删除答案。我到处都在寻找正确的解决方案,但是我找到了一种解决服务器问题的方法。还有其他几个类似的问题,没有解决我的问题。到目前为止,我发现了大约十二个类似的相关问题。我只回答了几个就可以写出我的经验以及如何解决这个问题。让我知道您是否想删除我的答案,我会很乐意这样做。问候。
Luis H Cabrejo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.