操作系统Ubuntu 20.04.3 LTS Desktop 64-bit
位于 gpt2 分区,文件系统为 NTFS。
这是文件系统 FAT32 的 gpt1 分区的结构:
.
├── boot
│ └── grub
│ └── grub.cfg
└── efi
└── boot
├── bootx64.efi
├── grubx64.efi
└── mmx64.efi
4 directories, 4 files
这是 NTFS 分区的 grub 菜单(默认 grub.cfg):
if loadfont /boot/grub/font.pf2 ; then
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
fi
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set timeout=5
menuentry "Ubuntu" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed maybe-ubiquity quiet splash ---
initrd /casper/initrd
}
menuentry "Ubuntu (safe graphics)" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed maybe-ubiquity quiet splash nomodeset ---
initrd /casper/initrd
}
menuentry "OEM install (for manufacturers)" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed only-ubiquity quiet splash oem-config/enable=true ---
initrd /casper/initrd
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
exit 1
}
menuentry 'UEFI Firmware Settings' {
fwsetup
}
fi
如果 grub.cfg 文件(FAT32 分区)包含:
search --no-floppy --set=root --fs-uuid 2E92F36515DD4A5A
chainloader /EFI/BOOT/BOOTx64.EFI
boot
从 grub 选择菜单中进行选择后,将其放入默认的 grub.cfg 文件(NTFS 分区)(与 的 iso 映像中包含的默认文件相同)中Ubuntu 20.04.3 LTS Desktop 64-bit
,出现错误消息:
error: can't allocate initrd.
Press any key to continue...
我必须强调,NTFS 分区引导加载程序使用该chainloader
命令正确启动,否则我不会看到 grub 选择菜单,这是该initrd
命令给出的错误。
如果 grub.cfg 文件(FAT32 分区)包含:
search --no-floppy --set=root --fs-uuid 2E92F36515DD4A5A
configfile /boot/grub/grub.cfg
选择菜单后,一切正常,因此 initrd 命令不再给出错误。
initrd
运行 NTFS 分区引导加载程序以使用其中默认的 grub.cfg 文件进行引导有什么问题吗?
我已经测试过,如果分区 2 有 Windows,则chainloader
一切正常使用。
更新 1:
我尝试交换分区,错误仍然存在。
更新 2:
我想从initrd
命令中获取更详细的错误输出,但我不知道怎么做。
我努力了
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed nosplash debug ignore_loglevel ---
initrd /casper/initrd
但错误输出仍然相同,没有添加行。
更新 3:
总结并澄清我要做什么,我从 FAT32 分区对位于 NTFS 分区上的引导加载程序进行链式加载。
如果我直接从 BIOS 启动 NTFS 分区,一切正常,如果我从 FAT32 分区开始链式加载,则会出现问题。即使我使用命令而不是FAT32 分区文件内的命令
调用 grub.cfg(NTFS 分区)的菜单(我已经显示了其中包含的行),一切都会正常工作。configfile
chainloader
grub.cfg
更新 4:出于泛化原因,
我无论如何都会使用该chainloader
命令,甚至能够使用configfile
可以解决问题的命令,因为我有可能执行相同的命令来启动 Windows 和 Ubuntu 的分区。
更新 5:
该ntfs
模块已内置到两个分区的引导加载程序中。该lsmod
命令证实了这一点。无论如何,我都尝试插入两个分区的insmod ntfs
文件grub.cfg
,并且正如预期的那样,错误没有改变。
更新 6:
我不直接从 BIOS 启动 NTFS 分区,因为旧计算机上的 UEFI 无法直接读取 NTFS。
更新 7:
我发现一个错误!之前我没有注意到它,因为它只持续了几分之一秒。但是对于来自手机的视频,我必须将其设置为 60 fps 才能捕捉到错误,我将其录制下来,然后将其传输到 PC,从 PC 上截取了该视频片段的屏幕截图,然后将其旋转并用gimp裁剪。
错误如下:
error: can't find command `grub_platform`.
这是屏幕截图: