问题描述
我使用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
达到sda7
而您只有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
建议在许多网站上使用,如下所示。它是一种强大而危险的方法,因为它可以毫无疑问地完成你所要做的事情。因此,它经常被昵称为’Data Destroyer’。
@marcelm评论说,这个绰号是不公平的。他是正确的,以root身份直接写入设备文件会导致风险。因此,请注意,您可以通过写入相应的设备文件/dev/sdx
轻松覆盖驱动器并销毁有价值的数据。 (本答案末尾列出了更安全的工具。)
恢复分区表,文件系统和/或文件内容
-
尽可能少地使用驱动器,最重要的是,不要写任何东西,因为它可以通过覆盖数据使情况更糟,仍然可以恢复。
-
如果您的数据很有价值,则应该使用克隆副本,而不是原始(部分覆盖)驱动器。请参阅此链接,向下滚动到“分区表的高级修复,文件系统和/或文件恢复”Repair the partition table and file system of a pendrive
-
如果您有GUID分区表GPT,则在驱动器
/dev/sda
末尾有分区表的备份,您可以使用工具gdisk
从此备份表还原主分区表。有关详细信息,请参见手册man gdisk
。 -
您可以设法使用http://cgsecurity.org中的Testdisk恢复分区表和文件系统阅读CGSecurity网站上的说明以及@ElderGeek提供的链接,Partitions disappeared after power loss while installing
-
您还可以根据@ CSM,HOWTO: Restore Lost Partitions to a Deleted or Corrupt Partition Table提供的链接,使用gpart /gparted恢复分区表和文件系统。
-
PhotoRec:如果无法恢复分区表和文件系统,仍可以恢复某些文件数据。头端的文件(可能是1-1.5 GB)会被覆盖并丢失,但驱动器部分后面的文件仍然存在。来自http://cgsecurity.org的PhotoRec是一个工具,可以在没有文件系统的情况下从驱动器表面恢复数据。常见文件类型开头的典型数据用于标识。以下链接提供有关PhotoRec,https://www.cgsecurity.org/wiki/PhotoRec的详细信息您应将文件保存到单独驱动器中的分区。无法恢复目录结构,通常无法恢复文件名(而不是权限和所有权),并且在文件碎片化时存在问题,但PhotoRec可以恢复许多文件(不仅照片,还有很多其他常见的文件类型)。但是,这是一个很大但是,通过大量未分类的文件来识别真正重要的文件,你应该重命名为有意义的文件名是一项艰苦的工作。
使用Ubuntu创建USB启动驱动器的更安全的工具
将来,请使用一个工具来帮助您识别和选择正确的目标设备并具有最终检查点,以便您可以将double-check从iso文件克隆到正确的目标设备,例如
-
在Ubuntu中:Ubuntu Startup Disk Creator(在Ubuntu 16.04 LTS及更新版本中),
-
在Linux中:
-
磁盘别名
gnome-disks
,
-
-
在Windows中:Win32DiskImager。
例如,您还可以使用提供最终检查点的提取工具
-
在Windows中:Rufus,
-
在Ubuntu,Windows,MacOS:Unetbootin。
第三种解决办法
通过dd
命令,覆盖/dev /sda的分区表和所有数据,只要image.iso的大小。
因此,您可以实现的最佳方法是恢复分区表(具有确切的大小),以至少恢复到/dev /sda末尾的分区。
第四种办法
如果没有从备份恢复,则无法完全恢复。 DD已经覆盖了分区表和设备的一些数据。
第五种办法
如果您将驱动器分区为单独的/
和/home
分区,并且/home
分区位于/
分区之后,则可以恢复数据。列出大多数分区所在的MBR已被覆盖。但是,gparted可以恢复您的/home
分区。
This post on Ubuntu Forums提供了一些如何做的想法;我发现通过搜索“gparted recover partition”。
一旦找到丢失的分区(可能在扩展分区内),就应该将其添加为分区表中的唯一分区。
完成后,您将不得不重新安装Linux,并将恢复的分区保留为/home
。
第六种办法
Testdisk来救援
在我反复复制和粘贴/dev/sdb
的指令并将其更改为我的USB的/dev/sdd
之后,我可以亲自为Testdisk保存我的数据。只有一次我忘了改变它,我的/dev/sdb
进入垃圾箱。
将系统设置为永不写入/dev/sda
我强烈建议您创建一个包装器脚本:Prevent `dd` from destroying SSD or HDD。这可确保dd
永远不会写入/dev/sda
或可能是/dev/sdb
或任何其他大容量存储设备。