首先,不要在磁盘上执行任何其他操作(至少不要对其进行写操作)。磁盘未被识别(与“被识别并发现为空或数据不可读”相对)似乎表明磁盘已完全爆炸,这chkdsk
是行不通的,或者是分区表或磁盘的几何结构有问题,或USB外壳处理它的方式。硬件故障也是可能的。
当USB机箱尝试在磁盘和所连接的计算机之间进行协商时,可能会发生这种情况。因此,要做的第一件事就是dd
在Linux下使用可能最接近物理级别的磁盘(显然更大)上的磁盘映像。然后,您可以摆弄一张心中所想的图像副本,而不必担心损坏实际磁盘。
更新:Linux中的设备识别
我们的“外部磁盘”中有不少于三个实体。USB机箱硬件,作为块设备公开。机箱内的物理磁盘。物理设备,即LBA扇区从头到尾的顺序。最后是零个或多个数据分区,托管文件系统。要被“识别”并显示在桌面上,链的所有链接都需要工作。但是要拍摄物理设备的图像,您只需要前两个。如果您插入设备并dmesg
以超级用户身份运行命令行,您应该会看到类似以下内容:
[4984939.028491] usb 8-6: new high speed USB device using ehci_hcd and address 3
[4984939.166658] usb 8-6: configuration #1 chosen from 1 choice
[4984939.170660] scsi7 : SCSI emulation for USB Mass Storage devices
[4984939.172003] usb-storage: device found at 3
[4984939.172005] usb-storage: waiting for device to settle before scanning
...这是机箱被识别,然后识别其自身及其内容的方法:
[4984939.170660] usb 8-6: New USB device found, idVendor=1058, idProduct=1021
[4984939.170660] usb 8-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[4984939.170660] usb 8-6: Product: Ext HDD 1021
[4984939.170660] usb 8-6: Manufacturer: Western Digital
[4984939.170660] usb 8-6: SerialNumber: 574D43305431303831303734
[4984944.400970] usb-storage: device scan complete
接下来你会看到司机告知其几何形状,性质,以及其隐含的设备节点,在这里sdd
(SCSI磁盘四,因为sda
,sdb
和sdc
已经采取的):
[4984944.404739] scsi 7:0:0:0: Direct-Access WD Ext HDD 1021 2021 PQ: 0 ANSI: 4
[4984944.404739] sd 7:0:0:0: [sdd] 1953519616 512-byte hardware sectors (1000202 MB)
[4984944.407367] sd 7:0:0:0: [sdd] Write Protect is off
[4984944.407369] sd 7:0:0:0: [sdd] Mode Sense: 17 00 10 08
[4984944.407371] sd 7:0:0:0: [sdd] Assuming drive cache: write through
[4984944.408741] sd 7:0:0:0: [sdd] 1953519616 512-byte hardware sectors (1000202 MB)
然后内核识别出一个分区(如果看不到该分区,则该分区不存在或无效):
[4984944.411497] sdd: sdd1
现在,Linux具有所需的一切并报告成功的附件:
[4984944.416739] sd 7:0:0:0: [sdd] Attached SCSI disk
[4984944.416739] sd 7:0:0:0: Attached scsi generic sg4 type 0
这样就开始了对数据分区的搜索,即,确定,我们有sdd1
,但是那里有什么?,答案是:
[4984997.498613] NTFS driver 2.1.29 [Flags: R/W MODULE].
[4984997.554613] NTFS volume version 3.1.
[4984997.568859] NTFS-fs error (device sdd1): load_system_files(): $LogFile is not clean. Mounting read-only. Mount in Windows.
[4985390.027808] NTFS-fs error (device sdd1): ntfs_remount(): Volume has errors and is read-only. Cannot remount read-write.
[4985442.423299] NTFS volume version 3.1.
[4985442.425032] NTFS-fs error (device sdd1): load_system_files(): $LogFile is not clean. Mounting read-only. Mount in Windows.
以上是一个“好”的坐骑。但是,仅仅知道该设备sdd
,或sdc
或者sdb
,允许我做一个二进制副本(假设我有足够的可用空间/mnt/backupdisk
):输入文件/dev/sdd
,输出文件DiskImage.raw
,块大小为1 MB:
# dd if=/dev/sdd of=/mnt/backupdisk/DiskImage.raw bs=1M
请注意,输入文件是/dev/sdd
和不是 /dev/sdd1
(或任何其他数字)。现在,如果需要,我可以找出内数据分区的偏移量DiskImage.raw
,并借助循环设备将其安装。在这里,您会发现肮脏的细节。
首次恢复尝试
第二件事是将物理磁盘放入另一个磁盘盒中,从而确保磁盘盒状况良好,并有机会让新磁盘盒正确解释磁盘。如果磁盘重新出现,则可能是先前的机箱损坏了。以防万一,备份所有新找到的驱动器内容,验证备份,使用磁盘覆盖实用程序将磁盘清零,以使其变得完全哑(在设备链中不能有两个拥有不同意见的设备),将其重新格式化从Windows本地还原数据。这是一个幸运的镜头,但我看到了它的发生。而且价格也不算太贵,好的外壳大约要新售价19,99美元。
万一原始机箱损坏,您将无法重新格式化磁盘,否则将无法访问该磁盘。您可以重试新的外壳,如果它的作品,无论是更换旧的外壳,或继续使用新的(但如果新机箱是,这是值得相当比US $ 19.99厄尔尼诺小气鬼更好)。
专业康复
专业的恢复服务,可以在Google上找到。一种不太诚实的处理方法是通过物理磁盘进行发送,并且–如果您收到“是的,则没有硬件损坏,我们可以仅以US $$$$的价格恢复所有数据。 $$!” 答案–那么您就会知道数据仍然可以挽救。因此,您可以尝试免费对自己拍摄的映像进行备份,而只需支付诊断和磁盘S&H。如果失败,仍然可以选择咳嗽所需的面团。如果是硬件损坏,专业的服务基本上是你唯一的选择。有几种伏都教技巧可以(暂时)恢复“死”磁盘,通常足够长的时间至少可以恢复最重要的数据,不能保证每次都能工作(加热磁盘,冷却磁盘,“旋转”磁盘-我什至看到建议将磁盘巧妙地贴在坚硬的表面上)。它们都将造成更大的损害,即,您必须确保使用一个将在第一次使用的技巧,否则您将永远杀死磁盘。我只是说这解释了为什么你会看到关于恢复盘成功案例:有有这样的故事。但是,如果您想(主要是)确定会发生在您身上,那么–聘请专业人员。
如果您确定硬件没有问题-磁盘旋转,没有嘎嘎作响,没有奇怪的声音或嗡嗡声,没有喀嗒作响的重新校准,那么发生的“全部”就是chkdsk
弄乱了一些数据。
DIY恢复
“本地”恢复通常是这样的(基本上,一旦硬件损坏被消除后,专业人士就会做同样的事情),在磁盘映像副本上工作:
检查磁盘映像的第一个扇区是否是有效的分区表。如果不是,请扫描磁盘映像以查找有效的分区表或可识别的NTFS或FAT32引导扇区,具体取决于该单元上的FS(对于1 TB单元,NTFS似乎是唯一的逻辑可能)。无论哪种方式,您都应该在前几兆字节内找到某些内容。
如果找到了分区表,请验证数据分区是否在分区表中应有的位置。如果不是,那将是一个好消息:可能分区表是所有错误的。修复起来很容易(几个Linux分区编辑器会做到这一点),并且可以预期磁盘具有100%的恢复。为了安全起见,请尝试将Linux中的数据分区与循环设备一起以只读模式挂载,以查看其是否可读。如果是这样,则确认分区丢失,并且在确保完全恢复磁盘的过程中可能会显出磁盘。如果不是,则分区可能是正确的,并且数据分区(的一部分)已被重写。这不好; 请参阅下面的“事情变酸”。
如果找到并有效,则对照驱动器的几何形状进行检查;如果它们不匹配,那实际上也是一件好事,因为您可能已经找到了问题的根本原因。您可以将物理几何强制设置为内核(并在Linux启动时获取)。查看新的几何结构是否导致磁盘在Linux中被识别。如果是的话,请备份数据,确认备份正确,然后将磁盘dd
置零(到适当sd
设备的几兆字节零就足够了)。关闭计算机电源(不要只是重新启动;可以,这有点偏执,但是花费很少,并且可能会完成某些工作),然后启动Windows,并将现在无能为力的磁盘格式化为它认为是最好的格式。这样可以确保与Windows没有冲突。恢复磁盘上的数据。请享用。
如果几何技巧不起作用,或者找不到分区,或者一旦发现分区似乎是空的,那就变酸了。您需要一些恢复工具,该工具能够扫描磁盘映像以搜索丢失数据的数据区域(MFT等)。一旦找到,就对它们进行解释以获取数据。这是一项艰巨的工作,不能总是完全自动化。在较低且更加绝望的级别上,这涉及扫描各个文件的签名,希望它们位于磁盘中的连续块中。不过,我很乐意将这种操作留给专业人员。我用旧的FAT磁盘做了几次,总是成功。我再次使用更新,更大和更多碎片化的FAT32磁盘再次成功完成了大约50%。我尝试过 在复杂得多的NTFS和ext4文件系统上,有几次效果不佳(但是我有完整的备份,但实际上并没有付出全部)。
从Linux手动恢复
好的,因此您尝试在Linux上安装该分区并出现错误(请注意, /dev/sdc
并且 是不同的东西–该映像所指)。/dev/sdcN
/dev/sdc
# mount -t ntfs /dev/sdc1 /mnt/recovery
ntfs_mst_post_read_fixup_warn: magic: 0x00000000 size: 1024 usa_ofs: 0 usa_count: 65535: Invalid argument
Record 1 has no FILE magic (0x0)
Failed to open inode $MFTMirr: Input/output error
...这似乎表明系统认为分区正确无误或损坏严重。让我们先检查第一个选项:
# fdisk /dev/sdc
您得到的是这样的:
Disk /dev/sdc: 1000.2 GB, 1000204885504 bytes
1 heads, 63 sectors/track, 31008335 cylinders, total 1953525167 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9d2b7596
Device Boot Start End Blocks Id System
/dev/sdc1 63 1953520127 976760032+ 7 HPFS/NTFS/exFAT
下一步将检查实际的分区启动。通过搜索图像文件(或/dev/sdc
),我们将搜索NTFS签名:
00000000:EB 52 90 4E 54 46 53 20 -20 20 20 00 02 08 00 00 .R.NTFS ........
00000010:00 00 00 00 00 F8 00 00 -3F 00 FF 00 3F 00 00 00 ........?...?...
00000020:00 00 00 00 80 00 80 00 -4A F5 7F 00 00 00 00 00 ........J.......
# dd if=/dev/sdc bs=512 count=1 skip=63 2>/dev/null | hexdump -C | head -n 1
...根据上述数据,我们希望NTFS引导位于扇区63,这就是为什么要设置skip
。此外,我们将尝试使用第一个兆兆字节(例如)的每个扇区...
# dd if=/dev/sdc bs=512 count=2000000 2>/dev/null | hexdump -C | grep "00:EB 52 90 4E 54 46 53"
...只是为了确保只有一个引导扇区(我曾在这发生在我身上。在FAT32磁盘上,但仍然),并且任何地方都没有读取错误。
您的结果
00007e00 eb 52 90 4e 54 46 53 20 20 20 20 00 02 08 00 00 |.R.NTFS .....|
正是我们所期望的:扇区63的偏移量为63×512 = 32256 = 7e00十六进制。NTFS引导扇区在那里,并且分区表似乎正确。
因此,我们现在可以将很大一部分复制/dev/sdc1
到/tmp/mydisk.img
Linux 上,然后尝试进行修复。这不会损坏物理磁盘,对于其他尝试,该物理磁盘仍将保持不变。从现在开始,我们就知道PT是正确的,因此我们可以使用/dev/sdc1
该副本并招待我们以前无法做到的希望:
# dd if=/dev/sdc1 of=/tmp/mydisk.img bs=1G count=10
...after copying 10 gigabytes...
# ntfsfix /tmp/mydisk.img
如果NTFSfix无法正常运行,那么我们有麻烦了。有更准确的实用工具,可以尝试,但。而且,如果您需要恢复JPEG图片文件并且文件系统没有碎片,可以通过查找JPEG标头自动完成。PDF,TIFF和Office文档几乎相同,除了我不知道如何识别它们(对于JPEG,我会:-))。作为最后的选择,我找到了这些人 –我不认识他们,与他们没有亲戚,也不会承担任何责任。但是,随着这些事情的发展,价格非常合理。