恢复运行系统中仍然存在的分区表

the*_*ega 6 linux partitioning

嘿,我不小心在linux上覆盖了我硬盘的前1M(使用dd)。所以,分区表不见了。我仍然可以使用 /dev/sda2(等等)访问所有分区(第一个分区除外),因此数据仍然存在。我只需要分区边界来恢复表。我怎样才能做到这一点?Linux 内核必须仍然知道它们,因为所有挂载点仍然有效。fdisk -l /dev/sda不起作用,因为它实际上读取了分区表。

谢谢!

Gil*_*il' 8

可以从 读取分区的范围/sys/block/sda/sda1/start/sys/block/sda/sda1/size依此类推。值以扇区为单位。在做任何其他事情之前写下这些值,尤其是重新启动。

获得这些值后,您可以使用fdisk. 使用u命令将单位切换到扇区,然后通过输入创建分区

  • n
  • primary / logical / extended
  • 分区号(逻辑分区除外:按顺序做)
  • 初始扇区
  • + 部门规模


Val*_*tin 6

距离提出这个问题已经快两年了。昨天我们处于完全相同的情况:我们有一个带有 2 个磁盘的 Linux 软件 RAID 级别 1。其中一个磁盘坏了,必须更换。我们交换了磁盘,然后想将分区表从剩余(工作)磁盘复制到新磁盘。不幸的是,我们将空分区表从新磁盘复制到旧磁盘。幸运的是,我们在重新启动机器之前立即发现了这一点,因此正确的分区表在内核中仍然处于活动状态。以下是我们为解决此问题所做的工作:

  • 我们从/sys/block/文件系统中提取了分区数据,如 Gilles 的回答中所述。
  • 我们的系统使用了一个GUID 分区表,所以我们不能使用fdisk而不得不使用gdisk
  • gdiskfdisk除了不需要指定u扇区外,工作原理几乎相同。
  • 我们创建了分区确切从提取的数据/sys/block/。对于类似问题,还有其他答案说将分区大小减一,但这对我们来说不是必需的。
  • 使用 guid 分区表不再区分主分区和扩展分区。
  • sys/block文件系统不包含有关文件系统类型的信息,所以我们提取他们mount
  • 使用 guid 分区表,不再有可引导标志。如果要恢复的分区表来自可引导磁盘,则必须有一个 type 分区BIOS boot partition(通常是第一个分区)。

用 写入分区表后gdisk,我们能够重新启动系统,一切运行正常。