dracut

提供: ArchWiki
2025年2月20日 (木) 03:32時点におけるKgx (トーク | 投稿記録)による版 (→‎Dracut モジュール: 同期)
ナビゲーションに移動 検索に移動

関連記事

dracut はカーネルによって使用される初期イメージを生成し、ルートファイルシステムにアクセスするのに必要なブロックデバイスモジュール (IDE、SCSI、RAID など) をプリロードします。linux のインストール時に mkinitcpiodracut のどちらを使うか選択できます。dracut は Fedora、RHEL、Gentoo、Debian などのディストリビューションで使われています。Arch はデフォルトで mkinitcpio を使用します。

dracut の完全なプロジェクトドキュメントはドキュメントで読むことができます。

インストール

dracut パッケージをインストールしてください。最新の開発バージョンの場合は dracut-gitAUR をインストールしてください。

ヒント: dracut が動作することが確認できたのであれば、mkinitcpioアンインストールできます。

使用方法

dracut は使いやすく、LVM on LUKS のような非標準的なセットアップでも、大抵、ユーザによる設定は不要です。

実行中のカーネルの initramfs を生成するには:

# dracut --hostonly --no-hostonly-cmdline /boot/initramfs-linux.img

フォールバック initramfs を生成するには:

# dracut /boot/initramfs-linux-fallback.img

/boot/initramfs-linux.img は出力イメージファイルを指します。ノーマルのカーネル以外を使用している場合は、ファイル名の変更を検討してください。例えば、linux-lts カーネルの場合、出力ファイルの名前は /boot/initramfs-linux-lts.img にするべきです、しかし、ブートローダーの設定が同じファイル名を使用していれば、これらのファイルに好きな名前を付けることができます。

ノート:
  • これらのコマンドで作成されたファイルには、インストールされているマイクロコードイメージがすべて埋め込まれます。
  • FS#59841 のため、ホストオンリーモードでは、システムで必要とされるものだけでなく、全ての Intel マイクロコードが initramfs に含まれます。[1]

追加オプション

--force フラグは、イメージファイルが既に存在する場合に上書きします。

--kver オプションは、使用するカーネルを指定します。このオプションの引数は、/usr/lib/modules にあるディレクトリの名前と一致する必要があります。

dracut(8) には他のフラグの説明が載っています。

詳細設定

dracut は、コマンドラインで引数を直接渡して設定できます (dracut(8) § OPTIONS を参照)。常に特定のフラグを使用して dracut を実行する場合は、設定を /etc/dracut.conf.d/ 内の .conf ファイルに保存できます。例えば:

/etc/dracut.conf.d/myflags.conf
hostonly="yes"
compress="lz4"
add_drivers+=" i915 "
omit_dracutmodules+=" network iscsi "

dracut.conf(5) でその他の設定オプションを見ることができます。各オプションの完全な説明は、dracut(8) で見ることができます。以下では、いくつかの一般的なオプションについて説明します。

Dracut モジュール

dracut は、initramfs を構築するためにモジュール式のアプローチを採用しています (dracut.modules(7) を参照) dracut の組み込みモジュールはすべて /lib/dracut/modules.d にあり、dracut --list-modules で一覧表示できます。追加のモジュールは、dracut-sshd-gitAUR などの外部パッケージによって提供できます。残念ながら、dracut の組み込みモジュールにはドキュメントがありませんが、その名前はそれ自体で説明できる場合があります。

一部のモジュールはデフォルトでアクティブ/非アクティブであり、--add/--omit コマンドライン引数または add_dracutmodules+=""/omit_dracutmodules+="" 永続設定エントリ行を使用してアクティブ化/非アクティブ化できます。

/etc/dracut.conf.d/myflags.conf
# ...
add_dracutmodules+=" dracut modules to activate "
omit_dracutmodules+=" dracut modules to deactivate "
# ...

次の表に、dracut モジュール、必要なパッケージ(dracut のオプションの依存関係)およびモジュールの説明を示します。

ほとんどの dracut モジュールは、他の dracut モジュールに依存しています。例として、bluetooth dracut モジュールは dbus dracut モジュールに依存しています。以下の表は、直接的な dracut モジュールの依存関係のみを示しています。つまり、特定の dracut モジュールの module-setup.sh にリストされている、特定のモジュールに必要なパッケージを示しています。

