![删除了磁盘的前 512 字节;我怎样才能恢复我的数据?](https://linux22.com/image/76378/%E5%88%A0%E9%99%A4%E4%BA%86%E7%A3%81%E7%9B%98%E7%9A%84%E5%89%8D%20512%20%E5%AD%97%E8%8A%82%EF%BC%9B%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E6%81%A2%E5%A4%8D%E6%88%91%E7%9A%84%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
我不小心将 512 字节的二进制文件写入了错误的 USB 磁盘,dd
并且设备不再显示任何分区fdisk
。
我以为所有数据都消失了,但dd if=/dev/sdx | strings
显示数据似乎仍然存在,因为dd
幸运的是,数据仅限于前 512 个字节。有什么办法可以恢复吗?
该磁盘有两个分区:一个是 ext4 (~4GB),其余 16GB 被格式化为 NTFS。
答案1
这取决于之前到底发生了什么,但从中恢复可能很容易。
用于
dd
在安全位置创建 USB 驱动器的完整映像。用于
dd
在安全位置创建 USB 驱动器的完整映像。是的,请保留完整图像。数据恢复操作通常会造成比预期更大的损害。
尝试记住该 USB 驱动器上的分区布局是什么样的。写下来。如果您拥有 Linux 内核检测到该磁盘(在被搞乱之前)时的系统日志,这可能会有所帮助 - 通常它会打印出有关检测到的分区的一些数据。
使用 fdisk 重新创建具有相同分区表的 MBR。不要格式化和/或 fsck 任何分区。
尝试使用只读 (
-o ro
)mount
选项挂载分区。如果成功,请尝试将所有文件复制到安全位置,并观察终端并记录 I/O 错误 - 表达分区边界错误的典型方式是通过底层设备上的越界访问。
如果复制失败,请恢复映像并返回到步骤 4。
我是否提到过在执行其他操作之前要有 USB 驱动器的完整映像?
PS:您可能还想看看类似的工具测试盘,尝试自动化恢复过程。但您仍然应该先获得完整的图像。
PS2:如果你觉得舒服的话,你也可以尝试一下。如果您可以对第一个分区的起点做出合理的假设,那么您可以用来tune2fs -l
获取第一个分区的确切大小,这将允许您寻找第二个分区的起点。
答案2
为了恢复ext4
分区及其数据,我考虑创建一个磁盘范围的 ext4 分区。这让我得到了访问数据并按照 @thkala 的建议,使用 检索有关分区的信息tune2fs -l
。这些信息看起来非常可行,因此没有改变。
非常有趣的是,gparted 在某种程度上能够弄清楚实际分区大小从这个警告可以看出:
分区内有 10.96 GiB 未分配空间。要扩展文件系统以填充分区,请选择分区并选择菜单项:
因为 11GiB 大约是 NTFS 分区的大小。
请注意未使用的空间,IIRC,它是 ext4 仍然可用的空间。这未分配的空间gparted识别出的似乎是NTFS分区;现在,我怎样才能恢复那个呢,也许可以通过找出第一个分区的结束位置(即它的总字节数)来实现?
最后测试盘毫不费力地处理了这件事。