不小心删除了我的启动盘上的分区。系统仍在运行。我怎样才能恢复?

Fak*_*ame 5 linux partition data-recovery

我只是不小心从错误的磁盘上清除了所有分区。

/dev/sda是启动盘,/dev/sdb是我试图设置为 RAID 镜像的新磁盘。

我不小心把它弄胖了,最后删除了 上的分区表/dev/sda,而不是/dev/sdb

系统仍在运行,因此它正在某处运行缓存分区表。

我可以恢复分区表,或者至少查看它,以便我可以准确地重新创建分区吗?

fdisk /dev/sda -l 不产生分区。

是的,我觉得自己很聪明

Gil*_*il' 8

内核将分区表永久保存在缓存中(除非明确告知重新加载,如果某些分区正在使用,则无法完成)。因此,您在重新启动之前是安全的(或告诉内核对不反映真实磁盘内容的数据进行操作;例如,如果您已经激活了 mdraid,它可能已经将其元数据写入磁盘)。

如果您有引导扇区的最新备份(前 512 字节),您可以恢复它(cat boot-sector-backup >/dev/sda——请检查您正在恢复的文件的大小是否正好为 512 字节)。您的引导加载程序安装可能已经创建了引导扇区备份,但如果它已升级或您从那时起重新分区,它将不会是最新的。不要还原可能已过时的备份。

内核有关分区的信息可通过 访问/sys/class/block/sda/sda*。在为每个分区(该目录sda1sda2等等):

  • start 包含分区开头的偏移量,以 512 字节扇区为单位。
  • size 包含分区的大小,以 512 字节扇区为单位(扩展分区除外)。

如果您有编号为 5 或以上的分区,则它们是包含在扩展分区内的逻辑分区(请参阅“扩展”分区和“逻辑”分区之间的区别是什么)。有一个扩展分区(或没有),它是分区 1-4 之一。该文件size不包含扩展分区的大小,因此您首先需要确定;它必须足够大以容纳所有逻辑分区,并且不得包含任何主分区(其他分区编号为 1-4)。

运行fdisk /dev/sda。用于u将单位切换到扇区。从扩展分区开始,创建n具有正确偏移量和大小的分区 ( )(如提示所说,+在涉及大小时放在扇区数之前)。

使用p检查分区表看起来正确。如果其中一些分区不是 Linux 数据分区,请使用t设置它们的类型(82对于 Linux 交换、c对于 Windows FAT32 分区、7对于 Windows NTFS 分区)。如果您有可引导的 DOS/Windows 分区,请设置其可引导标志 ( a)。

仔细检查输出是否正常,然后按w将新表提交到磁盘。

保存/sys/class/block/sda/ in a tar archive on a USB stick. Then reboot from a removable media. **After rebooting, if the partition table you created is not correct, you risk massive data corruption**. So from the removable media, runfsck -n (don't forget the-n ) to check the consistency of the filesystems on each partition (don't usemount`的内容,它只有在偏移正确时才有效,如果偏移正确但大小不正确,则可能会损坏磁盘(即使在只读模式下,因为它会写入日志) )。

如果 fsck 没有找到文件系统,则说明分区的偏移量是错误的。如果它报告错误,很可能是您弄错了分区的大小。只要你还没有写入磁盘,你仍然可以修复分区表。当你挂载的磁盘上没有分区时,按下winfdisk将使内核重新读取分区表。一旦你的分区正确,你应该能够重新启动到你的正常系统并像往常一样继续。