![取大小值并从中减去 1,否则您将无法获得原始或正确的结果](https://linux22.com/image/1258092/%E5%8F%96%E5%A4%A7%E5%B0%8F%E5%80%BC%E5%B9%B6%E4%BB%8E%E4%B8%AD%E5%87%8F%E5%8E%BB%201%EF%BC%8C%E5%90%A6%E5%88%99%E6%82%A8%E5%B0%86%E6%97%A0%E6%B3%95%E8%8E%B7%E5%BE%97%E5%8E%9F%E5%A7%8B%E6%88%96%E6%AD%A3%E7%A1%AE%E7%9A%84%E7%BB%93%E6%9E%9C.png)
嗨,我在 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。它有很好的文档记录。不过,我不知道如何恢复第一个分区的覆盖区域。
答案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
#