我有一个旧内核( 2.4.37.9 ),我想覆盖或替换 root=XXXXX 参数以发送到 initrd 脚本内的内核。
我已经做了一些尝试,但似乎在 initrd grub 结束时总是将 menu.lst 文件中定义的根参数传递给内核,而我尝试定义一个动态值(例如 hda1 或 hdc1 )取决于主板的布局。
title Linux-2.4.37.9_CCL_20130122 with INITRD
root (hd0,0)
kernel /boot/vmlinuz-2.4.37.9_CCL_20130122 ro root=XXXXXX console=ttyS0,9600 console=tty0 apm=off
initrd /boot/initrd-CCL.img.gz
有什么建议 ?
答案1
不可以,不支持。
你可以做的就是解压initrd /boot/initrd-CCL.img.gz
,找到挂载root的部分,并修改相应的部分,添加检测硬盘布局的脚本,并挂载正确的驱动器。
推荐的方法是UUID
为您的根驱动器设置 a ,并将该root=
部分更改root=UUID=XXX
为 ,我不确定旧发行版是否支持它。这样,无论设备布局如何变化,它总是安装正确的设备。
答案2
这不是解决这个问题的更礼貌的解决方案,但它有效,并且 mybe 应该对其他人有帮助,所以我在这里简要描述我如何解决我的问题,让 DOM 能够自动更改它的启动设备。
在 linuxrc 内,initrd 的脚本中,我检测到该设备可用,并根据该结果设置 grub 使用的默认启动选项
我的 linuxrx 我是这样的
#!/bin/ash
restart=0
mntdev=""
target="hda"
echo "--> check fdisk ${target} "
mount -t ext2 /dev/${target}1 /mnt/tmp
if [ -f /mnt/tmp/etc/slackware-release ]; then
echo "Found $target "
mntdev="/dev/${target}1"
olddef=$( cat /mnt/tmp/boot/grub/default )
if [ $olddef -ne 0 ]; then
echo "0" > /mnt/tmp/boot/grub/default
restart=1
fi
fi
umount /mnt/tmp
# ================================
if [ -z $dskroot ]; then
target="hdc"
echo "--> check fdisk ${target} "
mount -t ext2 /dev/${target}1 /mnt/tmp
if [ -f /mnt/tmp/etc/slackware-release ]; then
echo "Found $target "
mntdev="/dev/${target}1"
olddef=$( cat /mnt/tmp/boot/grub/default )
if [ $olddef -ne 1 ]; then
echo "1" > /mnt/tmp/boot/grub/default
restart=1
fi
fi
umount /mnt/tmp
fi
# ================================
if [ $restart -eq 1 ]; then
echo "Changed grub default : Rebooting PC "
echo "===================================="
sleep 2
mount -t ext2 $mntdev /mnt/tmp
chroot /mnt/tmp <<EOF
/sbin/reboot -f
EOF
fi
在 grub 菜单中,我保留了前两个条目,0 表示设备 hda,1 表示设备 hdc
default saved
title Linux-2.4.37.9_CCL_20130122 with INITRD hda pos 0
root (hd0,0)
kernel /boot/vmlinuz-2.4.37.9_CCL_20130122 ro root=/dev/hda1 console=ttyS0,9600 console=tty0 apm=off
initrd /boot/initrd-CCL.img.gz
title Linux-2.4.37.9_CCL_20130122 with INITRD hdc pos 1
root (hd0,0)
kernel /boot/vmlinuz-2.4.37.9_CCL_20130122 ro root=/dev/hdc1 console=ttyS0,9600 console=tty0 apm=off
initrd /boot/initrd-CCL.img.gz