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

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

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

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

我不小心弄错了,结果删除了 上的分区表/dev/sda,而不是/dev/sdb

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

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

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

是的,我感觉很聪明

答案1

内核将分区表永久保留在缓存中(除非明确告知重新加载,并且如果某些分区正在使用则无法完成)。因此,在重新启动之前您是安全的(或者告诉内核对不反映真实磁盘内容的数据进行操作;例如,如果您已经激活了 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, run保存fsck -n (don't forget the-n mount`的内容) to check the consistency of the filesystems on each partition (don't use,只有在偏移量正确时才有效,如果偏移量正确但大小不正确,则可能会损坏磁盘(即使在只读模式下,因为它会写入日志) )。

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

答案2

部分即使您已经重新启动,也应该对您有所帮助。

相关内容