diary/Kojima

○Plamo-7.1のinitrd対応について

従来、Plamo Linuxでは、起動回りの処理を簡単にするため、initrd は使わないようにしていました。

しかしながら、昨今のカーネルの多機能化や周辺機器の多様化に伴ない、 カーネルにどのドライバを組み込んでいいのかがよく分からなくなってきたため(苦笑)、 Plamo-7.1からはHDD等のブロックデバイスやファイルシステム回りのドライバはinitrd経由で組み込むようにしました。

使用するinitrdは、initrd.img-<kernel_vers>_plamo64 という名前で、 インストールするカーネルパッケージ(Plamo-7.1ではkernel-4.19.35-x86_64-B1.txz)に 収めています。

# tar tvf kernel-4.19.35-x86_64-B1.txz
drwxr-xr-x root/root         0 2019-04-25 11:37:25 boot/
-rwxr-xr-x root/root   4048671 2019-04-25 11:37:00 boot/System.map-.19.35_plamo64
-rwxr-xr-x root/root    221794 2019-04-25 11:37:00 boot/config-4.19.35_plamo64
-rwxr-xr-x root/root   6862720 2019-04-25 11:37:00 boot/vmlinuz-4.19.35_plamo64
-rwxr-xr-x root/root  17596355 2019-04-25 11:37:00 boot/initrd.img-4.19.35_plamo64
drwxr-xr-x root/root         0 2019-04-25 11:33:18 lib/
drwxr-xr-x root/root         0 2019-04-25 11:33:18 lib/modules/
drwxr-xr-x root/root         0 2019-04-25 11:37:25 lib/modules/4.19.35-plamo64/
drwxr-xr-x root/root         0 2019-04-25 11:36:55 lib/modules/4.19.35-plamo64/kernel/
drwxr-xr-x root/root         0 2019-04-25 11:33:19 lib/modules/4.19.35-plamo64/kernel/arch/
....

initrd を起動時に読み込ませるには grub.cfg に設定が必要なものの、 付属の grub-mkconfig でgrub.cfgを作れば、 カーネルのバージョンに適合したinitrdイメージを自動的に見つけて登録してくれるので、 特に何もする必要はありません。

grub.cfg(MBRの場合は /boot/grub/grub.cfg, UEFIの場合は/boot/efi/grub/grub.cfg) の該当箇所は、以下のようになります。なお、root=UUID=... の部分は、 環境ごとに異なります。

   echo    'Loading Linux 4.19.35_plamo64 ...'
   linux   /boot/vmlinuz-4.19.35_plamo64 root=UUID=47749fa2-16d6-4b5a-bb44-9538e8605ac3 ro  net.ifnames=0 quiet
   echo    'Loading initial ramdisk ...'
   initrd  /boot/initrd.img-4.19.35_plamo64

このgrub.cfgから起動すると、画面に一瞬、以下のような grub の起動メッセージが表示され、

Loading Linux 4.19.35_plamo64 ...
Loading initial ramdisk ...

その画面がクリアされると initrd のメッセージが表示され、

mdadm: No arrays found in config file or automatically
Successfully mounted device UUID==47749fa2-16d6-4b5a-bb44-9538e8605ac3

その後、init の起動メッセージが表示される、という順番になります。

Init version 2.88 booting
  *  Mounting virtual file systems: /run                            [OK]
  *  Bring up the loopback interface...                             [OK]
  *  Setting hostname to plamolinux.linet.jp...                     [OK]
     Populating /dev with device nodes...

起動処理はこういうステップで進むはずですが、もし途中で、

 "The device XXX, which is supposed to contain the
  root file system, does not exist.
  Please fix this problem and exit this shell."

とか

"Could not mount device XXXX
 Sleeping forever. Please reboot and fix the kernel command line."

みたいなエラーが出て止まってしまう場合は、 何らかの理由で initrd が本来のroot filesystemをマウントできていません。 この種のエラーの多くは環境依存なため手元での再現が難しいものの、 機器構成等を報告いただければ、可能な限り対応します。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:43