追加の dracut モジュールのドキュメントについては、アップストリームの dracut wiki を参照してください。

dracut モジュール 必要なパッケージ 説明
bluetooth bluez Bluetooth (keyboard)
btrfs btrfs-progs ブロックデバイスで btrfs をスキャンします
busybox busybox BusyBox (自己責任で) の使用を許可します
crypt cryptsetup 暗号化された dm-crypt ファイルシステムのサポート
dash dash dash (自己責任で) の使用を許可します
dmraid dmraid, multipath-tools DMRAID Dracut モジュールサポート
multipath multipath-tools MultiPath Dracut モジュールサポート
dmsquash-live-ntfs fuse3, ntfs-3g ライブ NTFS
lvm lvm2 LVM のサポート
mdraid mdadm ソフトウェア RAID デバイスとも呼ばれるMDデバイスをサポートします
memstrack memstrackAUR memstrack をサポート
nvdimm ndctl NVDIMM をサポート
plymouth plymouth Plymouth ブートスプラッシュ
rescue 救助モード用のさまざまなユーティリティ (Ping、SSH、VI、FSCK などなど) が含まれています。
resume initramfs が低電力状態から再開できるようにします
rngd 早期ブートでランダムジェネレーターサービスを開始します
syslog rsyslogAUR rsyslog でロギングを有効にする
squash squashfs-tools squashed initramfs を構築するためのサポート
tpm2-tss tpm2-tools Trusted Platform Module
base 必要なユーティリティを備えたベースモジュール
bash bash Bash が複数存在する場合、Bash を優先的に使用
biosdevname biosdevnameAUR BIOS に基づいたネットワークデバイス名を使用
caps init 実行前にケーパビリティを削減可能
convertfs / を /usr に統合 (次回起動時に実行)
crypt-gpg gnupg GPG を使用した暗号化・SmartCard のサポート (GPG キーが必要な場合あり)
crypt-loop 暗号化されたループバックデバイスのサポート (対称鍵)
dbus dbus-broker または dbus-daemon の仮想パッケージ
dbus-broker dbus-broker dbus-broker を dbus サービスプロバイダとして使用
dbus-daemon dbus dbus を dbus サービスプロバイダとして使用
debug デバッグ機能を有効化
dm device-mapper のサポートを追加
dmsquash-live-autooverlay ルートファイルシステムの親ブロックデバイスの空き領域に overlayfs 用パーティションを作成
dracut-systemd 基本的な systemd 用 dracut モジュール
drm DRM (Direct Rendering Manager) サポートのカーネルモジュールを含む
ecryptfs ecryptfs ファイルシステムのサポートを追加
fido2 FIDO2 セキュリティトークンを使用して暗号化ファイルシステムを解読可能
fips FIPS セキュリティ標準を適用
fs-lib fsck.* や mount などのファイルシステムツールのライブラリ
fstab-sys rootfs より前に任意のパーティションをマウント
i18n キーマップ、コンソールフォントなどを含む
img-lib イメージの展開ツールを含むライブラリ
integrity 拡張検証モジュール (EVM) のサポートを追加
kernel-modules ルートファイルシステムおよびブート時に必要なデバイスのカーネルモジュール
kernel-modules-extra 追加のカーネルモジュール (out-of-tree)
lunmask 必要な LUN デバイスのみを選択してマスク
lvmmerge LVM スナップショットをマージ
lvmthinpool-monitor LVM thin pool を監視
masterkey 他の鍵の解読用マスターキーと keyutils を含む
modsign 署名付きカーネルモジュールのサポートを追加
overlayfs OverlayFS のカーネルモジュール
pcsc PCSC スマートカードのサポート
pkcs11 PKCS#11 ライブラリを含む
pollcdrom CD-ROM ポーリングを有効化
qemu QEMU 環境用のカーネルモジュールを含む
rescue ping、ssh、vi、fsck.* などのレスキュー用ユーティリティ
rootfs-block ルートファイルシステムを含むブロックデバイスのマウント処理
securityfs securityfs をブート初期にマウント
selinux SELinux ポリシーのロードを処理
shutdown シャットダウン時に実行されるフックを設定
systemd 早期 init システムとして systemd を使用
terminfo terminfo ファイルを含む
udev-rules udev と基本ルールのセット
uefi-lib UEFI ツールを含むライブラリ
usrmount /usr のマウントを処理
virtfs 仮想ファイルシステム (9p) のサポート
virtiofs virtiofs ファイルシステムのサポート
warpclock adjtime が LOCAL に設定されている場合にシステム時間をリセット
watchdog watchdog デバイス管理を含む (systemd 非使用時のみ動作)
watchdog-modules 起動時にロードされる watchdog 用カーネルモジュール

