V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sketch33
V2EX  ›  问与答

硬盘数据丢失问题求助

  •  
  •   sketch33 · 2015-05-27 14:08:09 +08:00 · 2189 次点击
    这是一个创建于 3472 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天我在向硬盘里拷贝数据的时候,从接线板上拔下了一个电风扇,拔下的瞬间音箱有“嘭”的一声爆破声,显示器黑屏两秒钟之后才恢复显示,与此同时硬盘与电脑失去连接。(事故的原因很可能是那个电扇的设计有问题,导致家庭电路电压不稳,以致于损坏硬盘)
    再次尝试连接硬盘的时候,就提示“需要先格式化”了

    硬盘是WD的3.5寸4T,放在外置硬盘盒里。我使用的时候是把所有空间(实际约3.7T)都分为一个分区的,已经用掉的容量大约在2.5T左右。但是现在用磁盘工具查看,却有点不一样了:

    用磁盘工具查看:

    图中显示为3个分区了,且其中1个为RAW,2个为“未分配”

    昨天晚上用DiskGenius的“搜索分区”功能扫描了一夜的结果:

    注意红框中的内容,图中显示为十几个分区,且许多分区为“空闲”

    因为还是看不到我的那些数据,所以我现在不敢轻举妄动

    由于数据还是有点隐私的,扫描一遍也需要很久,所以暂时还不想拿去给第三方恢复
    希望能得到一些建议,或者是求推荐靠谱的远程数据恢复服务。谢谢!

    24 条回复    2015-05-27 20:33:23 +08:00
    msg7086
        1
    msg7086  
       2015-05-27 15:43:35 +08:00   ❤️ 1
    因为很重要所以我只说一遍。
    外置硬盘有很大可能是4K逻辑扇区,很多硬盘工具处理不了(比如Windows自带的磁盘管理就处理不了)
    甚至只可能通过直接修改MBR表来解决。


    所以这时候我建议你直接联系WD的工程师,详细问一下他们硬盘分区的扇区起始/结束地址。
    亦或者找到同款外置硬盘,读头扇区,然后把分区表照搬过来。
    msg7086
        2
    msg7086  
       2015-05-27 15:45:20 +08:00   ❤️ 1
    以上的假设是基于原厂WD/ST外置盘的。
    如果你是自己买的壳,那十有八九是512字节GPT,必须要你自己回想当年分区的过程了。
    comicfans44
        3
    comicfans44  
       2015-05-27 16:35:22 +08:00   ❤️ 1
    提供一个思路哈,可在只读情况下确认数据是否仍然存在。

    4T硬盘分成一个大分区,那么应该是GPT分区表,文件系统为NTFS。

    1.快速确认丢失分区是否正常

    假定当时你用win7自带的磁盘管理对硬盘分区,且第一个分区就是你的大分区,
    那么第一个分区的起始字节应该是1024 KB 处
    (https://msdn.microsoft.com/en-us/library/windows/desktop/hh848035(v=vs.85).aspx)

    那么winhex或者dskprobe跳转到1024KB处,
    开头应该会有NTFS字样,
    512字节前应该会有 disk read error occurred BOOTMGR is missing BOOTMGR is compressed Press Ctrl+Alt+Del to restart字样
    512字节处十六进制会有55AA

    找到这个标记,可以确认仅仅是分区表被破坏,分区数据问题不大。

    如果用dskprobe打开这个扇区,可以选择功能 view as ntfs partition table(大致是这个字样吧)
    将会把这个扇区按照ntfs扇区头来解释,将显示分区大小等信息,如果和你原来的分区一致,那么
    可以确认没有问题了


    2.假如上述流程不可行,那么可以尝试寻找GPT分区表备份
    按照http://en.wikipedia.org/wiki/GUID_Partition_Table的说明
    硬盘最后一个扇区应该是GPT分区表的备份,楼主可尝试使用winhex或者dskprobe读取最后一个扇区(4T硬盘应该是4k扇区。按照wiki的说法,应该是最后一个4k扇区,当然也可能是512字节,都尝试一下),看看有没有GPT分区表的标识
    "EFI PART"
    如果找到,那么可以按照wiki的说明,看一看你的分区表描述是否反应了之前你记住的大概分区结构
    (也就是你说的一个超大分区。不过GPT分区的磁盘也可能在头部多一个小分区,可以忽略)。再跳转到
    这个超大分区的起始扇区,按照1的流程来确认是否找到的就是丢失的分区

    3.GPT分区表备份找不到或者与你原来的分区结构不相符(某些分区工具不会可能不会更新备份的GPT分区表,将导致这个问题),那只有raw搜索了 。在winhex里面搜55AA的hex (可选cond %512 = 510意即只搜512扇区结尾),直到找到NTFS的分区起始处。 NTFS分区的起始扇区在NTFS分区的结尾也有一个备份(与分区头的一样),因为你分成了一个整个的大分区,所以也可以在硬盘的结尾处搜索。找到这个扇区后使用dskprobe的view as ntfs partition table打开之后,用jump to partition start ,即可跳转到ntfs分区的起始扇区。


    4.已经确认分区起始位置后如何操作?
    切换到linux系统,使用losetup 配合你找到的分区起始扇区的*字节位置*
    将sdx (插入硬盘后的序号) 挂载为loop device(比如/dev/loop0),然后用mount -t ntfs-3g /dev/loop0 /mnt/xxx -o ro (只读挂载) (这一段就是大概,具体命令楼主完成前面的步骤之后再详细确认)

    如果没有问题的话,原来的分区已经可以在/mnt/xxx下可以直接访问了。这个流程不需要写入磁盘,也不用恢复分区表 。可以说是无损恢复。如果为了保险,就把文件全部拷贝出来,格式化了再写入(是否考虑换个硬盘?)。要是敢于折腾,可以linux 下gdisk写入一个新的gpt分区表,再手动把分区的起始结束扇区写入,如果正确,硬盘直接恢复成可读状态。
    msg7086
        4
    msg7086  
       2015-05-27 16:47:27 +08:00
    @comicfans44 MBR的可能性很大。
    comicfans44
        5
    comicfans44  
       2015-05-27 17:01:07 +08:00 via Android
    @msg7086 应该不是MBR。MBR分区不能超过2TB,但楼主分成了一个大分区,且用量超过2tb
    msg7086
        6
    msg7086  
       2015-05-27 17:02:33 +08:00
    @comicfans44 谁说不能超过的……
    sketch33
        7
    sketch33  
    OP
       2015-05-27 17:18:16 +08:00
    目前用DiskGenuis的恢复数据功能扫描中……有很多“读扇区错误”
    sketch33
        8
    sketch33  
    OP
       2015-05-27 17:20:26 +08:00
    我也不清楚是什么分区,买来之后格式化了直接开始用了。。。
    comicfans44
        9
    comicfans44  
       2015-05-27 17:41:33 +08:00 via Android
    @msg7086
    Since block addresses and sizes are stored in the partition table of an MBR using 32 bits, the maximum size as well as the highest start address of a partition using drives that have 512-byte sectors (actual or emulated) cannot exceed 2 TB−512 bytes (2,199,023,255,040 bytes or 4,294,967,295 (232−1) sectors × 512 (29) bytes per sector). Alleviating this capacity limitation was one of the prime motivations for the development of the GPT. 我不知道MBR怎么寻址超过2TB.除非LBA按照4k扇区解释。MBR远早于4k,我很怀疑这样做的兼容性。当然如果你有实例可以贴出来研究研究。
    comicfans44
        10
    comicfans44  
       2015-05-27 17:48:08 +08:00 via Android   ❤️ 1
    @sketch33 如果出现读扇区错误建议楼主立刻停止扫描并断电,现在出现读错误且扫描没有结果的情况,读写有可能加剧更多不可恢复错误。应该准备一个同大小硬盘,用二进制对拷后,在拷贝盘上进行恢复操作,原盘尽量不操作
    FifiLyu
        11
    FifiLyu  
       2015-05-27 17:56:22 +08:00   ❤️ 1
    买新硬盘,先dd一次到新硬盘,做备份。然后,尝试修复mbr分区表,mbr分区表,mbr分区表。别搞错了
    msg7086
        12
    msg7086  
       2015-05-27 18:17:01 +08:00
    @comicfans44 大多数的成品外置大容量硬盘都是4K扇区……
    至少WD和ST全线都是这样。随便买一台就可以研究。
    comicfans44
        13
    comicfans44  
       2015-05-27 18:33:41 +08:00 via iPad
    @msg7086 按照我的理解,按照mbr来解析时,不论物理扇区是否4k,lba都按照512字节解释。当然也可能不对。我没这个条件,如果有实例的话贴一个第一扇区看看吧。
    msg7086
        14
    msg7086  
       2015-05-27 18:40:31 +08:00
    @comicfans44 LBA的编号是扇区编号,和扇区大小无关。
    最大容量 = 最大扇区编号(INT_MAX) × 扇区大小。
    逻辑扇区大小是4k的话,MBR最大容量是16TB。

    手头的外置盘全让我拆了壳扔电脑里用了,要实例的话等我下次买硬盘的时候吧。

    先说一句,每个扇区都是4k的……
    不过……有没有支持4k扇区的底层编辑软件就不清楚了,而且有也不知道能不能兼容USB界面,能兼容也不一定能读出原本硬盘上的真实数据。(因为第一扇区可能会被USB界面重写)
    comicfans44
        15
    comicfans44  
       2015-05-27 18:47:03 +08:00
    @msg7086 按照我的理解,即使是4K扇区的硬盘,在MBR解释之下,也应该按照模拟512字节一个LBA来寻址。wiki中有这样一段描述
    MBR partition entries and the MBR boot code used in commercial operating systems, however, are limited to 32 bits. Therefore, the maximum disk size supported on disks using 512-byte sectors (whether real or emulated) by the MBR partitioning scheme (without using non-standard methods) is limited to 2 TB.
    msg7086
        16
    msg7086  
       2015-05-27 18:56:08 +08:00
    @comicfans44 你贴的英语原文并未提到4k,只提到512字节……
    512字节,不论物理还是逻辑模拟,当然都只能到2TB上限了。

    但是我说的是4k逻辑扇区大小啊。
    comicfans44
        17
    comicfans44  
       2015-05-27 19:03:03 +08:00
    @msg7086 嗯,还有一段
    Both the partition length and partition start address are sector values stored in the partition table entries as 32-bit quantities.


    The sector size used to be considered fixed at 512 (29) bytes,


    and a broad range of important components including chipsets, boot sectors, operating systems, database engines, partitioning tools, backup and file system utilities and other software

    had this value hard-coded.


    Since the end of 2009, disk drives using a new technology known as Advanced Format and employing 4,096-byte sectors (4Kn) have been available, although the size of the sector for some of these drives was still reported as 512 bytes to the host system through conversion in the hard drive firmware and referred to as 512 emulation drives (512e).

    总之没有实际的4k硬盘mbr分区超过2TB的实例的话,我觉得还是没有说服力的。要不新开个帖子看看是否有其他人有这样的实例吧
    msg7086
        18
    msg7086  
       2015-05-27 19:18:43 +08:00
    @comicfans44 现在的确很少有见到4Kn的硬盘,但是主流的大容量外置硬盘USB界面都会把硬盘转成4Kn……

    比如一块希捷4TB硬盘。
    硬盘本身是4k扇区编制,但是硬盘固件做SATA界面转换的时候会把4k转换成512e界面。
    所以直接插在SATA口上的时候,如果不用GPT就无法对后半段编址。
    但是如果是经由外置盒走USB的话,USB-SATA转换芯片会把512e界面转换回4k界面。

    开不开新帖我觉得随便吧。
    我自己就是曾经遇到过把外置硬盘插入SATA发现容量小了8倍才知道这技术的……
    花点时间搜一下「外置硬盘 MBR」应该也能搜到不少干货。
    comicfans44
        19
    comicfans44  
       2015-05-27 19:29:55 +08:00 via Android
    @msg7086 容量小8倍确实可以说明不同情况下对LBA的解释不一样了,那容量变小时你还能正常访问分区吗?按说起始扇区位置也变了,应该不能访问才对
    msg7086
        20
    msg7086  
       2015-05-27 19:35:29 +08:00
    @comicfans44 并不能。
    MBR头部分区表记录的是扇区编号。扇区大小变了的话,最终结算的物理地址就都不一样了。
    这就是为什么我一开始说,如果是原生外置硬盘的话,最好看看同样型号硬盘的分区表内容再决定怎么搞。
    comicfans44
        22
    comicfans44  
       2015-05-27 19:55:56 +08:00
    @msg7086 这种解释方式应该也是有兼容性问题了。不过根据楼主提供的这个扫描图片,倒是有点可能,假设diskgenius对mbr是按照512字节来解释的,那么扫描到的第一个分区大小465G,按照8倍,大概是3720G,很接近楼主说的3.7TB。只不过楼主恐怕不能用diskgenius来恢复(因为他没有按照4K来解释扇区),
    保险的话楼主仍然需要硬盘对拷和linux挂载,但是不需要自己去找ntfs的起始扇区了,只要看diskgenius扫出来的第一个ntfs分区的位置,即是正确位置(字节位置,不是扇区),另外楼主遇到的读错误,也可能也是diskgenius没有正确按照4k解释扇区的缘故(应该是从某一点之后一直出现读错误,且不能读的扇区都是连续的)
    msg7086
        23
    msg7086  
       2015-05-27 19:59:34 +08:00
    @comicfans44 反正我是不太敢用4k MBR,所以外置硬盘买来直接把壳拆了接SATA用,免得出现各种诡异问题。
    另外,如果顶楼第一张图片是正确的话,不知道是不是楼主把盘插SATA上的结果……
    msg7086
        24
    msg7086  
       2015-05-27 20:33:23 +08:00
    @comicfans44 对了。你前面贴的chh的帖子我看了下,里面一堆人说错……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:14 · PVG 11:14 · LAX 19:14 · JFK 22:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.