我有一个 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 网站)。
此处列出了摘要。
sudo gdisk /dev/sda
。Command (? for help): n
创建一个新的“BIOS 启动”(代码ef02
)分区。Command (? for help): w
写入分区表。partprobe /dev/sda
重新加载分区表。
要添加 UEFI 启动:
grub-install /dev/sda
使用新的分区方案重新安装 GRUB 引导加载程序。sudo gdisk /dev/sda
然后n
创建一个“EFI 系统”分区(ESP)。c
将新分区的标签设置为没有空格。Command (? for help): w
写入分区表。partprobe /dev/sda
重新加载分区表。mkfs -t vfat -v /dev/disk/by-partlabel/EFI-system
(例如)为 ESP 构建文件系统。mkdir /boot/efi
为 ESP 创建挂载点。/dev/disk/by-partlabel/EFI-system /boot/efi vfat defaults 0 2
将(或与上面的第 11 项和第 12 项相匹配的任何内容)添加到/etc/fstab
,以便自动安装。mount /boot/efi
安装 ESP。grub-install --target=x86_64-efi /dev/sda
安装 GRUB EFI 引导加载程序。- 重启。
- 改变BIOS 启动->UEFI 启动在 BIOS 中。
- 使用一次性启动菜单强制启动磁盘。您可能需要导航到磁盘:
EFI
->ubuntu
->grubx64.efi
。 grub-install
重新安装 GRUB 的 EFI 引导加载程序以更新 UEFI 引导选择器。
笔记:
答案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
。这里的关键是创建分区时,确保匹配start
和end
与之前相同。 - 请注意,您不必在 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 的计数意味着:
- 你备份的数据比实际需要的多 2047 倍,而且
- 2047 * 512 字节的数据很可能会覆盖磁盘上新的内容,从而导致损坏。只需说“不”。
答案4
我的声誉不足以对 user995746 的帖子发表评论,因此我将在这里发表评论(这是一个愚蠢的声誉系统)。
当转换失败时,备份全部 2048 个扇区拯救了我的系统。我尝试只恢复前 512 个字节,但剩余的 GPT 位似乎出于某种原因导致系统无法启动。恢复第一个分区之前的所有内容恢复了系统。
- 备份额外的 1MB 在时间和空间上完全可以忽略不计。
- 前 2048 个扇区中应该没有您需要的任何东西,但显然有些东西您可能不想要。