私は古いカーネル(2.4.37.9)を持っており、initrdスクリプト内のカーネルに送信するためにroot = XXXXパラメータをオーバーライドまたは置き換えたいと思います。
いくつか試してみましたが、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
ルートがマウントされた部分を見つけてその部分を修正し、ハードディスクレイアウトを検出するスクリプトを追加し、正しいドライブをマウントすることです。
推奨される方法は、UUID
ルートドライブに設定し、その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メニューで、最初の2つの項目(デバイスhdaに対して0、デバイスhdcについて1)を保持しました。
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