如今磁盘分区格式通常不再采用 MBR 格式,而是 GPT 格式 现在的系统引导方式通常为 UEFI,而非 BIOS
Linux 系统的启动
如何设置 BIOS
某想笔记本开机时按 F2 可以进入 BIOS 设置界面,按 F12 可以进入选择启动设备的界面。 在设置界面中,可以更改设备启动顺序
启动过程
- 接通电源
- BIOS 开始执行 POST 自检
- BIOS 根据用户指定的硬件启动顺序,读取相应设备的 ESR 分区
关键文件
如果磁盘的 ESR 分区损坏了,或者你想要更改 linux 系统分区的位置,那么就需要更改以下文件中的一些信息,才能顺利启动。
EFI 分区中的/EFI/ubuntu/grub.cfg
文件内容示例:
search.fs_uuid 1fb0cf5e-2fbd-44eb-b131-1a59f4b49d36 root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
这个文件通过指定了计算机中另外一个文件 其中 1fb0cf5e-2fbd-44eb-b131-1a59f4b49d36
是文件所在分区的 UUID $prefix/grub.cfg
是该分区中的一个 grub 配置文件
系统分区, /boot/grub/grub.cfg
进入 linux 系统时,会显示一个菜单,让用户选择具体要启动哪个系统(或以何种方式启动),其中每个选项都来自本文件中的配置。 以下是该文件中关键部分的示例
menuentry 'Ubuntu 22.04.2 LTS (on 10-SSD-0)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1fb0cf5e-2fbd-44eb-b131-1a59f4b49d36' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 1fb0cf5e-2fbd-44eb-b131-1a59f4b49d36
linux /boot/vmlinuz-5.19.0-41-generic root=UUID=1fb0cf5e-2fbd-44eb-b131-1a59f4b49d36 ro quiet splash $vt_handoff
initrd /boot/initrd.img-5.19.0-41-generic
}
其中 menuentry
说明这段配置代表的是菜单中的一个选项。 'Ubuntu 22.04.2 LTS (on 10-SSD-0)'
是该选项的名称 1fb0cf5e-2fbd-44eb-b131-1a59f4b49d36
是系统分区的 UUID linux /boot/vmlinuz- ...
用于指定内核文件 initrd /boot/initrd.img- ...
用于指定 内存磁盘初始化文件
问题
移动分区后系统还能照常运行吗
经过测试,使用 GParted 和 Ventoy 工具将 linux 系统分区在一个硬盘中移动并调整大小之后,系统可以照常启动,不需要更改任何配置文件。
经过测试,使用 GParted 和 Ventoy 工具将 Windows 分区和其所在硬盘开头的 EFI 分区复制到另一个硬盘后,无法正常启动 windows 系统。 需要更改配置。
如何移动 windows 系统分区/如何重建 windows 系统的引导
首先要知道 windows 系统分区的位置。 然后需要一个 windows 系统启动盘。推荐使用 ventoy。 开机时选择启动制作好的启动盘,进入命令行。
关键命令
- bcdboot 指定 Windows 系统的位置(通常是
C:\Windows
)
Ventoy
制作一个 Ventory U 盘后,其中会有 2 个分区。 Ventoy 分区用来装随便什么文件 系统从该 U 盘启动时,会进入 Ventoy 的界面,系统会自动从 Ventoy 分区中查找 iso 映像文件,选择其中一个即可启动。 这样就不需要给每个系统都分别制作启动盘了