将 MBR 分区转换为 GPT 而不会丢失数据

将 MBR 分区转换为 GPT 而不会丢失数据

我有一个 MBR 分区,我想将其转换为 GPT,而不会丢失所有数据。Bios 是 UEFI。我不是硬盘专家,所以请耐心等待。我见过但我不明白是否可以在不删除所有文件的情况下应用这些程序,因为该分区在数据开始之前只有 2048 个可用扇区。这是我的分区:

在此处输入图片描述

输出sudo fdisk -l /dev/sda

Disk /dev/sda: 111,81 GiB, 120034123776 bytes, 234441648 sectors
Disk model: Samsung SSD 840 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00034386

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1  *         2048 201011199 201009152 95,9G 83 Linux
/dev/sda2       201013246 234440703  33427458   16G  5 Extended
/dev/sda5       201013248 234440703  33427456   16G 82 Linux swap / Solaris

是否可以进行转换并保留我的数据?

答案1

从 MBR 到 GPT 的转换涉及磁盘,而不是分区:“主引导记录 (MBR) 磁盘使用标准 BIOS 分区表。GUID 分区表 (GPT) 磁盘使用统一可扩展固件接口 (UEFI)。GPT 磁盘的一个优点是每个磁盘可以有四个以上的分区。大于 2 TB 的磁盘也需要 GPT。”(Microsoft - 将 MBR 磁盘转换为 GPT 磁盘

是否可以进行转换并保留我的数据?

是的

跟随本指南(无需在此复制,因为它是一个 SE 网站)。

此处列出了摘要。

  1. sudo gdisk /dev/sda
  2. Command (? for help): n创建一个新的“BIOS 启动”(代码ef02)分区。
  3. Command (? for help): w写入分区表。
  4. partprobe /dev/sda重新加载分区表。

要添加 UEFI 启动:

  1. grub-install /dev/sda使用新的分区方案重新安装 GRUB 引导加载程序。
  2. sudo gdisk /dev/sda然后n创建一个“EFI 系统”分区(ESP)。
  3. c将新分区的标签设置为没有空格
  4. Command (? for help): w写入分区表。
  5. partprobe /dev/sda重新加载分区表。
  6. mkfs -t vfat -v /dev/disk/by-partlabel/EFI-system(例如)为 ESP 构建文件系统。
  7. mkdir /boot/efi为 ESP 创建挂载点。
  8. /dev/disk/by-partlabel/EFI-system /boot/efi vfat defaults 0 2将(或与上面的第 11 项和第 12 项相匹配的任何内容)添加到/etc/fstab,以便自动安装。
  9. mount /boot/efi安装 ESP。
  10. grub-install --target=x86_64-efi /dev/sda安装 GRUB EFI 引导加载程序。
  11. 重启。
  12. 改变BIOS 启动->UEFI 启动在 BIOS 中。
  13. 使用一次性启动菜单强制启动磁盘。您可能需要导航到磁盘:EFI-> ubuntu-> grubx64.efi
  14. grub-install重新安装 GRUB 的 EFI 引导加载程序以更新 UEFI 引导选择器。

笔记:

  1. 我不能忽视这一点(即使全面提及):备份您的数据。
  2. 您的/dev/sda1起点位于 2048 区,因此您可以出发了。
  3. 您可能需要腾出一些空间用于 EFI 系统分区。
  4. (在评论中指出)在答案中列出了更多分散的说明。细节较少。

答案2

简而言之,是的,这是可能的。但我有几点要说:

  • 进行转换时,请从救援媒体启动(或仅从安装媒体启动),否则您将无法看到所做的更改是否对实时系统产生任何影响(如果分区正在使用中,内核将无法重新加载分区表)
  • 备份原始分区表。MBR 正好是 512 字节,因此只需执行dd if=/dev/sda bs=512 count=1 of=backupfile即可复制原始 MBR。GPT 的副本也存储在 MBR 之后和第一个分区之前(在这种情况下,第一个分区从扇区 2048 开始),因此备份此空间应该足以消除您可能对磁盘造成的任何损坏dd if=/dev/sda bs=512 count=2048)。
  • 如果在任何时候你觉得自己搞砸了,只需去做dd if=backupfile of=/dev/sda就可以重新开始。
  • 现在进行转换。首先,使用 擦除 MBR wipefs /dev/sda。您应该只看到类似下面的内容,因此继续使用 擦除它wipefs -f /dev/sda
DEVICE OFFSET TYPE UUID LABEL
sda    0x1fe  dos       
  • 现在继续使用 创建 GPT 表gdisk。这里的关键是创建分区时,确保匹配startend与之前相同。
  • 请注意,您不必在 GPT 中创建扩展分区,因此只需跳过该分区。

以下是您需要运行的命令的概述。我针对文件执行了此操作,但您也可以针对文件执行此操作sudo /dev/sda

$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-234441614, default = 2048) or {+-}size{KMGTP}: 2048
Last sector (2048-234441614, default = 234441614) or {+-}size{KMGTP}: 201011199
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (2-128, default 2): 5
First sector (34-234441614, default = 201011200) or {+-}size{KMGTP}: 201013248
Last sector (201013248-234441614, default = 234441614) or {+-}size{KMGTP}: 234440703
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): p
Disk /dev/sda: 234441648 sectors, 111.8 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): 75C2AE94-C3C0-4927-A4D2-48BBDECE3AD7
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 234441614
Partitions will be aligned on 2048-sector boundaries
Total free space is 4973 sectors (2.4 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       201011199   95.8 GiB    8300  Linux filesystem
   5       201013248       234440703   15.9 GiB    8200  Linux swap

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.

如果您的引导程序位于同一磁盘上,则很有可能无法启动。这是一个更加复杂的过程,因此如果是这种情况...请恢复您的 MBR(记得保存backupfile),并且您需要创建一个 EFI BOOT 分区(如果我是您,我会缩小交换并重新创建它,以便腾出一些空间 - 500MB 左右用于 EFI 引导分区),并确保您在其上获取安装程序。确保您从 UEFI 引导媒体启动,否则在 UEFI 模式下安装 grub 会很困难。

答案3

我无法回复 @chutz,所以我要发表自己的评论:不要按照他说的备份和随后恢复 MBR 的做法去做。MBR 总共是 512 字节。因此,虽然我 100% 同意备份 MBR,仅有的备份 MBR: dd if=/dev/sda of=backupfile.mbr bs=512 count=1 然后按照他说的恢复: dd if=backupfile.mbr of=/dev/sda

但使用 2048 的计数意味着:

  1. 你备份的数据比实际需要的多 2047 倍,而且
  2. 2047 * 512 字节的数据很可能会覆盖磁盘上新的内容,从而导致损坏。只需说“不”。

答案4

我的声誉不足以对 user995746 的帖子发表评论,因此我将在这里发表评论(这是一个愚蠢的声誉系统)。

当转换失败时,备份全部 2048 个扇区拯救了我的系统。我尝试只恢复前 512 个字节,但剩余的 GPT 位似乎出于某种原因导致系统无法启动。恢复第一个分区之前的所有内容恢复了系统。

  1. 备份额外的 1MB 在时间和空间上完全可以忽略不计。
  2. 前 2048 个扇区中应该没有您需要的任何东西,但显然有些东西您可能不想要。

相关内容