나는 이전 커널(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 메뉴에서 처음 두 항목(장치 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