意外地为引导驱动器创建了新的分区表

昨天我不小心在主驱动器上用gdisk创建了一个新的(启动)分区而不是我的外部驱动器。 然而,这创建了一个新的分区表,但由于我在此驱动器上运行Kubuntu,因此内核尚未更新。

使用我的所有数据和设置获取可启动Windows和Kubuntu分区的最快方法是什么?
– 我做了dd备份,但我认为这只包含新分区?
– 我仍然可以访问所有文件,所以我也将它们压缩在一起。
– 我是否必须重新安装kubuntu和Windows或有没有办法撤消gdisk操作?
– 我应该关闭计算机并在实时系统上使用testdisk吗?

gisk -l输出:

manu @ manus-Laptop:〜$ sudo gdisk -l / dev / sda
manu的[sudo]密码:
GPT fdisk(gdisk)版本1.0.1

分区表扫描:MBR:保护
BSD:不在场
APM:不在场
GPT:现在

找到具有保护性MBR的有效GPT; 使用GPT。
磁盘/ dev / sda:468862128扇区,223.6 GiB
逻辑扇区大小:512字节
磁盘标识符(GUID):62FADE32-E715-4AC6-BA77-307107A2454F
分区表最多可容纳128个条目
第一个可用扇区是34,最后一个可用扇区是468862094
分区将在2048个扇区边界上对齐
总可用空间为468861108个扇区(223.6 GiB)

编号___开始(扇区)_ _结束(扇区)_ _ _大小_ _ _代码_ _ _名称
______1____________2048___________ 3000 _ _ _ 476.5 KiB _ EF02 _ _ BIOS启动分区manu @ manus-Laptop:〜$

鉴于您目前的情况,我知道有三种方法可以做您想做的事情:

方法1:容易但危险和缓慢

第一种方法是使用TestDisk,它可以扫描磁盘上的文件系统数据并生成新的分区表条目以匹配它找到的内容。 这种方法相对自动化,因此很容易; 但是工具必须扫描大部分磁盘,这可能需要一段时间。 更糟糕的是,TestDisk可能会被您删除的旧分区中的杂散数据抛出,从而产生不良结果。 因此,TestDisk有可能生成一个完全错误的分区表; 或者它可能会给你一些关于恢复什么的选择,你可能无法确定哪个是正确的。

尽管TestDisk可以恢复分区的起点和终点,并且很可能正确设置分区类型代码,但它无法恢复分区的原始GUID。 这对于引导非常重要,如下一节所述。

请注意,一旦关闭或重新启动计算机,TestDisk(或某些类似工具;它不是此类别中唯一的工具)将成为您唯一的选择。

方法2:更难但更安全更快

由于您的内核仍在使用旧分区表,因此仍可以从内存中检索分区上的数据。 问题是如何这样做,答案是查看/sys/block/sda目录树。 该目录应该具有每个分区( sda1sda2等)的子目录,并且这些目录中的每个目录都有一个start和一个size文件,其中包含分区的起始位置和大小。 例如:

 $ cat /sys/block/sda/sda2/start 1126440 $ cat /sys/block/sda/sda2/size 1536000 

这表明,在我的系统上, /dev/sda2从扇区1126440开始,大小为1536000个扇区。 您可以提取此信息,并使用gdisk重新创建分区表 – 或者至少创建具有正确大小的分区。 您需要使用您对每个分区中的内容的知识来设置其类型代码。 AFAIK,无法恢复GUID值(前一种方法也是如此)。 ESP的GUID值可能很重要,因为它可能被EFI用作其引导过程的一部分。 你应该能够从sudo efibootmgr -v输出中提取它 – 它将嵌入在ubuntu行的一部分的字符串中。 重新创建ESP后,可以使用gdisk更改此值 – 使用专家菜单上的c选项。

方法3:最好,最容易,但你可能做不到

执行所需操作的最佳和最简单方法是从备份还原分区表。 gdisk工具在主菜单上提供了一个b选项来创建这样的备份。 如果您这样做了,可以使用恢复和转换菜单上的l (小写“L”)选项恢复备份。

以这种方式还原备份将使所有分区表数据恢复到备份时的状态。 这包括GUID值,分区名称,当然还有分区大小。 可以想象你已经做了这样的备份但却忘了它。 如果是这样,请使用它。 但是,如果没有,这对你没有任何好处,除非你现在知道这个选项,并且可能有动力在将来使用备份。