我有一个 1TB 的 SSD 损坏了。它是 Windows 机器的主驱动器,但使用频率不高,所以我怀疑它不是由于硬件问题而损坏的。我使用命令制作了驱动器的压缩映像以进行恢复,sudo dd if=/dev/sda bs=1M status=progress | bzip2 -9 > /mnt/dsk2.bz2
并在 上安装了 300GB 的驱动器/mnt
。生成的压缩映像只有 21GB 大小,在我看来,驱动器的大部分内容不知何故被清零了。dd 显示已复制 1.0TB,而我只有 1 个 1TB 驱动器,所以我确定我从正确的源复制。
该驱动器的主分区为 930GB,还有一些小于 1GB 的小分区。在 Windows 中,主分区显示为 RAW,系统无法启动。
有了这些信息,我应该如何进行恢复?是否有ddrescue
可能从这样的映像中恢复任何内容,或者recuperabit
尽管损坏,我是否应该在主分区上运行?我不关心恢复完整的可启动映像,只关心主分区上的一些文件。
答案1
事实上,从 1 TB 读取的数据中得到了 21 GB 的压缩数据,这dd
意味着流的dd
压缩性很高。可能的原因如下:
文件系统认为的空空间压缩得非常好。
文件系统认为是空的大多数扇区可能被读取为零。可能是因为:
- 在创建文件系统时,它们被清零。对于 NTFS,当创建文件系统(“格式化”)时没有使用“快速”选项时,就会发生这种情况。
- 或者可能由于某种原因,它们后来被归零了。
- 或者文件系统可能定期被修剪。一些 SSD 在读取修剪后的块时会返回零。一般来说,SSD 可能会返回任何值;即使不是零,修剪后的块中的“数据”也可能压缩得很好。
文件系统中的文件被压缩得很好。
有些文件(例如文本文件)压缩效果很好。其他文件压缩效果一般。已经高度压缩的文件(例如媒体文件)无法进一步压缩。
如果您有大约 21 GB 的不可压缩数据,并且空白空间压缩得非常好,那么 21 GB 的压缩数据结果就不足为奇了。30 GB 的混合数据可能会压缩到 21 GB。我认为将 Windows 安装加上 15 GB 的已压缩媒体(电影、mp3)压缩到 21 GB 是不可能的(无法任意好地压缩任意数据)。
也许您还记得自己有多少数据,以及(大致)数据压缩的可能性有多大。这样,您就可以估算出图片中可能包含多少数据。无论您得到什么样的估算,都请将其视为乐观估计;实际情况可能更糟。您很可能因为您提到的损坏而丢失了数据。这就引出了下一个可能的原因。
您得到的不是好的数据,而是压缩得非常好的“垃圾”(由于损坏)。
SSD 可能会从应该包含有用数据的块中返回高度可压缩的垃圾(例如零),就好像它被修剪得过多一样。
你拥有的映像包含你能够从 获得的所有内容/dev/sda
。如果不弄乱 SSD 的固件或硬件,你很可能无法获得更多。除非 SSD 可能“不稳定”,并且有时返回有意义的地址数据,而其他时候则返回零。拍摄另一张(未压缩的)图像并与当前图像进行比较可能会提供一些线索(然后也许你将能够合并图像)我认为 SSD 这样“不稳定”并非完全不可能,但我不会指望它。
您所拥有的映像可能不仅包含您能够从中获得的所有内容/dev/sda
;还包含您现在或将来能够从中获得的所有内容。SSD 可能会变得更糟,但映像是您拥有的最好的。
商业数据恢复服务可能能够或不能通过修改固件或硬件从 SSD 获取更多数据。
我该如何进行恢复?
我不知道是否有任何恢复文件的实用程序支持从压缩映像中恢复。您需要解压缩映像。如果您解压缩到支持压缩的文件系统(例如 Btrfs),并且生成的文件在文件系统级别被压缩,那么它将占用少于 1 TB 的磁盘空间。它可能远远超过 21 GB(文件系统不会那么好bzip2 -9
),但磁盘上的大小应该相当。
或者将解压后的图像写为稀疏文件。许多文件系统都支持稀疏文件(ext4 支持)。您可以通过管道强制稀疏dd conv=sparse
(但请注意:为什么没有dd conv=sparse
像我预期的那样节省空间?)。另一种方法是通过管道传输到cp --sparse=always /proc/self/fd/0 /target/file
。(请注意,无论是dd conv=sparse
还是cp --sparse
都/proc
不可移植。)但这仅在未压缩的图像包含零块时才节省磁盘空间。您观察到的高压缩率可能是也可能不是因为零;可能是因为非零块也压缩得非常好,但不能写成稀疏的。
类似的东西
ddrescue
能从这样的图像中恢复任何东西吗?
可能ddrescue
根本帮不了你。它的目的是获取尽可能接近原始块设备(或常规文件,或任何可查找文件)的映像。cp
或dd
也可以做到这一点,除非发生读取错误。ddrescue
旨在处理读取错误(而其他工具通常会停止)。你dd
没有遇到正式错误,因此它成功了。这项工作完成了。使用的时间ddrescue
是那时;你很幸运你设法用 做到了这一点dd
。
(另一方面,您无法使用ddrescue
,bzip
因此不可能获取压缩图像。我明白您明确希望对图像进行压缩。ddrescue
但是,您可以编写稀疏图像。)
在(压缩或未压缩的)图像上使用ddrescue
now 只会为您提供该图像的另一个完美副本。读取图像时不会出现读取错误,保存该图像的文件系统是健康的,对吗?所以ddrescue
会像cp
。
还有另一种使用情况ddrescue
。如果您可以从映像中挂载文件系统,并且在其中的目录中找到文件,则可以使用cp
将它们取出。这cp
可能会由于文件系统不健康而导致的读取错误而失败。如果cp
失败,则ddrescue
可能能够获取更多有问题的文件的片段(或文件,一个接一个)。但前提是您可以挂载。
您可能无法轻松挂载显示为 RAW 的文件系统。 类似 的工具testdisk
可能能够帮助您挂载它。 请记住,挂载文件系统不是您的目标。
或者尽管有损坏我仍应该
recuperabit
在主分区上运行?
photorec
即使文件系统没有挂载,或之类的工具也foremost
可能能够恢复某些文件(或它们的片段)(请参阅此处的答案:如何从我的存储设备恢复丢失或无法访问的数据?)我没有经验,recuperabit
但是它似乎它是适合这项工作的正确工具,并且它可能比其他工具(甚至是其他工具的组合)更好,因为它是针对 NTFS 定制的。
通常,此类工具(当然recuperabit
)需要输入图像(常规文件)或写入图像的(健康)块设备。或者作为原始块设备。原始设备可能不健康,因此通常的程序是制作一次副本(图像)并使用它(或它的副本)。重点是副本不能压缩,您需要未压缩的文件。
是的,recuperabit
这是个好主意。不过我并不期望太多。你可能丢失了数据,丢失的数据不在镜像中,很可能无法在家庭环境中从 SSD 中检索,甚至永远都无法检索。也许你会恢复一些东西,总比什么都没有好,值得一试。