我有一个众所周知的问题,但不幸的是我在这里有点缺乏知识,希望在这里找到更好的见解。
所以,我有一个带有 FAT32 文件系统的损坏的 USB 记忆棒。我制作了一个克隆ddrescue
并运行testdisk
. 找到了一个分区(唷!),所以我创建了一个循环设备losetup -f -P USB_clone.img
并安装了它。到目前为止一切顺利,现在问题开始了:所有文件的大小似乎都是正确的 ( ls -al
),但是当我尝试复制文件时出现 I/O 错误。所以我再次卸载分区并运行dosfsck -l -r -v /dev/loop1p1
。有些文件可以恢复,但大多数文件都以一种非常有趣的方式修复:
File size is 27589006 bytes, cluster chain length is 32768 bytes.
Truncating file to 32768 bytes.
这会导致文件被截断;这显然不是我想要的……
所以这让我想到了一些问题:
这里会发生什么?似乎可以正确检测文件大小,但是完全有问题,嗯,嗯,什么?也许分区表?为什么
dosfsck
可以正确检测到文件名和文件大小时无法解决此问题?当然更重要的是:有没有办法恢复这些文件?
如果您需要更多信息,请向他们索取!
非常感谢!
Quora上对 FAT 文件系统碎片有一个很好的解释:操作系统如何处理 fat32 格式的碎片扇区以恢复完整的数据?通过 Irné Barnard。
关键是被截断的文件可能是碎片化的。当一个恢复程序遍历这些块并试图找到下一个片段时,它决定不相信它认为下一个块在哪里。
dosfsck
用于比较和决定何时截断的规则和问题位于https://linux.die.net/man/8/dosfsck,如果不知道磁盘最初遭受的损坏,很难知道它为什么会被截断. 如果 FAT 已被擦除,则可能是它不相信集群链中列出的任何集群都在使用中,并且您遇到了规则File contains bad or free clusters. The file is truncated.
dosfsck
不是恢复工具。它是一种修复工具,假设磁盘基本上“没问题”。您可能希望查看运行适当的恢复工具,例如
photorec
哪些可以恢复的不仅仅是照片,或者testdisk
可以做的不仅仅是复制分区。