これは、IPアドレス が初期ブート時に利用可能になることが想定される場合に使用される Dracut モジュールについての説明です。

ネットワーキング dracut モジュール 必要なパッケージ 説明
cifs cifs-utils Samba のサポート
nbd nbd ネットワークブロックデバイスのサポート
network-manager networkmanager NetworkManager のサポート
nfs nfs-utils NFS のサポート (NFSv3 および NFSv4)
nvmf nvme-cli, jq NVMe over Fibre Channel および NVMe-over-Fabrics のサポート
iscsi open-iscsi ISCSI のサポート
ssh-client openssh SSH および SCP のインストール (設定ファイルや指定された鍵も含む)
network-legacy dhclient, iproute2, iputils レガシーなネットワークのサポート
connman connman ConnMan ネットワークのサポート
kernel-network-modules ネットワークデバイス用のカーネルモジュールを含み、ロードする
livenet SquashFS イメージのライブアップデートを取得
network ネットワークサービスプロバイダーの仮想モジュール
url-lib curl および SSL 証明書を含むライブラリ
qemu-net QEMU 環境向けネットワークカーネルモジュールを含む
systemd-network-management systemd のネットワーク管理を追加 (systemd-networkd, systemd-resolved などのネットワーク関連モジュールを含む)
systemd-networkd Systemd-networkd
net-lib ip を含むネットワークライブラリ

TPM2

systemd-cryptenroll を介して TPM2 で luks2 暗号化ボリュームをアンロックする systemd の機能を使用するには、tpm2-tools パッケージをインストールし、かつ tpm2-tss dracut モジュールを有効化してください。

カーネルモジュールの早期ロード

Dracut では、--force_drivers 引数または force_drivers+="" 設定エントリで早期ロードを有効化します (initramfs の段階で modprobe によってロードされます)。例えば:

/etc/dracut.conf.d/myflags.conf
# ...
force_drivers+=" nvidia nvidia_modeset nvidia_uvm nvidia_drm "
# ...

カーネルコマンドラインオプション

カーネルコマンドラインオプションは、/etc/dracut.conf.d/.conf ファイルで kernel_cmdline= フラグで設定できます。Dracut は自動的にこのファイルを読み込み、01-default.conf ファイルを作成し、initramfs ディレクトリ /etc/cmdline.d/ 内に配置します。例えば、カーネルコマンドラインオプションのファイルは次のようになります:

/etc/dracut.conf.d/cmdline.conf
kernel_cmdline="rd.luks.uuid=luks-f6c738f3-ee64-4633-b6b0-eceddb1bb010 rd.lvm.lv=arch/root  rd.lvm.lv=arch/swap  root=/dev/arch/root rootfstype=ext4 rootflags=rw,relatime"

雑記

dracut でルートブロックデバイスを指定することは必須ではありません。dracut.cmdline(7) によると:

カーネルによって使用されるルートブロックデバイスは、通常通り、ブート設定ファイル内でカーネルコマンドラインによって指定されます。

しかし、一部のパラメータを早期に設定しておくと便利な場合があり、追加のコマンドラインパラメーターのプロンプトなどといった追加機能を有効にすることができます。すべてのオプションについては、dracut.cmdline(7) を参照してください。設定オプションの例を次に示します:

  • スワップパーティションを使ってハイバネートから復帰する: resume=UUID=80895b78-7312-45bc-afe5-58eb4b579422
  • 追加のカーネルコマンドラインパラメータを入力するためのプロンプトを表示する: rd.cmdline=ask
    警告: プロンプトが表示される前にキーボードが初期化されていないと、rd.cmdline=ask は問題を発生させる可能性があり、そうなると、ハードリセットしなくてはならなくなります。dracut issue 728 を見てください
  • quiet が設定されている場合でも情報を出力する: rd.info

