从坏扇区到“损坏的文件”-Linux / ext3是否适用,Windows / NTFS是否可以?


17

当磁盘上的SMART检查报告扇区损坏时,重要的是能够识别出扇区损坏的文件-并从备份中还原文件。在下面,我显示了如何为Linux / ext3 VMWARE服务器执行此操作-但是有人知道对于Windows / NTFS是否可以完成此操作?

这是我在Linux / ext3上执行此操作的方法:首先,我要求驱动器进行硬件表面扫描(低于OS级别,带有驱动器上的SMART电路):

vserver:~# smartctl -t long /dev/sdc

我看了一下结果:

vserver:~# smartctl -a /dev/sdc
...
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       1
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       9
...
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%     27679         591363172

因此,已经将一个扇区标记为坏扇区,将9个标记为从“暂存”扇区空间中替换。更重要的是,不可读的第一个逻辑块地址(LBA)为591363172。

我找到了该数字“转换”为的分区(及其内部的偏移量):

vserver:~# fdisk -lu /dev/sdc
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1           32   976773119   488386544   83  Linux

分区开始于扇区32。因此,坏扇区为...

vserver:~# bc -l
591363172-32+1
591363141

...从分区的开始偏移591363141个扇区。

现在,我可以找到“托管”的文件:

vserver:~# tune2fs -l /dev/sdc1 | grep Block\ size
Block size:               4096

该EXT3文件系统的块大小为4096字节,因此坏扇区破坏了文件系统中的该块:

vserver:~# bc -l
591363141*512/4096
73920392.62500000000000000000

该文件对应的块号为(73920392):

vserver:~# debugfs
debugfs 1.41.3 (12-Oct-2008)
debugfs:  open /dev/sdc1
testb 73920392
debugfs:  testb 73920392
Block 73920392 marked in use
debugfs:  icheck 73920392
Block           Inode number
73920392        18472967
debugfs:  ncheck 18472967
Inode           Pathname
18472967        /path/to/filewithbadsector

然后我从备份中还原了该文件。

对于Windows / NTFS,我可以遵循相同的步骤吗?


仅供参考:目前有9个待处理的计数意味着存在9个坏扇区,而不仅仅是一个。扩展的自测仅在找到的第一个测试处停止。从备份还原之前,您还想通过使用写入零来处理坏扇区dd。这将迫使驱动器修复或重新分配它。
psusi 2011年

是的,你是对的。还原后,我再次进行了SMART检查,发现一切正常-因此,文件的写入显然覆盖了9 + 1个坏扇区(并且暂存区提供了替代内容)。但是Windows呢?:-)
ttsiodras 2011年

我认为您对分区中扇区偏移量的计算不正确。扇区号(其它物理,又名CHS)都是零基础的,如扇区32是分区扇区32-32 == 0,而不是1

令人震惊的是,至今还没有一个关于一年多的老问题的说法:当您开始看到驱动器上的坏扇区时,这意味着您已经拥有了太多的驱动器自动内部坏块重映射功能,无法再进行补偿。与其从备份还原到即将死机的驱动器,不如更换驱动器并还原到新驱动器。
voretaq7

Answers:


7

我知道您有一个NTFS FS,并在该FS上运行Windows。我不知道您是否可以“启动”实时Linux以在该驱动程序上运行。

如果可以从CD或USB引导Linux,则可以使用ntfsprogs。看着 -

ntfscluster 

ntfsinfo 

我相信ntfscluster会告诉您特定群集存储的文件。我希望这能为您指明正确的方向。


我发现此论坛帖子具有实用程序包装,可以在不同的文件系统上执行此操作,并且也使用ntfscluster。ubuntuforums.org/showthread.php?t=1943721
嗜睡

是的,ddrutility功能:查找与坏扇区相关的文件,也可以使用带有扇区列表的文件,也许我们可以使用“ badblocks -nvs” +“ ddrutility”
diyism
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.