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