ユニファイドカーネルイメージ

dracut は、--uefi コマンドラインオプションまたは uefi="yes" 設定オプションを使用して Unified カーネルイメージを生成できます。

ヒントとテクニック

生成されたイメージの情報を表示

生成された initramfs イメージの情報をページャを使って表示するには:

# lsinitrd /path/to/initramfs_or_uefi_image | less

上記のコマンドはイメージ生成時に dracut に指定された引数や dracut モジュールのリスト、含まれているファイルのリストを表示します。

圧縮プログラムの変更

使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。

警告: 使用する圧縮アルゴリズムがカーネルでサポートされていることを確認してください。さもないと、ブートできなくなってしまいます。また、使用する圧縮プログラムのパッケージをインストールしておく必要があります。

以下の行のどれかを dracut の設定ファイルに追加してください (2つ以上追加してはいけません):

compress="cat"
compress="gzip"
compress="bzip2"
compress="lzma"
compress="xz"
compress="lzo"
compress="lz4"
compress="zstd"

gzip がデフォルトで使用される圧縮プログラムです。compress="cat" は、圧縮なしで initramfs を作成します。

公式でサポートされていない圧縮プログラムを使うこともできます:

compress="program"

パフォーマンスに関する考慮事項

ブートと initramfs 作成のパフォーマンスを最適化するためのいくつかの考慮事項:

  • 最速の圧縮方式を理解し、設定する: カーネルモジュールがすでに圧縮されている場合、initramfs作成時に再圧縮する必要はないかもしれない。
  • initramfs に systemd を含めることの影響を理解する: 遅くなる場合は省略し、速くなる場合は含める。
  • コピーオンライトファイルシステムを使用している場合は、dracut-cpio の使用を検討する: 適用可能性については、--enhanced-cpio オプションを参照。
  • initramfs に含めるカーネルモジュールと dracut モジュールの数を最小限に抑える: 例:nfs-utilsがインストールされている(ただしブートには不要)場合、nfs dracutモジュールを明示的に省略する必要がある。そうしないと、デフォルト構成で生成されたinitramfsでネットワークブートが有効になる - https://github.com/dracut-ng/dracut-ng/pull/297 を参照。
  • bash の代わりに busybox の使用を検討する:
  • hostonly を検討する:

カーネルのアップグレード時に新しい initramfs を生成

カーネルをアップグレードするたびに、新しい initramfs イメージを自動的に生成することが可能です。ここでは、デフォルトの linux カーネルについて説明しますが、他のカーネル用のフックを追加するのも簡単なはずです。

ヒント: dracut-hookAUR パッケージは以下のようなフックとスクリプトを含んでいます。EFI 実行ファイルである initramfs イメージ (つまり esp/EFI/Linux/linux-kernel-machine_id-build_id.efi) が欲しい場合は、代わりに dracut-uefi-hookAURdracut-hook-uefiAUR をインストールしたほうが良いでしょう。このディレクトリにある EFI バイナリは systemd-boot によって自動的に検出されるので、/boot/loader/loader.conf にエントリを書く必要はありません。

カーネルバージョンを調べるコマンドはやや複雑なので、pacman フックの中では単独では動きません。そのため、システム上の任意の場所にスクリプトを作成します。この例では /usr/local/bin/ に作成します。

このスクリプトは、新しい vmlinuz カーネルファイルを /boot/ にコピーします。これは、カーネルパッケージが /boot/ にファイルを配置しなくなったためです。[2]

/usr/local/bin/dracut-install.sh
#!/usr/bin/env bash

args=('--force' '--no-hostonly-cmdline')

while read -r line; do
	if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then
		read -r pkgbase < "/${line}"
		kver="${line#'usr/lib/modules/'}"
		kver="${kver%'/pkgbase'}"

		install -Dm0644 "/${line%'/pkgbase'}/vmlinuz" "/boot/vmlinuz-${pkgbase}"
		dracut "${args[@]}" --hostonly "/boot/initramfs-${pkgbase}.img" --kver "$kver"
		dracut "${args[@]}" --no-hostonly "/boot/initramfs-${pkgbase}-fallback.img" --kver "$kver"
	fi
