从坏扇区到“损坏的文件” - 是为 Linux/ext3 做的,我可以为 Windows/NTFS 做吗?

tts*_*ras 18 backup ext3 ntfs bad-blocks

当对磁盘的 SMART 检查报告坏扇区时,重要的是能够识别具有坏扇区的文件 - 并从备份中恢复它。下面,我展示了我是如何为我的 Linux/ext3 VMWARE 服务器做到这一点的——但有没有人知道这是否可以为 Windows/NTFS 做到这一点?

以下是我为 Linux/ext3 所做的:我首先要求驱动器进行硬件表面扫描(低于操作系统级别,使用驱动器上的 SMART 电路):

vserver:~# smartctl -t long /dev/sdc
Run Code Online (Sandbox Code Playgroud)

我看了结果:

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
Run Code Online (Sandbox Code Playgroud)

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

我找到了这个数字“转换”为的分区(以及其中的偏移量):

vserver:~# fdisk -lu /dev/sdc
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1           32   976773119   488386544   83  Linux
Run Code Online (Sandbox Code Playgroud)

分区从扇区 32 开始。因此,坏扇区是...

vserver:~# bc -l
591363172-32+1
591363141
Run Code Online (Sandbox Code Playgroud)

...距分区开头 591363141 个扇区的偏移量。

现在我可以找到哪个文件被“托管”了:

vserver:~# tune2fs -l /dev/sdc1 | grep Block\ size
Block size:               4096
Run Code Online (Sandbox Code Playgroud)

这个 EXT3 文件系统的块大小是 4096 字节,所以坏扇区破坏了文件系统中的这个块:

vserver:~# bc -l
591363141*512/4096
73920392.62500000000000000000
Run Code Online (Sandbox Code Playgroud)

块号(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
Run Code Online (Sandbox Code Playgroud)

我从我的备份中恢复了那个文件。

我可以为 Windows/NTFS 遵循等效的程序吗?

J. *_*ker 7

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

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

ntfscluster 

ntfsinfo 
Run Code Online (Sandbox Code Playgroud)

我相信 ntfscluster 会告诉您特定集群存储的文件。我希望这能让你朝着正确的方向前进。