Linuxコマンド辞典 dracutコマンド(カーネル)
initramfsを作成する(Red Hat系)「dracut」コマンドの概要と使い方を記載しています。
RHEL Fedora CentOS
概要・使用方法
書式
$ dracut [オプション] [イメージファイル名 カーネルバージョン]
初期RAMディスク(initramfs)を作成します。初期RAMディスクとは、システム起動時に使われる暫定的なルートファイルシステムで、カーネルを読み込むのに必要なデバイスドライバなどが含まれます。また、initramfsとは「INITial Ram File System」の略で、システム起動時に必要なカーネルドライバやコマンドなどを収めたファイルシステムです。ブートする際にカーネルはこのinitramfsを展開し、最初のルートファイルシステムとして利用します。このシステム上でストレージのファイルシステムをマウントしてカーネルドライバにアクセスできるようにします。比較的新しいデバイスを利用する場合は、ブートするカーネルがそのデバイスを利用できる必要があります。カーネルモジュールとして用意している場合は、ストレージをマウントできないとモジュールを読み込むことができません。この場合は、initramfsを作成してブート時に利用することで解決できます。
カーネルバージョン番号を指定しない場合は、稼働しているカーネルバージョンを利用します。initramfsは特にオプションで指定しない場合、/boot/initramfs-カーネルバージョン.imgに書き込みます。既に同じファイル名が存在する際は、–forceオプションを指定することで上書きできます。
dracutはこれまでのinitramfs作成に加え、カスタイマイズ可能なフレームワークとしての機能もあります。/usr/lib/dracut以下にモジュールを用意し、それを実行時に呼び出すことで柔軟にカスタイマイズしたinitramfsを作成できます。利用するdracutモジュールや、特別に追加したいカーネルドライバがある場合は、コマンドラインオプションでも指定できますが、/etc/dracut/dracut.confや/etc/dracut/dracut.conf.d/以下の設定ファイルにもそれらを指定できます。
オプション
-f –force | 強制的に処理を進める |
–list-modules | 利用可能なdracutモジュールを一覧表示する |
-M –show-modules | 実行時に読み込んだdracutモジュールを出力する |
-m モジュール名 –modules モジュール名 | /usr/lib/dracut/modules.d配下にあるdracutモジュールを、initramfs作成時に実行する。 複数指定する場合は空白で区切り、「モジュール1 モジュール2」のように指定する |
-o モジュール名 –omit モジュール名 | 指定すたdracutモジュールの実行を行わない。複数指定する場合は空白で区切る |
-a モジュール名 –add モジュール名 | 指定したdracutモジュールをデフォルトで実行するように指定する。複数指定する場合は空白で区切る |
-d カーネルドライバ –drivers カーネルドライバ | 指定したカーネルドライバファイルの「.ko」拡張子を抜いた名前を指定し、そのドライバと依存ドライバのみを含めたinitramfsを作成する |
-add-drivers カーネルドライバ | 指定したカーネルドライバファイルの「.ko」拡張子を抜いた名前を指定し、そのドライバを追加したinitramfsを作成する |
–omit-drivers カーネルドライバ | 指定したカーネルドライバファイルの「.ko」拡張子を抜いた名前を指定し、そのドライバを除いたinitramfsを作成する |
-k ディレクトリ名 –kmoddir ディレクトリ名 | カーネルドライバを探すディレクトリを指定する |
–fwdir ディレクトリ名 | ファームウェアを探すディレクトリを追加で指定する |
-c ファイル名 –conf ファイル名 | 指定したファイルをdracut設定ファイル(デフォルトは/etc/dracut/dracut.conf)を読み込んで実行する |
–gzip、–bzip2、–lzma、–xz | 圧縮方式を指定する |
inintramfsを作成する
$ dracut 出力イメージファイル名
実行結果
initramfsを/tmp/配下に出力し、lsinitrdコマンドで格納されているファイル一覧を表示する。
[root@centos ~]# dracut /tmp/initramfs.img
[root@centos ~]# lsinitrd /tmp/initramfs.img|head -n 10
Image: /tmp/initramfs.img: 49M
========================================================================
Early CPIO image
========================================================================
drwxr-xr-x 3 root root 0 Jun 29 2022 .
-rw-r--r-- 1 root root 2 Jun 29 2022 early_cpio
drwxr-xr-x 3 root root 0 Jun 29 2022 kernel
drwxr-xr-x 3 root root 0 Jun 29 2022 kernel/x86
drwxr-xr-x 2 root root 0 Jun 29 2022 kernel/x86/microcode
-rw-r--r-- 1 root root 104448 Jun 29 2022 kernel/x86/microcode/GenuineIntel.bin
[root@centos ~]#
カーネルバージョンを指定してinintramfsを作成する
$ dracut 出力イメージファイル名 カーネルバージョン --force
すでにファイルが存在している場合は、–forceで上書きすることができます。
実行結果
initramfsを/tmp/配下に出力し、lsinitrdコマンドで格納されているファイル一覧を表示する。また、uname -aでカーネルバージョンを調べて以下では指定しています。
[root@centos ~]# uname -a
Linux centos 4.18.0-372.32.1.el8_6.x86_64 #1 SMP Thu Oct 27 15:18:36 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[root@centos ~]# dracut /tmp/initramfs.img 4.18.0-372.32.1.el8_6.x86_64 --force
処理中に利用したdracutモジュールを出力する
$ dracut 出力イメージファイル名 --force -M
実行結果
[root@centos ~]# dracut /tmp/initramfs.img --force -M
bash
systemd
systemd-initrd
nss-softokn
i18n
network-manager
network
ifcfg
drm
plymouth
prefixdevname
dm
・
・
・
指定したカーネルドライバだけのinitramfsを作成する
$ dracut -d ドライバ 出力イメージファイル名 --force
実行結果
[root@centos ~]# dracut -d e1000 /tmp/initramfs.img --force