不小心做了 dd /dev/sda

Baa*_*Cow 35 hard-drive dd data-recovery

我使用 .iso 将 ISO 映像写入硬盘sudo dd if=image.iso of=/dev/sda。我的意思是/dev/sdc,现在运行sudo fdisk -l在 /dev/sda 上只返回一个分区,而应该有 6 个。是否可以恢复我的数据?

我还没有关闭(重启)我的电脑。

HTN*_*TNW 64

由于您的计算机仍在运行,因此您很有可能保存东西。

首先,sysfs公开内核在分区表的内存视图。现在,您的内核还没有重新读取磁盘的表,它会记住您的分区。在里面/sys/block/sda/,每个分区应该有一个目录。每个这样的子目录都包含一个 filestart和一个 file size,它们代表分区的位置和大小,以扇区为单位。运行fdisk,然后使用其sysfs目录中的信息重新创建每个分区(按顺序!)。请注意,您还必须创建一个新的分区表。确保您的新分区表与之前的相同。您可以在/sys/block/sda. 如果你看到sda1最多sda7虽然您只有 6 个分区,但您可能有 MBR,否则可能是 GPT。您还需要为这些分区设置标志和类型。查看/etc/fstab并尝试收集有关您拥有的分区类型的信息,然后查看 Wikipedia 将这些信息转换为您的分区方案的代码。

由于您似乎能够使用您的文件系统,因此您可能dd没有覆盖任何文件系统,因为文件系统的大多数重要部分都在前面。检查/etc/fstab哪些分区对应于您系统的哪个部分,然后使用dd复制的数据量来估计您核对了多少。如果覆盖只有一个文件系统的一部分,良好的fsck 也许能够解决它有点(但你丢失的数据块好)。

最有可能的是,您覆盖了/boot. 您必须重新安装内核(使用aptitude)并重新安装 GRUB2(使用grub-install)(它的第一阶段和第二阶段都被破坏了)。GRUB2 配置了 中的文件/etc,因此您无需手动重新创建任何内容。

  • “检查 `/sys/block/sda/*/{start,end}` 并使用此信息重新创建分区”:您能稍微扩展一下吗?这不是一个微不足道的操作,似乎是您其他出色答案的要点。 (15认同)
  • 当您发现任何有价值的信息时,将其复制到另一个驱动器(例如 U 盘)。如果任何分区重新创建步骤不完美,您需要记录仍在运行的计算机的内存中的内容。此外,**在运行计算机时将最有价值的和/或小文件(包括主目录中的诸如 `.bashrc` 和其他点文件,以及除真实数据之外的所有 `/etc`)复制到另一个磁盘还在工作**。tar.gz 是复制整个目录的好格式(因为它保留了权限和内容)。 (3认同)

sud*_*dus 22

很抱歉得知您的运气不佳

我猜你没有当前的备份,我很抱歉读到你的运气不好使用

sudo dd if=image.iso of=/dev/sdx
Run Code Online (Sandbox Code Playgroud)

您在哪里使用驱动器号x=a这样您就可以覆盖存储大量有价值数据的硬盘驱动器的开头。

您不是第一个,恐怕也不是最后一个受此问题影响的人。dd很多网站都推荐这样使用。这是一种强大但危险的方法,因为它会毫无疑问地执行您告诉它执行的操作。因此,它通常被称为“数据破坏者”。

@marcelm 评论说,这个昵称是不公平的。他是对的,以 root 直接写入设备文件会导致风险。因此请注意,您可以通过写入相应的设备文件轻松覆盖驱动器并破坏有价值的数据/dev/sdx。(本答案末尾列出了更安全的工具。)

