Fedoraのrescueイメージとカーネルを更新する方法

Computer, Linux 6月 10, 2015 #Fedora
(Last Updated On: 2023年3月7日)

Fedoraもfedupを使って簡単に更新できるようになって便利になりました。しかし、システムにインストールされているrescueイメージとカーネルが古くなっても更新されません。さすがにFedora22でFedora18頃のrescueイメージとかカーネルでは怖いので更新方法を調べてみました。

Fedora 36頃のrescueカーネルの更新方法

Fedoraインストーラが使うdracutのrescueカーネルインストールスクリプトを使う方法が最もお勧めです。以下のコマンドで現在使用中のカーネルがrescueカーネルに設定されます。

sudo rm /boot/*rescue*
sudo /usr/lib/kernel/install.d/51-dracut-rescue.install add "$(uname -r)" /boot  "/boot/vmlinuz-$(uname -r)"

以降、古い情報 − 現在のFedoraのrescueカーネルの更新方法

現在(2021年6月現在)のFedoraのrescueカーネルの更新はcpでコピーするだけなので簡単です。しかし、コマンドは用意されていません。

/boot の中にブート用のファイルシステムイメージ (/boot/initramfs-*)とカーネル(/boot/vmlinuz-*)があります。

  • initramfs-0-rescue-<HEXのホストID>.img
  • vmlinuz-0-rescue-<HEXのホストID>.img

これを更新したいカーネルのinitramfs(例、/boot/initramfs-5.11.21-300.fc34.x86_64.imgなど)とvmlinuz(例、/boot/vmlinuz-5.11.21-300.fc34.x86_64など)に置き換えるだけでrescueイメージとカーネルを更新できます。同一のカーネルバージョンのモノを使うのがポイントです。

以降、更に古い情報 ー TL;DR;

Fedoraのrescueイメージとカーネルの更新方法

# dnf install dracut-config-rescue
# mv /boot/*0-rescue* .
# /etc/kernel/postinst.d/51-dracut-rescue-postinst.sh $(uname -r) /boot/vmlinuz-$(uname -r)
# grub2-mkconfig -o /boot/grub2/grub.cfg

51-dracut-rescue.installを使った方が良いのかも知れませんが、私の使い方ではこれで十分です。

調べた手順

dracutに更新用のオプションがあるのだろう、と思って調べてみると–no-hostonlyオプションが使えそうです。

システムをクリーンインストールすると勝手にrescueイメージとカーネルが作られるので何かパッケージがあるのだろう、と思って見てみると

# rpm -qa | grep dracut
dracut-041-10.fc22.1.x86_64
dracut-config-rescue-041-10.fc22.1.x86_64
dracut-network-041-10.fc22.1.x86_64

config rescueというそれらしきパッケージがあります。

[root@dev ~]# rpm -ql dracut-config-rescue
/etc/kernel/postinst.d/51-dracut-rescue-postinst.sh
/usr/lib/dracut/dracut.conf.d/02-rescue.conf
/usr/lib/kernel/install.d/51-dracut-rescue.install

51-dracut-rescue-postinst.shの中身を見てみると

if [[ ! -f $INITRDFILE ]]; then
    dracut --no-hostonly -a "rescue" "$INITRDFILE" "$KERNEL_VERSION"
    ((ret+=$?))
fi

となっているのでこれがrescue用のinitramfsとkernelを作っているようです。ファイル名で検索すると

https://ask.fedoraproject.org/en/question/40409/cant-boot-into-rescue-mode-how-to-re-generate-initramfs/

が見つかり、とすれば良いと書いてあります。

/etc/kernel/postinst.d/51-dracut-rescue-postinst.sh $(uname -r) /boot/vmlinuz-$(uname -r)

が、実行しても何も起きません。そこでファイルの中身をもう一度見てみると

INITRDFILE="/boot/initramfs-0-rescue-${MACHINE_ID}.img"
NEW_KERNEL_IMAGE="${KERNEL_IMAGE%/*}/vmlinuz-0-rescue-${MACHINE_ID}"

[[ -f $INITRDFILE ]] && [[ -f $NEW_KERNEL_IMAGE ]] && exit 0

とファイルが存在すると何もしません。

mv /boot/*0-rescue* .

と実行すると、rescueイメージとカーネルが更新されました。

[root@dev ~]# ll /boot/
合計 136076
-rw-------  1 root root  3054410  5月 22 01:05 System.map-4.0.4-201.fc21.x86_64
-rw-------  1 root root  3054410  5月 28 07:38 System.map-4.0.4-202.fc21.x86_64
-rw-------  1 root root  3052614  5月 28 21:43 System.map-4.0.4-303.fc22.x86_64
-rw-r--r--  1 root root   154671  5月 22 01:05 config-4.0.4-201.fc21.x86_64
-rw-r--r--  1 root root   154671  5月 28 07:38 config-4.0.4-202.fc21.x86_64
-rw-r--r--  1 root root   154760  5月 28 21:43 config-4.0.4-303.fc22.x86_64
drwxr-xr-x. 4 root root     1024  6月  7 10:08 efi
-rw-r--r--  1 root root   184380 10月 21  2014 elf-memtest86+-5.01
drwxr-xr-x. 2 root root     3072  6月  7 09:55 extlinux
drwxr-xr-x. 6 root root     1024  6月 10 11:39 grub2
-rw-r--r--  1 root root 48387855  6月 10 11:39 initramfs-0-rescue-3baa48a2b0a34432b5395a8c61f24e6c.img
-rw-r--r--  1 root root 18323504  6月  1 11:57 initramfs-4.0.4-201.fc21.x86_64.img
-rw-r--r--  1 root root 18405970  6月  5 20:58 initramfs-4.0.4-202.fc21.x86_64.img
-rw-r--r--  1 root root 20049897  6月  7 10:21 initramfs-4.0.4-303.fc22.x86_64.img
-rw-r--r--. 1 root root   565143  6月  7 10:21 initrd-plymouth.img
drwx------. 2 root root    12288  6月  2  2014 lost+found
-rw-r--r--  1 root root   182704 10月 21  2014 memtest86+-5.01
-rwxr-xr-x  1 root root  5897880  6月 10 11:39 vmlinuz-0-rescue-3baa48a2b0a34432b5395a8c61f24e6c
-rwxr-xr-x  1 root root  5894088  5月 22 01:05 vmlinuz-4.0.4-201.fc21.x86_64
-rwxr-xr-x  1 root root  5894600  5月 28 07:38 vmlinuz-4.0.4-202.fc21.x86_64
-rwxr-xr-x  1 root root  5897880  5月 28 21:43 vmlinuz-4.0.4-303.fc22.x86_64

リブートするとGrub2のメニューが更新されていなかったので

grub2-mkconfig -o /boot/grub2/grub.cfg

としてメニューを更新しました。

試しにrescueイメージでブートしてみました。ブートできましたが普通にホストのファイルシステムを使ってGUIで立ち上がりました。あれ?と思ってVMwareにインストールしてあるFedora22で試しても同じだったので、今時のrescueイメージはインストールしてあるファイルシステムから起動できるなら起動してしまうようです。少なくとも、カーネルのバグでブートできないという場合(実際、kernel 3.18.4から4.0.3まで安定的にブートできない問題があった)でも消されない古いカーネルイメージがあると安心です。

投稿者: yohgaki