取大小值并从中减去 1,否则您将无法获得原始或正确的结果

取大小值并从中减去 1,否则您将无法获得原始或正确的结果

嗨,我在 Linux 上意外改写了硬盘的前 1M(使用 dd)。所以,分区表消失了。我仍然可以使用 /dev/sda2(等等)访问所有分区(第一个分区除外),所以数据仍然存在。我只需要分区边界来恢复表。我该怎么做?Linux 内核必须仍然知道它们,因为所有挂载点仍然有效。fdisk -l /dev/sda不起作用,因为它实际上读取了分区表。

谢谢!

答案1

可以从中读取分区的范围/sys/block/sda/sda1/start/sys/block/sda/sda1/size等等。值以扇区为单位。在做任何其他事情(尤其是重新启动)之前,请记下这些值。

获得这些值后,您可以使用 重新创建分区fdisk。使用u命令将单位切换为 扇区,然后输入以下命令创建分区

  • n
  • p初级/l逻辑/e扩展
  • 分区号(逻辑分区除外:按顺序执行)
  • 初始区
  • +扇区大小

答案2

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

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

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

答案3

就我个人而言,我会使用 Trinity Rescue Kit CD 中的 testdisk。它有很好的文档记录。不过,我不知道如何恢复第一个分区的覆盖区域。

Trinity 救援工具包 CD

testdisk wiki 和下载

答案4

我觉得其他答案不够全面,容易出错。这是一个实际的恢复示例,但有一个小警告,我从未在任何地方看到过。从 /sys/block/sda/* 获取扇区起始和大小时,您必须记住从大小中减去 1,否则您将错失 1 个扇区。

还要记住在 fdisk 中按“u”进入扇区模式。

以下是我成功遵循的示例:步骤 1 - 在 /sys/block/sda/sda1 中找到您的设备目录(更改 /sda 和 /sda1 以匹配您的磁盘设备名称和分区号)。

您必须对“开始”和“大小”进行检查,其中“开始”和“大小”代表分区的起始扇区,“大小”代表它有多少个扇区。

取大小值并从中减去 1,否则您将无法获得原始或正确的结果

fdisk /dev/sda

按 u 键切换到 /sys/block/sda 所经过的扇区

/sys/block/sda [root@server1 sda]# cat sda1/start 2048 [root@server1 sda]# cat sda1/size 1024000

[root@server1 sda]# cat sda2/start 1026048 [root@server1 sda]# cat sda2/size 1464121344

步骤 2 - 使用 fdisk 获取上述扇区信息并输入(记住在告诉 fdisk 结束扇区时从大小中减 1)

运行后按“u”切换到扇区模式:

fdisk /dev/sda

命令 (m 获取帮助):n 命令操作 e 扩展 p 主分区 (1-4) p 分区号 (1-4):1 第一个扇区 (63-1465149167,默认 63):2048 最后一个扇区、+扇区或 +size{K,M,G} (2048-1465149167,默认 1465149167):+1023999

命令(输入 m 获取帮助):n 命令操作 e 扩展 p 主分区(1-4)p 分区号(1-4):2 第一个扇区(63-1465149167,默认 63):1026048 最后一个扇区、+扇区或 +size{K,M,G}(1026048-1465149167,默认 1465149167):+1464121343

#

http://realtechtalk.com/Linux_How_To_Recover_Partition_Table_from_Kernel_and_Restore_CentosDebian_etc-1772-articles

相关内容