我正在关注有关如何使用 GRUB 在硬盘上安装 GParted Live 的官方文章https://gparted.org/livehd.php但我无法让它发挥作用。我已经在 上创建了一个 FAT 分区/dev/sdb3
,安装到/mnt
,从 zip 文件中提取了所有文件,并将文件夹重命名live
为live-hd
,正如他们所说的那样。接下来,我添加了启动条目:
menuentry "GParted live" {
set root=(hd1,3)
linux /live-hd/vmlinuz boot=live config union=overlay username=user components noswap noeject vga=788 ip= net.ifnames=0 live-media-path=/live-hd bootfrom=/dev/sdb3 toram=filesystem.squashfs
initrd /live-hd/initrd.img
}
然后更新了 grub sudo update-grub2
。但是当我启动到 GParted 时,出现错误:
Invalid sector size 65535
You need to load kernel first
据我了解,这(hd0,4)
意味着第一个磁盘,第四个分区(/dev/sdb4)
,所以在我的例子中,这将是我的第二个磁盘,第三个分区,所以(hd1,3)
/dev/sdb3
。我究竟做错了什么?
这是我的磁盘布局:
$ parted -l
Model: ATA Samsung SSD 850 (scsi)
Disk /dev/sdb: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 135MB 134MB linux-swap(v1) linux-swap swap
2 135MB 673MB 538MB fat32 EFI System Partition boot, esp
4 673MB 249GB 249GB ext4 Ubuntu 20.04
3 249GB 250GB 629MB fat32 GPARTED msftdata
更新
我查看了其他 GRUB 条目/boot/grub/grub.cfg
,这是我用来启动 Ubuntu 20.04 和 Windows 的一个条目
# Ubuntu 20.04
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-0f745246-0966-49bb-8aff-b832b71a53a0' {
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
set root='hd1,gpt4'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt4 --hint-efi=hd1,gpt4 --hint-baremetal=ahci1,gpt4 0f745246-0966-49bb-8aff-b832b71a53a0
else
search --no-floppy --fs-uuid --set=root 0f745246-0966-49bb-8aff-b832b71a53a0
fi
linux /boot/vmlinuz-5.13.0-39-generic root=UUID=0f745246-0966-49bb-8aff-b832b71a53a0 ro
initrd /boot/initrd.img-5.13.0-39-generic
}
# Windows
menuentry 'Windows Boot Manager (on /dev/sdb2)' --class windows --class os $menuentry_id_option 'osprober-efi-94C2-ECC1' {
insmod part_gpt
insmod fat
set root='hd1,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2 94C2-ECC1
else
search --no-floppy --fs-uuid --set=root 94C2-ECC1
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
所以我将 GParted 的条目更改为
menuentry "Gparted live" {
insmod part_gpt
insmod ext2
insmod fat
set root='hd1,gpt3'
linux /live-hd/vmlinuz boot=live config union=overlay username=user components noswap noeject vga=788 ip= net.ifnames=0 live-media-path=/live-hd bootfrom=UUID=606E-0DF2 toram=filesystem.squashfs
initrd /live-hd/initrd.img
}
我更改了条目
set root=(hd1,3)
到
set root='hd1,gpt3'
但我得到一个错误disk hd1,gpt3 not found
为了进行测试,我添加了一个单独的条目来将我的 Ubuntu 引导到救援模式:
menuentry "Ubuntu Runlevel 1" {
insmod gzio
insmod part_gpt
insmod ext2
set root='hd1,gpt4'
linux /boot/vmlinuz-5.13.0-39-generic root=UUID=0f745246-0966-49bb-8aff-b832b71a53a0 ro 1
initrd /boot/initrd.img-5.13.0-39-generic
}
所以这里的set root='hd1,gpt4'
UUID 和分区 UUID 与我正常的 Ubuntu 启动项相同,但它不起作用。
答案1
经过一段时间的研究,我终于找到了解决我的问题的方法。这是我最后的 GRUB2 菜单条目。
menuentry "Gparted live" {
insmod part_gpt
insmod ext2
insmod fat
set root='hd1,gpt3'
search --no-floppy --fs-uuid --set=root 606E-0DF2
linux /live-hd/vmlinuz root=/dev/sdb3 boot=live config union=overlay username=user components noswap noeject vga=788 ip= net.ifnames=0 live-media-path=/live-hd toram=filesystem.squashfs
initrd /live-hd/initrd.img
}
我对原始代码做了一些修改,所以我不知道具体解决了什么问题。我添加了search --no-floppy --fs-uuid --set=root 606E-0DF2
行并移至root=/dev/sdb3
第一个参数linux