我在便携式 USB 记忆棒上安装了 CentOS,并在其第一个分区上安装了 grub2。当机器没有插入内部硬盘驱动器时,系统可以启动,但如果插入任何硬盘驱动器,系统就会失败。
我希望我的操作系统(在 USB 记忆棒上运行)安装为 /dev/sda,并且任何其他内部硬盘驱动器都从 /dev/sdb 进行标记。我使用分区标签来映射到我的 /boot、/root、/home 和 /swap。内部驱动器似乎显示为 sda,因此我在启动时遇到了内核恐慌。
lsblk -f
NAME FSTYPE LABEL
sda
|___sda1
sdb
|___sdb1 hfsplus DISK_1
|___sdb2 ext4 USB_root
|___sdb3 ext4 USB_home
|___sdb4 swap USB_swap
我有udev 规则内部驱动器从 /sdb 开始编号,但这些规则似乎稍后在启动顺序中应用,因此应为 sdb 的内部磁盘被初始化为 sda。
我的/boot/grub.conf如下:
default=0
timeout=5
chainloader +1
#splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.10.65-1.el6.elrepo.x86_64)
#root (hd0,0)
search --set --label USB_boot
kernel /vmlinuz-3.10.65-1.el6.elrepo.x86_64 ro root=LABEL=USB_root nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=uk LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rootdelay=8
initrd /usbinitrd-3.10.65-1.el6.elrepo.x86_64.img
我的 usbinitrd 是按照以下说明创建的这里
- 是否可以在任何内部驱动器之前将外部 USB 驱动器启动初始化为 sda?
- 我是否应该将我的 USB 设备和 grub 配置映射到 /sdu 之类的东西,这样它就不会与内部驱动器命名冲突?
答案1
这似乎是启动时的一个计时问题 - grub.conf 中内核选项的 rootdelay=8 已更改为 rootdelay=10,现在一切都按预期工作。机器在开始启动时似乎尚未发现 USB 记忆棒上的所有分区。
我创建了另一个 udev 规则,使用 udevadm 找到的 MANUFACTURER 标签将我的 USB 记忆棒映射到 /dev/sdu,一切都很好。