当磁盘上的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,我可以遵循相同的步骤吗?
是的,你是对的。还原后,我再次进行了SMART检查,发现一切正常-因此,文件的写入显然覆盖了9 + 1个坏扇区(并且暂存区提供了替代内容)。但是Windows呢?:-)
—
ttsiodras 2011年
令人震惊的是,至今还没有一个关于一年多的老问题的说法:当您开始看到驱动器上的坏扇区时,这意味着您已经拥有了太多的驱动器自动内部坏块重映射功能,无法再进行补偿。与其从备份还原到即将死机的驱动器,不如更换驱动器并还原到新驱动器。
—
voretaq7
dd
。这将迫使驱动器修复或重新分配它。