我正在使用 USB 驱动器安装 RHEL 6。它很好用,但每次我想使用电脑时,我都必须插入 USB。安装时,USB 为 sda,目标硬盘为 sdb。 GRUB 每次都会安装到 USB (sda)。那么,有没有办法安装 RHEL,将 GRUB 安装到 sdb(安装 RHEL 的目标)?我认为RHEL每次都会默认将其安装到sda。
谢谢您的帮助!
答案1
除非另有说明,GRUB 假定安装程序检测到的第一个磁盘也是系统固件检测到的第一个磁盘。在 CD 或网络安装中,这种启发式通常有效(除非您有多个存储控制器)。
但是,当您的安装介质是 USB 时,RHEL 6 安装程序会先检测它,然后再检测任何其他存储设备。如果您正在设置 kickstart 安装,您绝对可以告诉它写入引导加载程序/dev/sdb
。这是通过使用--driveorder
关键字选项来完成的bootloader
:如果您从 USB 启动安装程序,则必须指定将安装操作系统的磁盘作为驱动器顺序中的第一个磁盘,即
bootloader --location=mbr --driveorder=sdb,sda <...>
这里的逻辑可能感觉有点奇怪。这是因为该选项实际上是在尝试识别系统 BIOS 在引导已安装的系统时将哪个磁盘视为“第一个磁盘”,因为事实上 BIOS 选择引导磁盘的标准方法是将其放置为按 BIOS 看到的顺序排列的第一个磁盘。但是 --driveorder 选项必须使用安装时存在的 Linux 设备名称...这不一定与安装的系统运行时相同。
本质上,我们必须告诉安装程序“一旦系统安装并自行启动,现在/dev/sdb
将是第一个磁盘”。
这足以将引导加载程序成功安装到目标硬盘驱动器。但它也会给已安装的系统留下一个/boot/grub/device.map
文件,表明第一个磁盘将是/dev/sdb
...一旦系统在拔下 USB 驱动器的情况下启动,这很可能不再成立。如果/当您需要更新 GRUB 软件包时,这会困扰您,导致引导加载程序在升级后失败。
不过,解决方案很简单:如果您正在构建 USB 的 Kickstart 安装,只需设置一个安装后命令即可/boot/grub/device.map
在安装完成后删除该文件。它可以很简单:
%post
rm /boot/grub/device.map
%end
如果/boot/grub/device.map
不存在,该grub-install
命令将在下次运行时自动重新创建它......然后它将更有可能做出正确的选择。如果你想绝对确定,可以在安装完成并重新启动系统后验证情况,并/boot/grub/device.map
手动写入准确的文件。