恢复分区表、文件系统和/或文件内容

  • 尽可能少地使用驱动器,最重要的是,不要向其写入任何内容,因为它会覆盖仍然可以恢复的数据,从而使情况变得更糟。

  • 如果您的数据很有价值,您应该使用克隆副本,而不是原始(部分覆盖)驱动器。请参阅此链接,向下滚动到“分区表、文件系统和/或文件恢复的高级修复”

    修复U盘分区表和文件系统

  • 如果你有一个 GUID 分区表,GPT,在驱动器的末尾有一个分区表的备份/dev/sda,你可以使用工具从这个备份表恢复主分区表gdisk。有关man gdisk详细信息,请参阅手册。

  • 你可以设法恢复使用分区表和文件系统Testdisk

    http://cgsecurity.org

    阅读CGSecurity网站上的说明以及@ElderGeek提供的链接,安装时断电后分区消失

  • 您还可以根据@CSM 提供的链接使用gpart/gparted设法恢复分区表和文件系统,

    如何:将丢失的分区恢复到已删除或损坏的分区表

  • PhotoRec : 如果您无法恢复分区表和文件系统,您仍然可以恢复一些文件数据。头端的文件,可能是 1-1.5 GB,被覆盖和丢失,但驱动器后面的文件仍然存在。http://cgsecurity.org上的PhotoRec是一种工具,它可以在没有文件系统的情况下“从驱动器表面”恢复数据。常见文件类型开头的典型数据用于识别。

    以下链接提供了有关 PhotoRec 的详细信息,

    https://www.cgsecurity.org/wiki/PhotoRec

    您应该将文件保存到单独驱动器中的分区。

    无法恢复目录结构,通常无法恢复文件名(而不是权限和所有权),并且存在问题,当文件碎片化时,但是PhotoRec可以恢复许多文件(不仅照片,还有许多其他常见的文件类型)。但是,这是一个很大的问题,要通过大量未分类的文件来识别真正重要的文件是一项艰巨的工作,您应该将它们重命名为有意义的文件名。

使用 Ubuntu 创建 USB 引导驱动器的更安全工具

将来,请使用可帮助您识别和选择正确目标设备并具有最终检查点的工具,以便您可以仔细检查是否将从iso 文件克隆到正确的目标设备,例如

  • 在 Ubuntu 中:Ubuntu 启动盘创建器(在 Ubuntu 16.04 LTS 和更新版本中),
  • 在 Linux 中:

    • 磁盘别名gnome-disks
    • mkusb ,
  • 在 Windows 中:Win32DiskImager

例如,您还可以使用提供最终检查点的提取工具

  • 在 Windows 中:Rufus
  • 在 Ubuntu、Windows、MacOS 中:Unetbootin


muc*_*lux 18

通过你的dd命令,你覆盖了 /dev/sda 的分区表和所有数据,只要 image.iso 的大小。

因此,您可以实现的最好方法是恢复您的分区表(具有确切大小)以至少恢复 /dev/sda 末尾的分区。


stu*_*bee 15

如果没有从备份中恢复,就无法完全恢复。DD 已经覆盖了分区表和设备的一些数据。

  • @Baaing Cow,当然这是一个答案,当然无法恢复数据。这就是覆盖数据时的意思:数据消失了。 (23认同)
  • @ChaiT.Rex 这似乎是一个神话,至少在您可能在过去十年内制造的 PC 中找到的任何设备上都是如此。 (22认同)
  • 我想我应该扔掉我所有的灾难恢复备份。 (19认同)
  • @ChaiT.Rex 仅适用于未完全覆盖的磁盘,其中仅擦除了磁盘的*部分*。但是,如果整个磁盘已被擦除或覆盖,则无法恢复数据。专家与否。 (19认同)
  • @BaaingCow 如您所知,必须有一种方法可以恢复数据,请赐教。很多人会愿意为你的技术付钱! (8认同)
  • @DavidSchwartz 和 Thomas Ward 我已经调查过了,看起来你是对的。 (3认同)
  • 这甚至不是答案,不可能没有办法恢复数据。 (2认同)
  • @psusi 覆盖的数据有时仍可以由数据恢复专家恢复。 (2认同)
  • @Myridium:如果我回忆起正确检查硬盘驱动器剩余磁场的论文,那么即使对于*旧*(2000 年之前)驱动器,对于超出少数位的任何内容,其可靠性都极低。这与加密密钥有关,但与一般数据恢复无关。 (2认同)
  • @Myridium:我找不到,但我找到了类似的,[覆盖硬盘数据:擦除大争议](https://link.springer.com/chapter/10.1007%2F978-3-540-89862-7_21 ) 和 [情报机构可以读取被覆盖的数据吗?对古特曼的回应。](https://www.nber.org/sys-admin/overwritten-data-gutmann.html)。 (2认同)

小智 9

如果你开车被划分为独立的//home分区,以及 /home分区是以后/的分区,那么你就可以恢复你的数据。列出大多数分区所在的 MBR 已被覆盖。但是,gparted 可以恢复您的/home分区。

Ubuntu 论坛上的这篇文章 给出了一些关于如何做到这一点的想法;我通过搜索“gparted 恢复分区”发现了这一点。

一旦找到丢失的分区(可能位于扩展分区内),您应该将其添加为分区表中的唯一分区。

完成此操作后,您将必须重新安装 Linux,并告知将恢复的分区保留为/home.