GRUB Legacy
GRUB Legacy 是一个由 GNU 项目 维护的 multiboot 引导加载程序。它源自 GRUB,GRand Unified Bootloader,最初由 Erich Stefan Boleyn 设计和实现。
简而言之,引导加载程序是计算机启动时运行的第一个软件程序。它负责加载内核并将控制权转移给 Linux 内核。然后,内核初始化操作系统的其余部分。
支持的文件系统
GRUB legacy 捆绑了对多种文件系统的支持,特别是 FAT32、ext2、ReiserFS 或 XFS (尽管仅限 v4)。
/boot
,除非禁用不兼容的功能。这通常可以通过使用单独的 /boot 分区 和普遍支持的文件系统(如 FAT32)来解决。安装
GRUB Legacy 可以从 grub-legacyAUR 软件包安装。
此外,GRUB 必须安装到驱动器或分区 的引导扇区才能充当引导加载程序。这在 #引导加载程序安装 中介绍。
升级到 GRUB2
升级是必要的吗?
简短的回答是否定的。GRUB legacy 不会从您的系统中删除,并且将保持完全功能。
但是,与任何其他不再支持的软件包一样,错误不太可能得到修复。因此,您应该考虑升级到 GRUB 版本 2.x,或另一个受支持的 引导加载程序。
如何升级
从 GRUB Legacy 升级到 GRUB 版本 2.x 与在运行 Arch Linux 上安装 GRUB 非常相似。详细说明在此处介绍。
差异
- GRUB Legacy 和 GRUB 的命令存在差异。在继续操作之前,请熟悉 GRUB 命令(例如,“find”已被“search”替换)。
- GRUB 现在是模块化的,不再需要“stage 1.5”。因此,引导加载程序本身是有限的——模块根据需要从硬盘驱动器加载,以扩展功能(例如,用于 LVM 或 RAID 支持)。
- GRUB Legacy 和 GRUB 之间的设备命名已更改。分区编号从 1 而不是 0 开始,而驱动器编号仍然从 0 开始,并以分区表类型为前缀。例如,
/dev/sda1
将被称为(hd0,msdos1)
(对于 MBR) 或(hd0,gpt1)
(对于 GPT)。 - GRUB 明显比 GRUB legacy 大(在
/boot
中占用约 13 MB)。如果您从单独的/boot
分区启动,并且此分区小于 32 MB,您将遇到磁盘空间问题,并且 pacman 将拒绝安装新内核。
备份重要数据
虽然 GRUB 安装应该顺利进行,但强烈建议在升级到 GRUB v2 之前保留 GRUB Legacy 文件。
# mv /boot/grub /boot/grub-legacy
备份包含引导代码和分区表的 MBR(将 /dev/sdX
替换为您的实际磁盘路径)
# dd if=/dev/sdX of=/path/to/backup/mbr_backup bs=512 count=1
MBR 中只有 446 字节包含引导代码,接下来的 64 字节包含分区表。如果您不想在恢复时覆盖分区表,强烈建议仅备份 MBR 引导代码
# dd if=/dev/sdX of=/path/to/backup/bootcode_backup bs=446 count=1
如果无法正确安装 GRUB2,请参阅 #恢复 GRUB Legacy。
将 GRUB Legacy 的配置文件转换为新格式
如果 grub-mkconfig
失败,请使用以下命令将您的 /boot/grub/menu.lst
文件转换为 /boot/grub/grub.cfg
# grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg
例如
/boot/grub/menu.lst
default=0 timeout=5 title Arch Linux Stock Kernel root (hd0,0) kernel /vmlinuz-linux root=/dev/sda2 ro initrd /initramfs-linux.img title Arch Linux Stock Kernel Fallback root (hd0,0) kernel /vmlinuz-linux root=/dev/sda2 ro initrd /initramfs-linux-fallback.img
/boot/grub/grub.cfg
set default='0'; if [ x"$default" = xsaved ]; then load_env; set default="$saved_entry"; fi set timeout=5 menuentry 'Arch Linux Stock Kernel' { set root='(hd0,1)'; set legacy_hdbias='0' legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro' legacy_initrd '/initramfs-linux.img' '/initramfs-linux.img' } menuentry 'Arch Linux Stock Kernel Fallback' { set root='(hd0,1)'; set legacy_hdbias='0' legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro' legacy_initrd '/initramfs-linux-fallback.img' '/initramfs-linux-fallback.img' }
如果您忘记创建 GRUB /boot/grub/grub.cfg
配置文件,并且只是重启进入 GRUB 命令行 Shell,请键入
sh:grub> insmod legacycfg sh:grub> legacy_configfile ${prefix}/menu.lst
启动进入 Arch 并重新创建正确的 GRUB /boot/grub/grub.cfg
配置文件。
恢复 GRUB Legacy
- 移走 GRUB v2 文件
# mv /boot/grub /boot/grub.nonfunctional
- 将 GRUB Legacy 复制回
/boot
# cp -af /boot/grub-legacy /boot/grub
- 将 MBR 和 sda 的后 62 个扇区替换为备份副本
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1
更安全的方法是仅恢复 MBR 引导代码
# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1
配置
配置文件位于 /boot/grub/menu.lst
。编辑此文件以满足您的需求。
timeout #
-- 在自动加载default
操作系统之前等待的时间(以秒为单位)。default #
--timeout
过期时选择的默认启动项。
示例配置(/boot
在单独的分区上)随软件包提供。
查找 GRUB 的根目录
必须告知 GRUB 其文件在系统上的位置,因为可能存在多个实例(即,在多启动环境中)。GRUB 文件始终位于 /boot
下,/boot
可能位于专用分区上。
- 硬盘定义为 (hdX);这也指任何 USB 存储设备。
- 设备和分区编号从零开始。例如,BIOS 中识别的第一个硬盘将被定义为 (hd0)。第二个设备将被称为 (hd1)。这也适用于分区。因此,第一个硬盘上的第二个分区将被定义为 (hd0,1)。
如果您不知道 /boot
的位置,请使用 GRUB shell find
命令来查找 GRUB 文件。以 root 身份进入 GRUB shell
# grub
以下示例适用于没有单独 /boot
分区的系统,其中 /boot
只是 /
下的一个目录
grub> find /boot/grub/stage1
以下示例适用于有单独 /boot
分区的系统
grub> find /grub/stage1
GRUB 将找到该文件,并输出 stage1
文件的位置。例如
grub> find /grub/stage1
(hd0,0)
此值应输入到您的配置文件中的 root
行。键入 quit
退出 shell。
与 Windows 双启动
将以下内容添加到您的 /boot/grub/menu.lst
的末尾(假设您的 Windows 分区在第一个驱动器的第一个分区上)
/boot/grub/menu.lst
title Windows rootnoverify (hd0,0) makeactive chainloader +1
如果 Windows 位于另一个硬盘上,则必须使用 map
命令。这将使您的 Windows 安装认为它实际上在第一个驱动器上。假设您的 Windows 分区在第二个驱动器的第一个分区上
/boot/grub/menu.lst
title Windows map (hd0) (hd1) map (hd1) (hd0) rootnoverify (hd1,0) makeactive chainloader +1
与 GNU/Linux 双启动
这可以以定义 Arch Linux 安装的相同方式完成。例如
/boot/grub/menu.lst
title Other Linux root (hd0,2) kernel /path/to/kernel root=/dev/sda3 ro initrd /path/to/initrd
/boot/grub/menu.lst
以匹配启动选项,或参阅 #chainloader 和 configfile(推荐)。chainloader 和 configfile
为了方便系统维护,应使用 chainloader
或 configfile
命令来引导另一个提供“自动”GRUB 配置机制的 Linux 发行版(例如 Debian、Ubuntu、openSUSE)。这允许发行版管理其自己的 menu.lst
和启动选项。
chainloader
命令将加载另一个引导加载程序(而不是内核映像);如果另一个引导加载程序安装在分区的引导扇区中(例如 GRUB),则很有用。这允许将 GRUB 的“主”实例安装到 MBR,并将特定于发行版的 GRUB 实例安装到每个分区引导记录 (PBR)。
configfile
命令将指示当前运行的 GRUB 实例加载指定的配置文件。这可以用于加载另一个发行版的menu.lst
,而无需单独安装 GRUB。这种方法的缺点是,其他menu.lst
可能与已安装的 GRUB 版本不兼容;某些发行版大量修补其 GRUB 版本。
例如,GRUB 将安装到 MBR,并且一些其他引导加载程序(无论是 GRUB 还是 LILO)已安装到 (hd0,2)
的引导扇区。
--------------------------------------------- | | | | % | | M | | | B % | | B | (hd0,0) | (hd0,1) | L % (hd0,2) | | R | | | % | | | | | % | --------------------------------------------- | ^ | chainloading | -----------------------------
可以简单地在 menu.lst
中包含
title Other Linux root (hd0,2) chainloader +1
或者,如果 (hd0,2)
上的引导加载程序是 GRUB
title Other Linux root (hd0,2) configfile /boot/grub/menu.lst
chainloader
命令也可以用于加载第二个驱动器的 MBR
title Other drive rootnoverify (hd1) chainloader +1
与 GNU/Linux (GRUB2) 双启动
如果另一个 Linux 发行版使用 GRUB2(例如 Ubuntu 9.10+),并且您将其引导加载程序安装到其根分区,则可以将如下条目添加到您的 /boot/grub/menu.lst
/boot/grub/menu.lst
# other Linux using GRUB2 title Ubuntu root (hd0,2) kernel /boot/grub/core.img
在启动时选择此条目将加载另一个发行版的 GRUB2 菜单,假设该发行版安装在 /dev/sda3
上。
引导加载程序安装
手动恢复 GRUB 库
*stage*
文件应位于 /boot/grub
中,如果引导加载程序未在系统安装期间安装,或者分区/文件系统损坏、意外删除等,则可能不是这种情况。
手动复制 GRUB 库,如下所示
# cp -a /usr/lib/grub/i386-pc/* /boot/grub
关于引导加载程序安装的通用说明
GRUB 可以从单独的介质(例如 LiveCD)安装,也可以直接从正在运行的 Arch 安装安装。很少需要重新安装 GRUB,并且在以下情况下不需要安装
- 配置文件已更新。
- grub-legacyAUR 软件包已更新。
在以下情况下需要安装
- 尚未安装引导加载程序。
- 另一个操作系统覆盖了 Linux 引导加载程序。
- 引导加载程序由于某些未知原因而失败。
在继续之前,请注意以下几点
- 在继续操作之前,请确保您的 GRUB 配置正确 (
/boot/grub/menu.lst
)。请参阅 查找 GRUB 的根目录 以确保您的设备定义正确。 - GRUB 必须安装在 MBR(硬盘的第一个扇区)或大多数 BIOS 识别的第一个存储设备的第一个分区上。为了允许各个发行版管理其自己的 GRUB 菜单,可以使用 GRUB 的多个实例,请参阅 #chainloader 和 configfile。
- 对于 RAID 配置等情况,或者如果您忘记/损坏了 GRUB 安装,可能需要从
chroot
环境中(即,通过单独的介质从已安装的环境中)安装 GRUB。您将需要从 LiveCD 或另一个 Linux 安装 切换 root 才能执行此操作。
首先,进入 GRUB shell
# grub
使用 root
命令和 find
命令的输出(请参阅 #查找 GRUB 的根目录)来指示 GRUB 哪个分区包含 stage1(因此,/boot
)
grub> root (hd1,0)
Tab
两次,您将看到可用的存储设备,分区也可以这样做。Tab 补全也适用于 GRUB 启动菜单。如果您的配置文件中存在错误,您可以在启动菜单中编辑,并使用 Tab 补全来帮助查找设备和分区。请参阅 #在启动菜单中编辑 GRUB 条目。安装到 MBR
以下示例将 GRUB 安装到第一个驱动器的 MBR
grub> setup (hd0)
安装到分区
以下示例将 GRUB 安装到第一个驱动器的第一个分区
grub> setup (hd0,0)
运行 setup
后,输入 quit
退出 shell。如果您已 chroot,退出您的 chroot 并卸载分区。现在重启进行测试。
替代方法 (grub-install)
使用 grub-install
命令,后跟安装引导加载程序的位置。例如,要将 GRUB 安装到第一个驱动器的 MBR
# grub-install /dev/sda
GRUB 将指示是否成功安装。如果未成功安装,您将必须使用 GRUB shell 方法。
技巧与提示
帧缓冲分辨率
可以使用 menu.lst
中给出的分辨率,但您可能希望以 LCD 宽屏的全分辨率使用它。以下是您可以执行此操作的方法
在 Wikipedia 上,有一个扩展帧缓冲分辨率列表(即超出 VBE 标准中的分辨率)。
如果所需分辨率不适用于从表中获得的代码,通常是因为显卡制造商可以自由选择他们想要的任何数字,因为这不属于 VBE 3 标准的一部分。这些代码可能因卡而异(甚至可能对于同一制造商)。
与其使用该表,不如使用下面提到的工具之一来获取正确的代码
GRUB 识别的值
这是一种仅使用 GRUB 本身即可轻松查找分辨率代码的方法。
在内核行上,指定内核应询问您要使用的模式。
kernel /vmlinuz-linux root=/dev/sda1 ro vga=ask
现在重启。GRUB 现在将显示一个适合使用的代码列表,以及扫描更多代码的选项。
您可以选择您想要使用的代码(不要忘记它,下一步需要它),并使用它启动。
现在将内核行中的 ask
替换为您选择的正确代码。
例如,[369] 1680x1050x32
的内核行将是
kernel /vmlinuz-linux root=/dev/sda1 ro vga=0x369
hwinfo
- 安装 hwinfo 软件包。
- 以 root 身份运行
hwinfo --framebuffer
。 - 选择与所需分辨率对应的代码。
- 在
menu.lst
中使用带有 0x 前缀的 6 位代码作为vga=
内核选项。或者将其转换为十进制以避免使用 0x 前缀。
hwinfo 的示例输出
Mode 0x0364: 1440x900 (+1440), 8 bits Mode 0x0365: 1440x900 (+5760), 24 bits
以及内核行
kernel /vmlinuz-linux root=/dev/sda1 ro vga=0x0365
分区命名
按标签
如果您不时更改(或计划更改)分区大小,您可能需要考虑按标签定义驱动器/分区。您可以按以下方式标记 ext2、ext3、ext4 分区
e2label /dev/drive|partition label
标签名称最多可以包含 16 个字符,但不能有空格,以便 GRUB 可以理解它。然后在您的 menu.lst
中定义它
kernel /boot/vmlinuz-linux root=/dev/disk/by-label/Arch_Linux ro
按 UUID
分区的 UUID(通用唯一标识符)可以使用 blkid
或 ls -l /dev/disk/by-uuid
发现。它在 menu.lst
中定义为
kernel /boot/vmlinuz-linux root=/dev/disk/by-uuid/uuid_number
或
kernel /boot/vmlinuz-linux root=UUID=uuid_number
以 root 身份启动 (单用户模式)
在引导加载程序处,选择一个条目并编辑它(e
键)。将以下参数附加到内核选项
[...] single init=/bin/bash
这将以单用户模式(init 1)启动,即您将最终进入 root 提示符,而无需询问密码。这可能对恢复功能很有用,例如重置 root 密码。但是,如果您没有为 grub 设置任何 #密码保护,这是一个巨大的安全漏洞。
密码保护
您可以在 GRUB 配置文件中为您希望保护的操作系统启用密码保护。如果您的 BIOS 缺少此功能并且您需要额外的安全性,则可能需要引导加载程序密码保护。
首先,选择您可以记住的密码,然后对其进行加密
# grub-md5-crypt
Password: Retype password: $1$ZOGor$GABXUQ/hnzns/d5JYqqjw
然后将您的密码添加到 /boot/grub/menu.lst
的 GRUB 配置文件的开头(密码必须位于配置文件的开头,GRUB 才能识别它)
# general configuration timeout 5 default 0 color light-blue/black light-cyan/blue password --md5 $1$ZOGor$GABXUQ/hnzns/d5JYqqjw
然后,对于您希望保护的每个操作系统,添加 lock
命令
# (0) Arch Linux title Arch Linux lock root (hd0,1) kernel /boot/vmlinuz-linux root=/dev/disk/by-label/Arch_Linux ro initrd /boot/initramfs-linux.img
始终可以通过设置主板上的相应跳线来重置 BIOS 设置(请参阅您的主板手册,因为它特定于每个型号)。因此,如果其他人可以访问硬件,则基本上无法阻止启动突破。
使用命名启动选项重启
如果您意识到您经常需要切换到某些其他非默认操作系统(例如 Windows),则必须重启并等待 GRUB 菜单出现是很乏味的。GRUB 提供了一种在重启时记录您的操作系统选择的方法,而不是等待菜单,方法是指定一个新的临时默认值,该默认值将在使用后立即重置。
假设一个简单的 menu.lst
设置,如下所示
/boot/grub/menu.lst
# general configuration: timeout 10 default 0 color light-blue/black light-cyan/blue # (0) Arch title Arch Linux root (hd0,1) kernel /boot/vmlinuz-linux root=/dev/disk/by-label/ARCH ro initrd /boot/initramfs-linux.img # (1) Windows title Windows XP rootnoverify (hd0,0) makeactive chainloader +1
Arch 是默认值 (0)。我们想要重启进入 Windows。将 default 0
更改为 default saved
-- 这将在每次使用 savedefault 命令时将当前默认值记录在 GRUB 目录中的 default
文件中。现在将行 savedefault 0
添加到 Windows 条目的底部。每当 Windows 启动时,它都会将默认值重置为 Arch,从而使将默认值更改为 Windows 成为临时的。
现在,所有需要的是一种轻松手动更改默认值的方法。这可以使用命令 grub-set-default
完成。因此,要重启进入 Windows,请输入以下命令
# grub-set-default 1
然后重启。
为了易于使用,您可能希望设置 sudo 并将 /sbin/grub-set-default
添加到用户无需提供密码即可发出的命令中。
LILO 和 GRUB 交互
如果您的系统上安装了 LILO 软件包,请卸载它。因为某些任务(例如使用 make all
的内核编译)将进行 LILO 调用,然后 LILO 将安装在 GRUB 之上。根据您的安装程序介质版本以及您在软件包选择阶段是否选择/取消选择它,LILO 可能已包含在您的基本系统中。
GRUB 启动盘
首先,格式化软盘
# fdformat /dev/fd0 # mke2fs /dev/fd0
现在挂载磁盘
# mount -t ext2 /dev/fd0 /mnt/fl
将 GRUB 安装到磁盘
# grub-install --root-directory=/mnt/fl '(fd0)'
将您的 menu.lst
文件复制到磁盘
# cp /boot/grub/menu.lst /mnt/fl/boot/grub/menu.lst
现在卸载您的软盘
# umount /mnt/fl
现在您应该能够使用驱动器中的磁盘重启您的计算机,它应该启动到 GRUB。当然,请确保在 BIOS 中将您的软盘设置为比硬盘驱动器具有更高的启动优先级。
另请参阅:Super GRUB Disk。
hiddenmenu
选项可用于默认情况下隐藏菜单。这样就不会显示菜单,并且在超时过去后会自动选择默认选项。不过,您可以按 Esc
,菜单就会显示出来。要使用它,只需添加到您的 /boot/grub/menu.lst
hiddenmenu
故障排除
GRUB 错误 17
要做的第一个检查是拔下任何外部驱动器。看起来很明显,但有时我们很累 ;)
如果您的分区表搞砸了,那么令人不快的“GRUB error 17”消息可能是您下次重启时迎接您的唯一内容。分区表可能搞砸的原因有很多。通常,使用 GParted 操作分区的用户——尤其是逻辑驱动器——可能会导致分区顺序发生变化。例如,您删除 /dev/sda6
并调整 /dev/sda7
的大小,然后最终重新创建曾经是 /dev/sda6
的内容,但现在它出现在列表的底部,例如 /dev/sda9
。虽然分区/逻辑驱动器的物理顺序没有改变,但它们被识别的顺序发生了变化。
修复分区表很容易。从您的 Arch CD/DVD/USB 启动,以 root 身份登录并修复分区表
# fdisk /dev/sda
进入磁盘后,进入 e[x]tra/专家模式,[f]ix 分区顺序,然后 [w]rite 表并退出。
您可以通过发出 fdisk -l
来验证分区表是否确实已修复。现在您只需要修复 GRUB。请参阅 #引导加载程序安装。
基本上,您需要告诉 GRUB 您的 /boot
的正确位置,然后将 GRUB 重新写入磁盘上的 MBR。
例如
# grub
grub> root (hd0,6) grub> setup (hd0) grub> quit
有关本节更深入的摘要,请参阅 [1]。
/boot/grub/stage1 未正确读取
如果您在尝试设置 GRUB 时看到此错误消息,并且您没有使用新的分区表,则值得检查一下。
# fdisk -l /dev/sda
这将显示 /dev/sda
的分区表。因此,请在此处检查您的分区的“Id”值是否正确。“System”列将显示“Id”值的描述。
例如,如果您的引导分区被标记为“HPFS/NTFS”,则您必须将其更改为“Linux”。为此,请转到 fdisk,
# fdisk /dev/sda
使用 t
更改分区的系统 ID,选择您的分区号并键入新的系统 ID(Linux = 83)。您还可以通过键入 L
而不是系统 ID 来列出所有可用的系统 ID。
如果你更改了分区系统 ID,你应该[v]验证你的分区表,然后[w]写入它。
现在尝试重新设置 GRUB。
另请参阅论坛帖子,其中报告了这个问题。
意外安装到 Windows 分区
如果你意外地将 GRUB 安装到 Windows 分区,GRUB 会将一些信息写入该分区的引导扇区,从而擦除对 Windows 引导加载程序的引用。(对于 Windows XP 及更早版本的引导加载程序 NTLDR 来说是这样,不确定更高版本的情况)。
要修复此问题,你需要使用适用于你的 Windows 版本的 Windows 恢复控制台。由于许多计算机制造商的产品中不包含此工具(许多制造商选择使用恢复分区),Microsoft 提供了下载版本。如果你使用 XP,请查看此页面,了解如何将软盘转换为恢复光盘。启动恢复光盘(或启用 Windows 恢复模式)并运行 fixboot
来修复分区引导扇区。完成此操作后,你将需要再次安装 GRUB——这次安装到 MBR,而不是 Windows 分区——才能启动 Linux。
有关更多信息,请参阅双启动 Windows#恢复 Windows 引导记录。
一旦你在启动菜单中选择了一个条目,你可以通过按键 e
来编辑它。如果你需要发现设备,请使用 Tab 补全,然后按 Esc
退出。之后你可以尝试按 b
启动。
device.map 错误
如果在安装或启动期间出现提及 /boot/grub/device.map
的错误,请运行
# grub-install --recheck /dev/sda
以强制 GRUB 重新检查设备映射,即使它已经存在。这在调整分区大小或添加/删除驱动器后可能是必要的。
如果你打开了一个子菜单,其中列出了 GRUB 中配置的所有操作系统,选择了一个,但在重启后,你仍然启动了默认操作系统,那么你可能需要检查你是否具有以下行
default saved
在 /boot/grub/menu.lst
中。
GRUB 无法找到或安装到任何 virtio /dev/vd* 或其他非 BIOS 设备
在使用 virtio 设备作为硬盘的虚拟 KVM 机器中安装 Arch Linux 时,我在安装 GRUB 时遇到了问题。为了安装 GRUB,我找到了以下方法:通过键入 Ctrl+Alt+F2
或任何其他 F 键进入虚拟控制台。这假设你的根文件系统挂载在 /mnt
文件夹中,而引导文件系统挂载或存储在 /mnt/boot
文件夹中。
1. 确保所有需要的 GRUB 文件都存在于你的引导目录中(假设它挂载在 /mnt/boot
文件夹中),通过发出以下命令
# ls /mnt/boot/grub
2. 如果 /mnt/boot/grub
文件夹已经包含所有需要的文件,请跳到步骤 3。否则,执行以下命令(将 /mnt
、your_kernel
和 your_initrd
替换为实际路径和文件名)。你应该也将 menu.lst
文件写入到此文件夹
# mkdir -p /mnt/boot/grub # if the folder is not yet present # cp -r /boot/grub/stage1 /boot/grub/stage2 /mnt/boot/grub # cp -r your_kernel your_initrd /mnt/boot
3. 使用以下命令启动 GRUB shell
# grub --device-map=/dev/null
4. 输入以下命令。将 /dev/vda
和 (hd0,0)
替换为与你的设置相对应的正确设备和分区。
device (hd0) /dev/vda root (hd0,0) setup (hd0) quit
5. 如果 GRUB 没有报告错误消息,那么你可能就完成了。你还需要向 ramdisk 添加适当的模块。有关更多信息,请参阅QEMU#准备 Arch Linux 虚拟机。
另请参阅
- GNU GRUB
- GRUB Grotto
- 启动调试 - 使用 GRUB 进行调试,设置模块值
- 使用 GRUB 启动(传统模式)