カーネル/grub:initrdスクリプトでルートパラメータをオーバーライドする方法

カーネル/grub:initrdスクリプトでルートパラメータをオーバーライドする方法

私は古いカーネル(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

関連情報