done
/usr/local/bin/dracut-remove.sh
#!/usr/bin/env bash

while read -r line; do
	if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then
		read -r pkgbase < "/${line}"
		rm -f "/boot/vmlinuz-${pkgbase}" "/boot/initramfs-${pkgbase}.img" "/boot/initramfs-${pkgbase}-fallback.img"
	fi
done

スクリプトを実行可能にする必要があります。フラグを追加したり削除したりしたい場合は、dracut の設定ファイルに追加する必要があります。

次に、pacman フックを作成します:

/etc/pacman.d/hooks/90-dracut-install.hook
[Trigger]
Type = Path
Operation = Install
Operation = Upgrade
Target = usr/lib/modules/*/pkgbase

[Action]
Description = Updating linux initcpios (with dracut!)...
When = PostTransaction
Exec = /usr/local/bin/dracut-install.sh
Depends = dracut
NeedsTargets
/etc/pacman.d/hooks/60-dracut-remove.hook
[Trigger]
Type = Path
Operation = Remove
Target = usr/lib/modules/*/pkgbase

[Action]
Description = Removing linux initcpios...
When = PreTransaction
Exec = /usr/local/bin/dracut-remove.sh
NeedsTargets

mkinitcpio を削除するか以下のコマンドを使って、mkinitcpio が initramfs イメージを作成したり削除するのも止める必要があります:

# ln -sf /dev/null /etc/pacman.d/hooks/90-mkinitcpio-install.hook
# ln -sf /dev/null /etc/pacman.d/hooks/60-mkinitcpio-remove.hook

Bluetooth キーボードのサポート

Dracut は、Bluetooth キーボードが検出されると自動的に Bluetooth モジュールを有効にします。ただし、これには dracut が hostonly モードである必要があります。これはデフォルトではありません。

Limine ブートローダーのサポート

limine-dracut-supportAUR パッケージは、Limine ブートローダーでのカーネルとブートエントリのインストールと削除を自動化するために、dracut と pacman フックを備えた limine-entry-tool を利用します。詳細については、Limine#ブートエントリの自動化 を参照してください。

トラブルシューティング

ハイバネート

ハイバネートからの復帰がうまくいかない場合、resume モジュールをイメージに含めるように dracut を設定する必要がある場合があります。以下を設定ファイルに追加する必要があります:

/etc/dracut.conf.d/resume-from-hibernate.conf
add_dracutmodules+=" resume "

LVM / ソフトウェア RAID / LUKS

カーネルに LVM / ソフトウェア RAID / LUKS ブロックの自動検出とマウントに問題がある場合、以下のカーネルコマンドラインオプションを使用して initramfs の生成を再度試してみることができます:

rd.auto rd.lvm=1 rd.dm=1 rd.md=1 rd.luks=1

A stop job is running for "brltty"

ブートの問題が発生する場合や、システムが brllty の終了を待機するせいでシャットダウンに非常に長い時間が掛かる場合、以下を dracut の設定ファイルに追加してください:

omit_dracutmodules+=" brltty "

あるいは、brltty が必要ない場合はアンインストールしてください。

No usable keyslot is available

Cannot use whirlpool hash for keyslot encryption. 
Keyslot open failed. 
No usable keyslot is available.

上記のようなメッセージが表示されてブートに失敗する場合、大抵、add_dracutmodulescrypt モジュールを追加するだけで解決します。しかし、このモジュールを追加した後もメッセージが表示され続ける場合、以下のように設定を変更する必要がある場合があります:

install_items+=" /usr/lib/ossl-modules/legacy.so "

これは、OpenSSL が whirlpool ハッシュ関数を非推奨にして、この関数を上記のライブラリに移動したせいです。Arch を使用する場合、dracut は自動的にこのライブラリを initramfs にインストールしません。

参照

翻訳ステータス: このページは en:dracut の翻訳バージョンです。最後の翻訳日は 2023-08-03 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。