「Dracut」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎インストール: dracut-gitへのリンクを追加)
(同期)
 
(3人の利用者による、間の25版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:ブートプロセス]]
+
[[Category:Initramfs]]
 
[[en:Dracut]]
 
[[en:Dracut]]
 
[[pt:Dracut]]
 
[[pt:Dracut]]
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|booster}}
 
{{Related|mkinitcpio}}
 
{{Related|mkinitcpio}}
  +
{{Related|Unified カーネルイメージ}}
 
{{Related articles end}}
 
{{Related articles end}}
   
[https://dracut.wiki.kernel.org/ dracut] はカーネルによって使用される初期イメージを生成し、ルートファイルシステムにアクセスするのに必要なブロックデバイスモジュール (IDE, SCSI, RAID など) をプリロードします。{{Pkg|linux}} のインストール時に [[Mkinitcpio|mkinitcpio]] と dracut のどちらを使うか選択できます。dracut は Fedora, RHEL, Gentoo, Debian などのディストリビューションで使われています。
+
[https://github.com/dracutdevs/dracut/wiki dracut] はカーネルによって使用される初期イメージを生成し、ルートファイルシステムにアクセスするのに必要なブロックデバイスモジュール (IDESCSI、[[RAID]] など) をプリロードします。{{Pkg|linux}} のインストール時に [[mkinitcpio]] と ''dracut'' のどちらを使うか選択できます。''dracut'' は FedoraRHELGentooDebian などのディストリビューションで使われています。Arch はデフォルトで [[mkinitcpio]] を使用します。
   
dracut の詳しいプロジェクト説明 [https://mirrors.edge.kernel.org/pub/linux/utils/boot/dracut/dracut.html カーネルドキュメント] から確認できます。
+
''dracut'' のプロジェクトドキュメントは[https://github.com/dracutdevs/dracut/wiki こちら]で読むことができます。
   
 
== インストール ==
 
== インストール ==
   
dracut は {{Pkg|dracut}} パッケージ[[インストール]]できます。最新の開発バージョンの場合は {{AUR|dracut-git}}
+
{{Pkg|dracut}} パッケージ[[インストール]]してください。最新の開発バージョンの場合は {{AUR|dracut-git}} をインストールしてください。
   
{{Tip|dracut が動作することが確認できたのであれば、{{Pkg|mkinitcpio}} は削除することができます。}}
+
{{Tip|''dracut'' が動作することが確認できたのであれば、{{Pkg|mkinitcpio}} は[[アンインストール]]できます。}}
   
 
== 使用方法 ==
 
== 使用方法 ==
   
dracut 使い方は簡単で基本的にユーザーによる設定を必要としません。[[Dm-crypt/システム全体の暗号化#LVM_on_LUKS|LVM on LUKS]] など特殊環境でもそれはあてはまります
+
{{ic|dracut}} 使いやすく、[[dm-crypt/システム全体の暗号化#LVM on LUKS|LVM on LUKS]] のよう非標準的なセットアップを使用する場合でも、通常ユーザー設定を必要としせん
   
現在動作しているカーネルの initramfs を生成するには:
+
実行中のカーネルの initramfs を生成するには:
   
# dracut /boot/initramfs-linux.img
+
# dracut --hostonly --no-hostonly-cmdline --add-confdir no-network /boot/initramfs-linux.img
   
  +
hostonly モードを永続的に有効にするには (コマンドラインに含める必要がないように) dracut 設定に以下を追加します。
{{ic|/boot/initramfs-linux.img}} は出力するイメージファイルを指定します。標準のカーネルを使っていない場合は、ファイルの名前を変更する必要があります。例えば {{Pkg|linux-lts}} カーネルの場合、出力ファイルの名前は {{ic|/boot/initramfs-linux-lts.img}} としてください。ただし、[[ブートローダー]]の設定も一緒に変更するのであればファイルの名前は好きにつけることができます。
 
   
  +
{{hc|/etc/dracut.conf.d/hostonly.conf|2=
==== 追加フラグ ====
 
  +
hostonly="yes"
  +
}}
   
  +
{{Note|場合によっては、特にシステムを初めてインストールする場合、上記のコマンドは機能しません。次のコマンドを使用してください。
{{ic|--hostonly}} フラグはローカルホスト環境を起動するのに必要なファイルのみ含んだイメージを生成します。フラグを付けない場合はより多くのファイルを含む汎用イメージが生成されます。このフラグを使うことで生成イメージの容量を減らすことができますが、他のコンピュータでイメージを使用したり別のルートファイルシステムに切り替えることができなくなります。その場合は新しいイメージの生成が必要です。
 
  +
# dracut --regenerate-all
  +
}}
   
{{ic|--force}} ラグはイメジファイが既に存在する場合上書きします。
+
ールバック initramfs を生成するには、以下を実行します。
  +
  +
# dracut /boot/initramfs-linux-fallback.img
  +
  +
{{ic|/boot/initramfs-linux.img}} は、出力イメージファイルを指します。別のカーネルを使用している場合は、ファイル名を変更することを検討してください。たとえば、{{Pkg|linux-lts}} カーネルの場合、出力ファイルは {{ic|/boot/initramfs-linux-lts.img}} という名前にする必要があります。ただし、[[ブートローダー]] 設定で同じファイル名を使用する限り、これらのファイルには好きな名前を付けることができます。
  +
  +
{{Note|これらのコマンドで作成されたファイルには、インストールされている[[マイクロコード]]イメージが埋め込まれています。}}
  +
  +
=== 追加オプション ===
  +
  +
{{ic|--force}} フラグは、イメージファイルが既に存在する場合に上書きします。
  +
  +
{{ic|--kver}} オプションは、使用するカーネルを指定します。このオプションの引数は、{{ic|/usr/lib/modules}} にあるディレクトリの名前と一致する必要があります。
   
 
{{man|8|dracut}} には他のフラグの説明が載っています。
 
{{man|8|dracut}} には他のフラグの説明が載っています。
   
== 設定 ==
+
== 詳細設定 ==
  +
  +
初期 RAM ディスクフェーズ中の様々なタスクの実行方法には、2つの異なるアプローチがあることに注意することが重要です。
  +
  +
; ''シェル (bash/busybox/dash) ベース''の初期 RAM ディスク: init スクリプトが開始され、次に初期 RAM ディスクのファイルシステムをスキャンして実行される dracut スクリプトを検索します。
  +
  +
; ''systemd ベース(デフォルト)''の初期 RAM ディスク: systemd は初期 RAM ディスクフェーズの開始時にすでに開始されています。実行されるタスクは、通常の systemd ユニットファイルによって決定されます。[https://www.freedesktop.org/software/systemd/man/latest/bootup.html systemdブートアッププロセス]を参照してください。
  +
  +
具体的なバリアントは、systemd dracut モジュールの有無によって決定されます。詳細については、[[#dracut モジュール]]を参照してください。
   
に特定のフラグを使て dracut を実行したい場合、{{ic|/etc/dracut.conf.d/}} に {{ic|.conf}} ファイルとして設定を保存できます。例:
+
{{ic|dracut}} は、コマンドラインで直接引数を渡すことよって構成できます ({{man|8|dracut|OPTIONS}} を参照) 特定のフラグのセットを使用し常に {{ic|dracut}} を実行する場合、{{ic|/etc/dracut.conf.d/}} に{{ic|.conf}} ファイルに指定された設定を保存できます。例:
   
{{hc|/etc/dracut.conf.d/myflags.conf|
+
{{hc|/etc/dracut.conf.d/myflags.conf|2=
<nowiki>hostonly="yes"
+
hostonly="yes"
 
compress="lz4"
 
compress="lz4"
 
add_drivers+=" i915 "
 
add_drivers+=" i915 "
omit_dracutmodules+=" network iscsi "</nowiki>
+
omit_dracutmodules+=" systemd network "
 
}}
 
}}
   
設定オプションについては {{man|5|dracut.conf}} を参照してださい。各オプションの詳しい説明は {{man|8|dracut}} に存在します。
+
{{man|5|dracut.conf}} でより多の設定オプションを確認できます。各オプションのより細な説明は{{man|8|dracut}} にあります。以下では、いくつかの一般的なオプションについて説明します。
   
=== コマンドラインオプション ===
+
=== Dracut モジュール ===
   
  +
''dracut'' は、initramfs を構築するためにモジュール式のアプローチを採用しています ({{man|7|dracut.modules}} を参照) ''dracut'' の組み込みモジュールはすべて {{ic|/lib/dracut/modules.d}} にあり、{{ic|dracut --list-modules}} で一覧表示できます。追加のモジュールは、{{aur|dracut-sshd-git}} などの外部パッケージによって提供できます。残念ながら、''dracut'' の組み込みモジュールにはドキュメントがありませんが、その名前はそれ自体で説明できる場合があります。
{{Note|マニュアルページのドキュメントには、ファイルを挿入する方法があまり説明されておらず、システムに {{ic|/etc/cmdline.d}} がインストールされているかのように書かれています。これ ({{ic|/etc/cmdline.d}}) は initramfs ファイルシステムの一部であり、 dracut は作成されたシステム {{ic|/etc/cmdline.d}} を認識しません。したがって、このディレクトリを作成しても意味がありません}}
 
   
  +
一部のモジュールはデフォルトでアクティブ/非アクティブであり、{{ic|--add}}/{{ic|--omit}} コマンドライン引数または {{ic|1= add_dracutmodules+=""}}/{{ic|1= omit_dracutmodules+=""}} 永続設定エントリ行を使用してアクティブ化/非アクティブ化できます。
initramfs 環境でカーネルのコマンドラインパラメータを強制的に使用することができます。ブロックデバイスの指定には [[#Spaces in kernel parameters|use the UUID naming scheme]] を使用してください。
 
   
  +
{{hc|/etc/dracut.conf.d/myflags.conf|2=
dracut のルートブロックデバイスを指定する必要はありません。 {{man|7|dracut.cmdline}} から:
 
  +
# ...
  +
add_dracutmodules+=" ''dracut modules to activate'' "
  +
omit_dracutmodules+=" ''dracut modules to deactivate'' "
  +
# ...
  +
}}
   
  +
次の表に、dracut モジュール、必要なパッケージ(''dracut'' のオプションの依存関係)およびモジュールの説明を示します。
:カーネルが使用するルートデバイスは、いつものように、カーネルコマンドラインのブート設定ファイルで指定されます。
 
   
  +
ほとんどの dracut モジュールは、他の dracut モジュールに依存しています。例として、bluetooth dracut モジュールは dbus dracut モジュールに依存しています。以下の表は、直接的な dracut モジュールの依存関係のみを示しています。つまり、特定の dracut モジュールの {{ic|module-setup.sh}} にリストされている、特定のモジュールに必要なパッケージを示しています。
ただし、一部のパラメータを早い段階で設定すると便利な場合があります。また、コマンドラインパラメータの追加を求めるプロンプトを表示するなど、追加機能を有効にすることもできます。すべてのオプションについては、 {{man|7|dracut.cmdline}} を参照してください。次に、設定オプションの例を示します。
 
   
  +
追加の dracut モジュールのドキュメントについては、[https://github.com/dracut-ng/dracut-ng/wiki/modules アップストリームの dracut wiki] を参照してください。
* スワップパーティションから再開する: {{ic|1=resume=UUID=80895b78-7312-45bc-afe5-58eb4b579422}}
 
  +
* 追加のカーネルコマンドラインパラメータを要求する: {{ic|1=rd.cmdline=ask}}
 
  +
{| class="wikitable"
* "quiet" が設定されていても情報出力を表示する: {{ic|1=rd.info}}
 
  +
! dracut モジュール
  +
! 必要なパッケージ
  +
! 説明
  +
|-
  +
| bluetooth
  +
| {{Pkg|bluez}}
  +
| [[Bluetooth]] (keyboard)
  +
|-
  +
| btrfs
  +
| {{Pkg|btrfs-progs}}
  +
| ブロックデバイスで [[btrfs]] をスキャンします
  +
|-
  +
| busybox
  +
| {{Pkg|busybox}}
  +
| [[BusyBox]] (自己責任で) の使用を許可します
  +
|-
  +
| crypt
  +
| {{Pkg|cryptsetup}}
  +
| 暗号化された [[dm-crypt]] ファイルシステムのサポート
  +
|-
  +
| dash
  +
| {{Pkg|dash}}
  +
| [[dash]] (自己責任で) の使用を許可します
  +
|-
  +
| dmraid
  +
| {{Pkg|dmraid}}, {{Pkg|multipath-tools}}
  +
| DMRAID Dracut モジュールサポート
  +
|-
  +
| multipath
  +
| {{Pkg|multipath-tools}}
  +
| MultiPath Dracut モジュールサポート
  +
|-
  +
| dmsquash-live-ntfs
  +
| {{Pkg|fuse3}}, {{Pkg|ntfs-3g}}
  +
| ライブ [[NTFS]]
  +
|-
  +
| lvm
  +
| {{Pkg|lvm2}}
  +
| [[LVM]] のサポート
  +
|-
  +
| mdraid
  +
| {{Pkg|mdadm}}
  +
| ソフトウェア [[RAID]] デバイスとも呼ばれるMDデバイスをサポートします
  +
|-
  +
| memstrack
  +
| {{AUR|memstrack}}
  +
| memstrack をサポート
  +
|-
  +
| nvdimm
  +
| {{Pkg|ndctl}}
  +
| NVDIMM をサポート
  +
|-
  +
| plymouth
  +
| {{Pkg|plymouth}}
  +
| [[Plymouth]] ブートスプラッシュ
  +
|-
  +
| rescue
  +
|
  +
| 救助モード用のさまざまなユーティリティ (Ping、SSH、VI、FSCK などなど) が含まれています。
  +
|-
  +
| resume
  +
|
  +
| initramfs が低電力状態から再開できるようにします
  +
|-
  +
| rngd
  +
|
  +
| 早期ブートでランダムジェネレーターサービスを開始します
  +
|-
  +
| syslog
  +
| {{AUR|rsyslog}}
  +
| [[rsyslog]] でロギングを有効にする
  +
|-
  +
| squash
  +
| {{Pkg|squashfs-tools}}
  +
| squashed initramfs を構築するためのサポート
  +
|-
  +
| tpm2-tss
  +
| {{Pkg|tpm2-tools}}
  +
| [[Trusted Platform Module]]
  +
|-
  +
| base
  +
|
  +
| 必要なユーティリティを備えたベースモジュール
  +
|-
  +
| bash
  +
| {{Pkg|bash}}
  +
| Bash が複数存在する場合、Bash を優先的に使用
  +
|-
  +
| biosdevname
  +
| {{AUR|biosdevname}}
  +
| BIOS に基づいたネットワークデバイス名を使用
  +
|-
  +
| caps
  +
|
  +
| init 実行前にケーパビリティを削減可能
  +
|-
  +
| convertfs
  +
|
  +
| / を /usr に統合 (次回起動時に実行)
  +
|-
  +
| crypt-gpg
  +
| {{Pkg|gnupg}}
  +
| GPG を使用した暗号化・SmartCard のサポート (GPG キーが必要な場合あり)
  +
|-
  +
| crypt-loop
  +
|
  +
| 暗号化されたループバックデバイスのサポート (対称鍵)
  +
|-
  +
| dbus
  +
|
  +
| dbus-broker または dbus-daemon の仮想パッケージ
  +
|-
  +
| dbus-broker
  +
| {{Pkg|dbus-broker}}
  +
| {{Pkg|dbus-broker}} を dbus サービスプロバイダとして使用
  +
|-
  +
| dbus-daemon
  +
| {{Pkg|dbus}}
  +
| {{Pkg|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アドレス|IPアドレス]] が初期ブート時に利用可能になることが想定される場合に使用される Dracut モジュールについての説明です。
  +
  +
{| class="wikitable"
  +
! ネットワーキング dracut モジュール
  +
! 必要なパッケージ
  +
! 説明
  +
|-
  +
| cifs
  +
| {{Pkg|cifs-utils}}
  +
| [[Samba]] のサポート
  +
|-
  +
| nbd
  +
| {{Pkg|nbd}}
  +
| ネットワークブロックデバイスのサポート
  +
|-
  +
| network-manager
  +
| {{Pkg|networkmanager}}
  +
| [[NetworkManager]] のサポート
  +
|-
  +
| nfs
  +
| {{Pkg|nfs-utils}}
  +
| [[NFS]] のサポート (NFSv3 および NFSv4)
  +
|-
  +
| nvmf
  +
| {{Pkg|nvme-cli}}, {{Pkg|jq}}
  +
| NVMe over Fibre Channel および NVMe-over-Fabrics のサポート
  +
|-
  +
| iscsi
  +
| {{Pkg|open-iscsi}}
  +
| [[ISCSI]] のサポート
  +
|-
  +
| ssh-client
  +
| {{Pkg|openssh}}
  +
| SSH および SCP のインストール (設定ファイルや指定された鍵も含む)
  +
|-
  +
| network-legacy
  +
| {{Pkg|dhclient}}, {{Pkg|iproute2}}, {{Pkg|iputils}}
  +
| レガシーな[[ネットワーク]]のサポート
  +
|-
  +
| connman
  +
| {{Pkg|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 ====
  +
  +
[[Trusted Platform Module#systemd-cryptenroll|systemd-cryptenroll]] を介して TPM2 で ''luks2'' 暗号化ボリュームをアンロックする ''systemd'' の機能を使用するには、{{Pkg|tpm2-tools}} パッケージをインストールし、かつ {{ic|tpm2-tss}} ''dracut'' モジュールを有効化してください。
  +
  +
=== カーネルモジュールの早期ロード ===
  +
  +
Dracut では、{{ic|--force_drivers}} 引数または {{ic|1= force_drivers+=""}} 設定エントリで早期ロードを有効化します (initramfs の段階で {{ic|modprobe}} によってロードされます)。例えば:
  +
  +
{{hc|/etc/dracut.conf.d/myflags.conf|2=
  +
# ...
  +
force_drivers+=" nvidia nvidia_modeset nvidia_uvm nvidia_drm "
  +
# ...
  +
}}
  +
  +
=== カーネルコマンドラインオプション ===
   
カーネルコマンドラインオプションは、 {{ic|/etc/dracut.conf.d/}} {{ic|*.conf}} ファイルに記述し、 {{ic|1=kernel_cmdline=}} フラグで設定することができます。 Dracut は自動的にこのファイルをソースとし {{ic|01 default.conf}} ファイルを作成しinitramfs ディレクトリ {{ic|/etc/cmdline.d/}} に置ます。例えば、カーネルコマンドラインオプションファイルは以下のようになります
+
カーネルコマンドラインオプションは、{{ic|/etc/dracut.conf.d/}} の ''.conf'' ファイル {{ic|1=kernel_cmdline=}} フラグで設定できます。Dracut は自動的にこのファイルを読み込み、{{ic|01-default.conf}} ファイルを作成しinitramfs ディレクトリ {{ic|/etc/cmdline.d/}} ます。例えば、カーネルコマンドラインオプションファイルはのようになります:
   
 
{{hc|/etc/dracut.conf.d/cmdline.conf|2=
 
{{hc|/etc/dracut.conf.d/cmdline.conf|2=
kernel_cmdline="rd.luks.uuid=luks-f6c738f3-ee64-4633-b6b0-eceddb1bb010 rd.lvm.lv=arch/root rd.lvm.lv=arch/swap root=/dev/mapper/arch-root rootfstype=ext4 rootflags=rw,relatime"
+
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 からも提供されています。生成されたファイル (initramfs.img と uefi.efi の両方のファイル) は、 {{ic|--unpackearly}} オプションを使用して {{ic|lsinitrd}} で表示できます。次に例を示します。
 
   
  +
{{ic|dracut}} でルートブロックデバイスを指定することは必須ではありません。{{man|7|dracut.cmdline}} によると:
{{ic|lsinitrd --unpackearly /boot/EFI/Arch/Arch.efi /etc/cmdline.d/01-default.conf {{!}} less}}
 
  +
  +
: カーネルによって使用されるルートブロックデバイスは、通常通り、ブート設定ファイル内でカーネルコマンドラインによって指定されます。
  +
  +
しかし、一部のパラメータを早期に設定しておくと便利な場合があり、追加のコマンドラインパラメーターのプロンプトなどといった追加機能を有効にすることができます。すべてのオプションについては、{{man|7|dracut.cmdline}} を参照してください。設定オプションの例を次に示します:
  +
  +
* スワップパーティションを使ってハイバネートから復帰する: {{ic|1=resume=UUID=80895b78-7312-45bc-afe5-58eb4b579422}}
  +
* 追加のカーネルコマンドラインパラメータを入力するためのプロンプトを表示する: {{ic|1=rd.cmdline=ask}} {{Warning|プロンプトが表示される前にキーボードが初期化されていないと、{{ic|1=rd.cmdline=ask}} は問題を発生させる可能性があり、そうなると、ハードリセットしなくてはならなくなります。[https://github.com/dracutdevs/dracut/issues/728 dracut issue 728] を見てください}}
  +
* {{ic|quiet}} が設定されている場合でも情報を出力する: {{ic|1=rd.info}}
  +
  +
=== ユニファイドカーネルイメージ ===
  +
  +
''dracut'' は、{{ic|--uefi}} コマンドラインオプションまたは {{ic|1=uefi="yes"}} 設定オプションを使用して [[Unified カーネルイメージ]]を生成できます。
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
80行目: 495行目:
 
生成された initramfs イメージの情報をページャを使って表示するには:
 
生成された initramfs イメージの情報をページャを使って表示するには:
   
$ lsinitrd <path to initramfs image> | less
+
# lsinitrd ''/path/to/initramfs_or_uefi_image'' | less
   
上記のコマンドはイメージ生成時に dracut に指定された引数や dracut モジュールのリスト、含まれているファイルのリストを表示します。
+
上記のコマンドはイメージ生成時に {{ic|dracut}} に指定された引数や {{ic|dracut}} モジュールのリスト、含まれているファイルのリストを表示します。
   
 
=== 圧縮プログラムの変更 ===
 
=== 圧縮プログラムの変更 ===
88行目: 503行目:
 
使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。
 
使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。
   
  +
{{Warning|使用する圧縮アルゴリズムがカーネルでサポートされていることを確認してください。さもないと、ブートできなくなってしまいます。また、使用する圧縮プログラムのパッケージをインストールしておく必要があります。}}
{{Warning|
 
* カーネルで使用する圧縮方法のサポートがコンパイル時に組み込まれているかどうか確認してください (組み込まれていない場合、起動できなくなります)。また、圧縮プログラムのパッケージをインストールする必要があります。
 
* バージョン 5.9 より前の Linux カーネルは zstd 圧縮 ををサポートしていません。 {{Pkg|linux-zen}} はバージョン 5.8 以降でサポートしています
 
}}
 
   
以下の行のどれかを dracut の[[#設定|設定]]に追加してください (2つ以上追加してはいけません):
+
以下の行のどれかを [[#詳細設定|dracut の設定ファイル]]に追加してください (2つ以上追加してはいけません):
   
  +
compress="cat"
 
compress="gzip"
 
compress="gzip"
 
compress="bzip2"
 
compress="bzip2"
107行目: 520行目:
 
公式でサポートされていない圧縮プログラムを使うこともできます:
 
公式でサポートされていない圧縮プログラムを使うこともできます:
   
compress="<program>"
+
compress="''program''"
  +
  +
=== パフォーマンスに関する考慮事項 ===
  +
  +
ブートと initramfs 作成のパフォーマンスを最適化するためのいくつかの考慮事項:
  +
  +
* 最速の圧縮方式を理解し、設定する: カーネルモジュールがすでに圧縮されている場合、initramfs作成時に再圧縮する必要はないかもしれない。
  +
  +
* initramfs に systemd を含めることの影響を理解する: 遅くなる場合は省略し、速くなる場合は含める。
  +
  +
* コピーオンライトファイルシステムを使用している場合は、dracut-cpio の使用を検討する: 適用可能性については、{{ic|--enhanced-cpio}} オプションを参照。
  +
  +
* initramfs に含めるカーネルモジュールと dracut モジュールの数を最小限に抑える: 例:{{Pkg|nfs-utils}}がインストールされている(ただしブートには不要)場合、nfs dracutモジュールを明示的に省略する必要がある。そうしないと、デフォルト構成で生成されたinitramfsでネットワークブートが有効になる - https://github.com/dracut-ng/dracut-ng/pull/297 を参照。
  +
  +
* bash の代わりに busybox の使用を検討する:
  +
  +
* hostonly を検討する:
   
 
=== カーネルのアップグレード時に新しい initramfs を生成 ===
 
=== カーネルのアップグレード時に新しい initramfs を生成 ===
   
カーネルアップグレードがあるたびに自動的に initramfs イメージを新しく生成することができます。以下はデフォルトの {{Pkg|linux}} カーネルを前提していますが、他のカーネルでも同じようにフックを追加できます。
+
カーネルアップグレードるたびに、新しい initramfs イメージを自動的に生成することが可能です。ここでデフォルトの {{Pkg|linux}} カーネルにて説明しますが、他のカーネル用のフックを追加するのも簡単なはずです。
   
  +
{{Tip|{{AUR|dracut-hook}} パッケージは以下のようなフックとスクリプトを含んでいます。EFI 実行ファイルである initramfs イメージ (つまり {{ic|''esp''/EFI/Linux/linux-''kernel''-''machine_id''-''build_id''.efi}}) が欲しい場合は、代わりに {{AUR|dracut-uefi-hook}} か {{AUR|dracut-hook-uefi}} をインストールしたほうが良いでしょう。このディレクトリにある EFI バイナリは [[systemd-boot]] によって自動的に検出されるので、{{ic|/boot/loader/loader.conf}} にエントリを書く必要はありません。}}
カーネルのバージョンを確認するコマンドはやや複雑なので、[[pacman]] フックの中で単独で使うことはできません。したがってシステムのどこかにスクリプトを作成してください。例えば、以下のように {{ic|~/.local/bin}} に作成します:
 
   
  +
カーネルバージョンを調べるコマンドはやや複雑なので、[[pacman フック]]の中では単独では動きません。そのため、システム上の任意の場所にスクリプトを作成します。この例では {{ic|/usr/local/bin/}} に作成します。
{{hc|~/.local/bin/90-dracut-linux.script|
 
<nowiki>#!/bin/bash
 
   
  +
このスクリプトは、新しい {{ic|vmlinuz}} カーネルファイルを {{ic|/boot/}} にコピーします。これは、カーネルパッケージが {{ic|/boot/}} にファイルを配置しなくなったためです。[https://lists.archlinux.org/archives/list/arch-general@lists.archlinux.org/message/ZSO3ZLU2ATKBRLZBPOE3EHR6GS63RO3P/]
args=('-H' '--no-hostonly-cmdline')
 
  +
  +
{{hc|/usr/local/bin/dracut-install.sh|<nowiki>
  +
#!/usr/bin/env bash
  +
  +
args=('--force' '--no-hostonly-cmdline')
   
 
while read -r line; do
 
while read -r line; do
if [[ $line = usr/lib/modules/+([^/])/pkgbase ]]; then
+
if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then
mapfile -O ${#pkgbase[@]} -t pkgbase < "/$line"
+
read -r pkgbase < "/${line}"
kver=${line#"usr/lib/modules/"}
+
kver="${line#'usr/lib/modules/'}"
kver=${kver%"/pkgbase"}
+
kver="${kver%'/pkgbase'}"
  +
fi
 
  +
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
 
done
  +
</nowiki>}}
   
  +
{{hc|/usr/local/bin/dracut-remove.sh|<nowiki>
dracut "${args[@]}" -f /boot/initramfs-"${pkgbase[@]}".img --kver "${kver[@]}"
 
  +
#!/usr/bin/env bash
dracut -f /boot/initramfs-"${pkgbase[@]}"-fallback.img --kver "${kver[@]}"</nowiki>
 
  +
}}
 
  +
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
  +
</nowiki>}}
   
スクリプトは {{ic|chmod a+x ~/.local/bin/90-dracut-linux.script}} で実行可能権限を与えてください。フラグを追加したり削除したい場合、dracut の[[#設定|設定]]に追加してください
+
スクリプトを[[実行可能属性|実行可能にする]]必要があります。フラグを追加したり削除したりしたい場合、[[#詳細設定|dracut の設定ファイル]]に追加する必要があります
   
次に [[pacman]] フックを作成します:
+
次に[[pacman フック]]を作成します:
   
{{hc|/etc/pacman.d/hooks/90-dracut-linux.hook|
+
{{hc|/etc/pacman.d/hooks/90-dracut-install.hook|<nowiki>
<nowiki>[Trigger]
+
[Trigger]
Type = File
+
Type = Path
 
Operation = Install
 
Operation = Install
 
Operation = Upgrade
 
Operation = Upgrade
146行目: 591行目:
 
Description = Updating linux initcpios (with dracut!)...
 
Description = Updating linux initcpios (with dracut!)...
 
When = PostTransaction
 
When = PostTransaction
Exec = /home/username/.local/bin/90-dracut-linux.script
+
Exec = /usr/local/bin/dracut-install.sh
  +
Depends = dracut
NeedsTargets</nowiki>
 
  +
NeedsTargets
}}
 
  +
</nowiki>}}
   
  +
{{hc|/etc/pacman.d/hooks/60-dracut-remove.hook|<nowiki>
{{ic|username}} はあなたのユーザー名に置き換えてください。
 
  +
[Trigger]
  +
Type = Path
  +
Operation = Remove
  +
Target = usr/lib/modules/*/pkgbase
   
  +
[Action]
{{Pkg|mkinitcpio}} を削除するか以下のコマンドを実行することで[[mkinitcpio]] が initramfs イメージを生成するのを止めることができます:
 
  +
Description = Removing linux initcpios...
  +
When = PreTransaction
  +
Exec = /usr/local/bin/dracut-remove.sh
  +
NeedsTargets
  +
</nowiki>}}
  +
  +
{{Pkg|mkinitcpio}} を削除するか以下のコマンドを使って、[[mkinitcpio]] が initramfs イメージを作成したり削除するのも止める必要があります:
   
 
# ln -sf /dev/null /etc/pacman.d/hooks/90-mkinitcpio-install.hook
 
# 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 キーボードのサポート ===
また、カーネルのアップグレード時に毎回新しい {{ic|vmlinuz}} カーネルを {{ic|/usr/lib/modules/[kver]/vmlinuz}} から {{ic|/boot/vmlinuz-linux}} にコピーする必要があります。{{Pkg|linux}} パッケージではなく {{ic|90-mkinitcpio-install.hook}} によってコピーが行われているためです。[https://lists.archlinux.org/pipermail/arch-general/2019-October/047056.html arch-general メーリングリスト] より:
 
   
  +
Dracut は、Bluetooth キーボードが検出されると自動的に Bluetooth モジュールを有効にします。ただし、これには dracut が hostonly モードである必要があります。これはデフォルトではありません。
:カーネルはもはや自分自身を /boot にインストールしません。代わりに、mkinitcpio フックがインストールを実行します。それによって、以前と同じ挙動を少しだけ柔軟な形で再現しています。
 
:現在は dracut フックで同じような仕事をこなせるように作業していますが、今後は起動をより柔軟にして、ユーザーにより多くの選択肢が与えられるようにする予定です。Arch のアナウンスメーリングリストやウェブサイトのニュースから目を離さないでください。
 
   
  +
=== Limine ブートローダーのサポート ===
== トラブルシューティング ==
 
   
  +
{{AUR|limine-dracut-support}} パッケージは、[[Limine]] ブートローダーでのカーネルとブートエントリのインストールと削除を自動化するために、dracut と pacman フックを備えた [https://gitlab.com/Zesko/limine-entry-tool limine-entry-tool] を利用します。詳細については、[[Limine#ブートエントリの自動化]] を参照してください。
=== カーネルパラメータのスペース ===
 
   
  +
== トラブルシューティング ==
dracut は、 {{ic|1=root=}} および {{ic|1=resume=}} [[カーネルパラメータ]] にスペースを含む引用符付きの値をサポートしていません。 たとえば、 {{ic|1=root="PARTLABEL=ArchLinux"}} です。 [https://github.com/dracutdevs/dracut/issues/720 dracut issue720] を参照してください。
 
   
  +
=== ハイバネート ===
[[UUID]] などの別のブロックデバイス命名スキームを使用してパラメータを指定する必要があります。
 
   
  +
ハイバネートからの復帰がうまくいかない場合、{{ic|resume}} モジュールをイメージに含めるように {{ic|dracut}} を設定する必要がある場合があります。以下を[[#Dracut モジュール|設定ファイルに追加する]]必要があります:
=== ハイバネーション ===
 
 
休止状態からの再開が機能しない場合は、 {{ic|resume}} モジュールを含めるように dracut に [[#Configuration|構成ファイルを追加]] する必要があります:
 
   
 
{{hc|/etc/dracut.conf.d/resume-from-hibernate.conf|2=
 
{{hc|/etc/dracut.conf.d/resume-from-hibernate.conf|2=
add_dracutmodules+="resume"
+
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" ===
  +
  +
ブートの問題が発生する場合や、システムが {{ic|brllty}} の終了を待機するせいでシャットダウンに非常に長い時間が掛かる場合、以下を dracut の設定ファイルに追加してください:
  +
  +
omit_dracutmodules+=" brltty "
  +
  +
あるいは、{{Pkg|brltty}} が必要ない場合はアンインストールしてください。
  +
  +
=== No usable keyslot is available ===
  +
  +
Cannot use whirlpool hash for keyslot encryption.
  +
Keyslot open failed.
  +
No usable keyslot is available.
  +
  +
上記のようなメッセージが表示されてブートに失敗する場合、大抵、{{ic|add_dracutmodules}} に {{ic|crypt}} モジュールを追加するだけで解決します。しかし、このモジュールを追加した後もメッセージが表示され続ける場合、以下のように設定を変更する必要がある場合があります:
  +
  +
install_items+=" /usr/lib/ossl-modules/legacy.so "
  +
  +
これは、[[OpenSSL]] が whirlpool ハッシュ関数を非推奨にして、この関数を上記のライブラリに移動したせいです。Arch を使用する場合、dracut は自動的にこのライブラリを initramfs にインストールしません。
   
 
== 参照 ==
 
== 参照 ==
   
 
* [[Wikipedia:dracut (software)]]
 
* [[Wikipedia:dracut (software)]]
* [https://wiki.gentoo.org/wiki/Dracut Gentoo:Dracut]
+
* [[Gentoo:Dracut]]
  +
  +
{{TranslationStatus|dracut|2023-08-03|783287}}

2025年2月20日 (木) 03:47時点における最新版

関連記事

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 --add-confdir no-network /boot/initramfs-linux.img

hostonly モードを永続的に有効にするには (コマンドラインに含める必要がないように) dracut 設定に以下を追加します。

/etc/dracut.conf.d/hostonly.conf
hostonly="yes"
ノート: 場合によっては、特にシステムを初めてインストールする場合、上記のコマンドは機能しません。次のコマンドを使用してください。
# dracut --regenerate-all

フォールバック initramfs を生成するには、以下を実行します。

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

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

ノート: これらのコマンドで作成されたファイルには、インストールされているマイクロコードイメージが埋め込まれています。

追加オプション

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

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

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

詳細設定

初期 RAM ディスクフェーズ中の様々なタスクの実行方法には、2つの異なるアプローチがあることに注意することが重要です。

シェル (bash/busybox/dash) ベースの初期 RAM ディスク
init スクリプトが開始され、次に初期 RAM ディスクのファイルシステムをスキャンして実行される dracut スクリプトを検索します。
systemd ベース(デフォルト)の初期 RAM ディスク
systemd は初期 RAM ディスクフェーズの開始時にすでに開始されています。実行されるタスクは、通常の systemd ユニットファイルによって決定されます。systemdブートアッププロセスを参照してください。

具体的なバリアントは、systemd dracut モジュールの有無によって決定されます。詳細については、#dracut モジュールを参照してください。

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+=" systemd network "

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/ にファイルを配置しなくなったためです。[1]

/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 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。