意外地做了dd / dev / sda

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

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

由于您的计算机仍处于运行状态,因此您很有可能保存计算机。

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

由于您似乎能够使用您的文件系统,因此您的dd可能无法覆盖任何文件系统,因为文件系统的大部分重要位都位于前端。 检查/etc/fstab以查看哪些分区对应于系统的哪个部分,然后使用复制的dd数据来估算您的核心数量。 如果你只覆盖文件系统的一部分,一个好的fsck 可能能够修复它(但你已经丢失了很多数据)。

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

很抱歉阅读你的运气不好

我想你没有当前的备份,我很遗憾地读到你的运气难过

 sudo dd if=image.iso of=/dev/sdx 

您使用驱动器号x = a以便您覆盖硬盘驱动器的开头,在那里存储了大量有价值的数据。

你不是第一个人,我担心不是受这个问题影响的最后一个人。 dd建议在许多网站上使用,如下所示。 这是一种强大而危险的方法,因为它可以毫无问题地完成你所要做的事情。 出于这个原因,它经常被昵称为“数据驱逐舰”。

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

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

  • 尽可能少地使用驱动器,最重要的是,不要写任何东西,因为它可以通过覆盖数据使情况更糟,仍然可以恢复。

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

    修复pendrive的分区表和文件系统

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

  • 您可以设法使用Testdisk从中还原分区表和文件系统

    http://cgsecurity.org

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

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

    HOWTO:将丢失的分区还原到已删除或损坏的分区表

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

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

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

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

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

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

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

  • 在Ubuntu: Ubuntu Startup Disk Creator (在Ubuntu 16.04 LTS和更新版本中),
  • 在Linux中:

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

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

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

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

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

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

如果您将驱动器分区为单独的//home分区,并且/home分区位于/分区之后,则可以恢复数据。 列出大多数分区所在的MBR已被覆盖。 但是,gparted可以恢复您的/home分区。

这篇关于Ubuntu论坛的post提供了一些如何做的想法; 我发现通过搜索“gparted recover partition”。

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

完成后,您将不得不重新安装Linux,并将恢复的分区保留为/home

Testdisk来救援

在我反复复制并粘贴/dev/sdb指令并将其更改为/dev/sdd (我的USB)后,我可以亲自为Testdisk保存我的数据。 只有一次我忘了改变它,我的/dev/sdb进入垃圾箱。

将系统设置为永不写入/dev/sda

我强烈建议创建一个包装器脚本: 防止`dd`破坏SSD或HDD 。 这可以确保dd永远不会写入/dev/sda或可能/dev/sdb或任何其他大容量存储设备。