「Mkinitcpio」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(自動検出ではなく autodetect の方が適切と思われる部分の修正)
(同期)
4行目: 4行目:
 
[[Category:Arch プロジェクト]]
 
[[Category:Arch プロジェクト]]
 
[[Category:コマンド]]
 
[[Category:コマンド]]
[[da:Mkinitcpio]]
 
 
[[de:Mkinitcpio]]
 
[[de:Mkinitcpio]]
 
[[en:Mkinitcpio]]
 
[[en:Mkinitcpio]]
[[es:Mkinitcpio]]
+
[[fr:Mkinitcpio]]
[[fr:mkinitcpio]]
+
[[pt:Mkinitcpio]]
[[id:Mkinitcpio]]
 
[[it:Mkinitcpio]]
 
 
[[ru:Mkinitcpio]]
 
[[ru:Mkinitcpio]]
 
[[zh-hans:Mkinitcpio]]
 
[[zh-hans:Mkinitcpio]]
21行目: 18行目:
 
{{Related|systemd}}
 
{{Related|systemd}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
[https://github.com/archlinux/mkinitcpio mkinitcpio] は[[Wikipedia:Initial ramdisk|初期 RAM ディスク]]環境を作成するために使われる Bash スクリプトです。{{man|8|mkinitcpio}} man ページより:
   
  +
:''initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして {{ic|init}} にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せたりすることが可能になります。''mkinitcpio'' はカスタムフックによって簡単に拡張することができ、実行時の自動検知など様々な機能を持っています。''
[https://projects.archlinux.org/mkinitcpio.git/ mkinitcpio] は [[Wikipedia:Initial ramdisk|initial ramdisk]] 環境を作成するために使われる Bash スクリプトです。{{man|8|mkinitcpio}} より:
 
 
:''initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして [[init]] にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せることが可能になります。mkinitcpio はカスタムフックによって簡単に拡張することができ、自動時の自動検知など様々な機能を持っています。''
 
   
 
伝統的には、[[Arch ブートプロセス|ブートプロセス]]の初めにハードウェアを検知したりタスクの初期化を行うのはカーネルで、それから root ファイルシステムがマウントされ {{ic|init}} にコントロールが移されます。しかしながら、先端技術が生まれるにつれ、こういった作業は複雑になりつつあります。
 
伝統的には、[[Arch ブートプロセス|ブートプロセス]]の初めにハードウェアを検知したりタスクの初期化を行うのはカーネルで、それから root ファイルシステムがマウントされ {{ic|init}} にコントロールが移されます。しかしながら、先端技術が生まれるにつれ、こういった作業は複雑になりつつあります。
   
今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのマニュファクチャーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペースへ管理を譲渡することです。
+
今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのメーカーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペース (初期RAMディスク) へ管理を譲渡することです。参照: [https://web.archive.org/web/20150430223035/http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ /dev/brain0 » Blog Archive » Early Userspace in Arch Linux]
参照: [https://web.archive.org/web/20150430223035/http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ /dev/brain0 » Blog Archive » Early Userspace in Arch Linux]。
 
   
mkinitcpio は Arch Linux デベロッパーとコミュニティの貢献によって開発されています。[https://projects.archlinux.org/mkinitcpio.git/ Git リポジトリ]を見て下さい。
+
''mkinitcpio'' は Arch Linux デベロッパーとコミュニティの貢献によって開発されています。[https://github.com/archlinux/mkinitcpio public Git リポジトリ]を見て下さい。
   
 
== インストール ==
 
== インストール ==
   
{{Pkg|mkinitcpio}} パッケージ[[公式リポジ]]で利用可能で {{Pkg|linux}} パッケージの依存パッケージなっていす。
+
{{Pkg|mkinitcpio}} パッケージ[[インスール]]してください。このパッケージは {{Pkg|linux}} の依存パッケージなっているので、大抵でにインストールされているでしょう
   
上級者は {{AUR|mkinitcpio-git}} パッケージで mkinitcpio の最新開発バージョンをインストールできます。
+
上級者は {{AUR|mkinitcpio-git}} パッケージで ''mkinitcpio'' の最新開発バージョンをインストールできます。
   
{{Note|Git から mkinitcpio を使う時は [https://lists.archlinux.org/listinfo/arch-projects arch-projects メーリングリスト]を購読することが''強く''推奨されます!}}
+
{{Note|Git から ''mkinitcpio'' を使う時は [https://lists.archlinux.org/mailman3/lists/arch-projects.lists.archlinux.org/ メーリングリスト]を購読することが '''強く''' 推奨されます!}}
   
 
== イメージ作成とアクティベーション ==
 
== イメージ作成とアクティベーション ==
45行目: 40行目:
 
=== 自動生成 ===
 
=== 自動生成 ===
   
カーネルがインストールまたはアップグレードされるたびに、[https://wiki.archlinux.jp/index.php/Pacman#.E3.83.95.E3.83.83.E3.82.AF pacman フック] は {{ic|/etc/mkinitcpio.d/}} に保存されている ''.preset'' ファイルを自動的に生成します。たとえば、公式の安定した {{Pkg|linux}} カーネルパッケージの場合は {{ic|linux.preset}} です。プリセットは、さまざまなパラメーターや出力ファイルの場所を手動で指定するのではなく、初期ramdiskイメージを作成するために必要な情報のリストです。
+
カーネルがインストールまたはアップグレードされるたびに、[[pacman フック]]は {{ic|/etc/mkinitcpio.d/}} に保存される ''.preset'' ファイルを自動的に生成します。えば、公式の安定 {{Pkg|linux}} カーネルパッケージの場合は {{ic|linux.preset}} です。プリセットは、様々なパラメーターや出力ファイルの場所を手動で指定する手間を省き、初期 RAM ディスクイメージを作成するために必要な情報のリストです。
デフォルトでは、2つのイメージを成するための手順が含まれています
+
デフォルトでは、2つのイメージを成するための命令が含まれています:
   
# mkinitcpio [[#設定]] で指定されたディレクティブに従って成された ''デフォルト'' の RAM ディスクイメージ、および
+
# ''デフォルト'' RAM ディスクイメージ。このイメージの内容は、mkinicpio の [[#設定]] で指定されたディレクティブに従って成されます。
 
# ''フォールバック'' RAM ディスクイメージ。作成時に ''autodetect'' フックがスキップされることを除いて上記と同じであるため、ほとんどのシステムをサポートするすべてのモジュールが含まれます。
 
# ''フォールバック'' RAM ディスクイメージ。作成時に ''autodetect'' フックがスキップされることを除いて上記と同じであるため、ほとんどのシステムをサポートするすべてのモジュールが含まれます。
   
57行目: 52行目:
 
=== 手動生成 ===
 
=== 手動生成 ===
   
スクリプトを手動で実行するには、手順について {{man|8|mkinitcpio}} のマニュアルページ参照してください。特に、カーネルパッケージによって提供されるプリセットを(再)生成するには、 {{ic|-p}}/{{ic|--preset}} オプションを使用してから、使用するプリセットを使用しますたとえば、 {{Pkg|linux}} パッケージの場合、次のコマンドを使用します。
+
スクリプトを手動で実行するには、マニュアルページ {{man|8|mkinitcpio}} で手順確認してください。特に、カーネルパッケージによって提供されるプリセットを(再)生成するには、使用するプリセットを {{ic|-p}}/{{ic|--preset}} オプションで指定してくださいえば、{{Pkg|linux}} パッケージの場合、次のコマンドを使用してください:
   
 
# mkinitcpio -p linux
 
# mkinitcpio -p linux
   
既存のすべてのプリセットを(再)生成するには、 {{ic|-P}}/{{ic|--allpresets}} スイッチを使用します。これは通常、グローバル [[#設定]] の変更後にすべての initramfs イメージを再生成するために使用されます
+
既存のすべてのプリセットを(再)生成するには、{{ic|-P}}/{{ic|--allpresets}} スイッチを使用してください。これは通常、グローバル [[#設定]] の変更後にすべての initramfs イメージを再生成するために使用されます:
   
 
# mkinitcpio -P
 
# mkinitcpio -P
   
ユーザーは、さまざまな構成で initramfs イメージをいくつでも作成できます。目的のイメージは、それぞれの [[ブートローダー]] 設定ファイルで指定する必要があります。
+
ユーザーは、さまざまな構成で initramfs イメージをいくつでも作成できます。生成したいイメージは、それぞれの[[ブートローダー]]設定ファイルで指定する必要があります。
   
=== カスタマイズされた生成 ===
+
=== 生成のカスタマイズ ===
   
ユーザーは、代替の設定ファイルを使用してイメージを生成できます。たとえば、次の例では、 {{ic|/etc/mkinitcpio-custom.conf}}指示に従って初期ramdiskイメージを生成し、 {{ic|/boot/initramfs-custom.img}} として保存します。
+
ユーザーは、代替の設定ファイルを使用してイメージを生成できます。次の例では、{{ic|/etc/mkinitcpio-custom.conf}} に記述されている指示に従って初期 RAM ディスクイメージを生成し、{{ic|/boot/initramfs-custom.img}} として保存します。
   
 
# mkinitcpio --config /etc/mkinitcpio-custom.conf --generate /boot/initramfs-custom.img
 
# mkinitcpio --config /etc/mkinitcpio-custom.conf --generate /boot/initramfs-custom.img
   
現在実行中のカーネル以外のカーネルのイメージを生成する場合は、カーネルリリースバージョンをコマンドラインに追加します。インストールされているカーネルリリースは {{ic|/usr/lib/modules/}} にあり、構文は各カーネルのコマンド{{ic|uname-r}} の出力と一致しています。
+
現在実行中のカーネル以外のカーネルのイメージを生成する場合は、カーネルリリースバージョンをコマンドラインに追加してください。インストールされているカーネルリリースは {{ic|/usr/lib/modules/}} にあり、構文は各カーネルのコマンド {{ic|uname -r}} の出力と一致しています。
   
 
# mkinitcpio --generate /boot/initramfs-custom2.img --kernel 5.7.12-arch1-1
 
# mkinitcpio --generate /boot/initramfs-custom2.img --kernel 5.7.12-arch1-1
83行目: 78行目:
 
== 設定 ==
 
== 設定 ==
   
''mkinitcpio'' の基本の設定ファイルは {{ic|/etc/mkinitcpio.conf}} です。さらに、カーネルパッケージによって提供されるプリセット定義が {{ic|/etc/mkinitcpio.d}} ディレクトリにあります (例: {{ic|/etc/mkinitcpio.d/linux.preset}})。
+
''mkinitcpio'' のプライマリ設定ファイルは{{ic|/etc/mkinitcpio.conf}} です。さらに、カーネルパッケージによって提供されるプリセット定義が {{ic|/etc/mkinitcpio.d}} ディレクトリにあります (例: {{ic|/etc/mkinitcpio.d/linux.preset}})。
   
  +
ユーザーは、設定ファイルの中にある6つの変数を変更できます (詳細は {{man|5|mkinitcpio.conf}} を見てください):
{{Warning|デフォルトでは ''lvm2'', ''mdadm'', ''encrypt'' は有効化されていません。これらのフックが必要なときは注意してこのセクションを読んで下さい。}}
 
   
  +
; {{ic|MODULES}}: ブートフックが実行される前にロードされるカーネルモジュール。
{{Note|ノード名が同一でカーネルモジュールが異なる複数のディスクコントローラを使っている場合 (例: 2つの SCSI/SATA または2つの IDE コントローラ)、{{ic|/etc/mkinitcpio.conf}} で指定するモジュールの順番が正しいことを確認して下さい。再起動で root デバイスの場所が変わってしまって、カーネルパニックが発生する可能性があります。また、[[永続的なブロックデバイスの命名]]を使えば正しいデバイスを確実にマウントすることができます。}}
 
 
{{Note|PS/2 キーボードを使っている場合: init でキーボード入力を使えるようにするには、{{ic|HOOKS}} に ''keyboard'' フックを追加してください。マザーボードによっては (特に旧世代のマザーボード)、i8042 コントローラが自動で検出されないことがあります。稀ですが、キーボードがないということもありえます。事前にこの状態を検出することができます。PS/2 端子があって {{ic|i8042: PNP: No PS/2 controller found. Probing ports directly}} メッセージが表示される場合、''atkbd'' を {{ic|MODULES}} に追加してください。}}
 
 
ユーザーは設定ファイルの中にある6つの変数を修正することが可能です:
 
 
; {{ic|MODULES}}: boot フックが実行される前にロードするべきカーネルモジュール。
 
 
; {{ic|BINARIES}}: initramfs イメージに含める追加のバイナリ。
 
; {{ic|BINARIES}}: initramfs イメージに含める追加のバイナリ。
 
; {{ic|FILES}}: initramfs イメージに含める追加のファイル。
 
; {{ic|FILES}}: initramfs イメージに含める追加のファイル。
; {{ic|HOOKS}}: フックは initial ramdisk で実行するスクリプトです。
+
; {{ic|HOOKS}}: フックは初期 RAM ディスクで実行するスクリプトです。
; {{ic|COMPRESSION}}: initramfs イメージを圧縮するに使れます。
+
; {{ic|COMPRESSION}}: initramfs イメージを圧縮するに使用されます。
; {{ic|COMPRESSION_OPTIONS}}: {{ic|COMPRESSION}} プログラムに渡すコマンドラインオプション。この設定の使用はあまり推奨されません。mkinitcpio は圧縮プログラムに特殊な細工を施すので (例: xz には {{ic|1=--check=crc32}} を指定します)、誤って利用するとシステムが起動できなくなる可能性があります。
+
; {{ic|COMPRESSION_OPTIONS}}: {{ic|COMPRESSION}} プログラムに渡す追加の引数。この設定の使用は推奨されません。''mkinitcpio'' は圧縮プログラムに特殊な細工を施すので (例: xz には {{ic|1=--check=crc32}} を指定します)、誤って利用するとシステムが起動できなくなる可能性があります。
  +
  +
{{Note|
  +
* システムが必要とする場合があるフックのいくつか ('''lvm2'''、'''mdadm_udev'''、'''encrypt''' など) は、デフォルトで '''有効化されていないません'''。これに関する指示は [[#HOOKS]] セクションを注意深く読んでください。
  +
* ノード名が同じだがカーネルモジュールが異なる複数のディスクコントローラを使っている場合 (例: 2つの SCSI/SATA または2つの IDE コントローラ)、正しいデバイスがマウントされることを保証するために、[[永続的なブロックデバイスの命名]]を使うべきです。さもないと、ルートデバイスの場所がブート毎に変わってしまい、その結果、カーネルパニックを引き起こす場合があります。
  +
}}
   
 
=== MODULES ===
 
=== MODULES ===
   
MODULES では何か他のことが行われる前にロードするモジュールを指定します。
+
{{ic|MODULES}} 配列では何か他のことが行われる前にロードするモジュールを指定します。
   
 
モジュールの後ろに {{ic|?}} を付けると、モジュールが見つからなかったときでもエラーを投げません。これは、フックや設定ファイルにリストアップされたモジュールを含んでコンパイルするカスタムカーネルで有益かもしれません。
 
モジュールの後ろに {{ic|?}} を付けると、モジュールが見つからなかったときでもエラーを投げません。これは、フックや設定ファイルにリストアップされたモジュールを含んでコンパイルするカスタムカーネルで有益かもしれません。
   
 
{{Note|
 
{{Note|
* ''reiser4'' を使う場合、モジュールのリスト必ず追加するようにてください
+
* '''reiser4''' を使う場合、そのモジュールを {{ic|MODULES}} 配列に追加''なければなりません''
* mkinitcpio 実行時ラブでないブトプロセスのにファイルシステム必要な場合 (例えば LUKS の暗号化キーファイルが ''ext2'' ファイルシステム上にあって mkinitcpio 実行には ''ext2'' ファイルシステムマウントしない場合)そのファイルシステムのモジュールも MODULES リストに追加する必要があります。詳しくは [[Dm-crypt/システム設定#cryptkey]] を参照}}
+
* '''encrypt''' や '''sd-encrypt''' を使用し、かつ ''mkinitcpio'' 実行されるシステムと生成されたジが使用されるシテムが異なる場合、システム起動中 LUKS デバイスをアンロックするために必要なキーボードモジュールやファイルシステムを {{ic|MODULES}} 配列に追加する必要があります。例えば、使用するキーファイルが ext2 ファイルシステム上にあるが、''mkinitcpio'' 実行されたときには ext2 ファイルシステムマウントされてなかった場合、{{ic|ext2}} 追加してください。詳は [[Dm-crypt/システム設定#cryptkey]] を見てください
  +
* LUKS デバイスをアンロックするために USB 3 ハブのキーボードを使いたい場合、{{ic|usbhid xhci_hcd}} を追加してください。
  +
* ドッキングステーションに接続されているディスプレイを使用する場合、initrd の出力を見えるようにするためにあなたのグラフィックカードのモジュールを追加する必要があるかもしれません (例: ほとんどの Intel カードでは {{ic|i915}})。
  +
}}
   
 
=== BINARIES と FILES ===
 
=== BINARIES と FILES ===
   
ユーザーはオプションを使ってイメージにファイルを追加することができます。{{ic|BINARIES}} と {{ic|FILES}} はフックが実行される前に追加され、フックによって使用されるファイルを上書きすることがあります。{{ic|BINARIES}} は標準の {{ic|PATH}} に自動で配置され、依存関係がパースされます。つまり必要なライブラリも全て追加されます。{{ic|FILES}} は''そのままの状態で'' (as-is) 追加されます。例:
+
以下のオプションを使ってイメージにファイルを追加することができます。{{ic|BINARIES}} と {{ic|FILES}} はフックが実行される前に追加され、フックによって使用/提供されるファイルを上書きすることがあります。{{ic|BINARIES}} は標準の {{ic|PATH}} に自動で配置され、依存関係がパースされます。つまり必要なライブラリも全て追加されます。{{ic|FILES}} は''そのままの状態で''追加されます。例:
   
 
FILES=(/etc/modprobe.d/modprobe.conf)
 
FILES=(/etc/modprobe.d/modprobe.conf)
118行目: 115行目:
 
BINARIES=(kexec)
 
BINARIES=(kexec)
   
{{ic|BINARIES}} と {{ic|FILES}} のどちら、スペースで区切ることで複数のエントリを追加することができます。
+
{{ic|BINARIES}} と {{ic|FILES}} は両方とも [[Bash]] 配列です。なので、スペースで区切ることで複数のエントリを追加することができます。
   
 
=== HOOKS ===
 
=== HOOKS ===
   
{{ic|HOOKS}} 設定は設定ファイルの中で一番重要な設定です。フックはイメージに追加されるものを記述する小さなスクリプトです。フックによっては、デーモンを起動したりスタックしたブロックデバイスを集めたりするためのランタイムコンポーネントを含んでいるものもあります。フックは名前によって参照され、設定ファイルの {{ic|HOOKS}} にある順番通りに実行されます。
+
{{ic|HOOKS}} 配列は設定ファイルの中で一番重要な設定です。フックはイメージに追加されるものを記述する小さなスクリプトです。フックによっては、デーモンを起動したりスタックしたブロックデバイスを集めたりするためのランタイムコンポーネントを含んでいるものもあります。フックは名前によって参照され、設定ファイルの {{ic|HOOKS}} にある順番通りに実行されます。
   
ほとんどのシンプルな、シングルディスクセットアップではデフォルトの {{ic|HOOKS}} 設定で十分なはずです。[[LVM]], [[mdadm]], [[dm-crypt]] などスタックした root デバイスやマルチブロックデバイスを使う時は、関連する wiki ページを見て必要な設定を調べて下さい。
+
ほとんどのシンプルな単一ディスク環境ではデフォルトの {{ic|HOOKS}} 設定で十分なはずです。[[LVM]][[RAID]][[dm-crypt]] などスタックルートデバイスやマルチブロックデバイスを使う時は、関連する wiki ページを見て必要な設定を調べて下さい。
   
 
==== ビルドフック ====
 
==== ビルドフック ====
   
ビルドフックは {{ic|/usr/lib/initcpio/install/}} にあります。カスタムビルドフックは {{ic|/etc/initcpio/install/}} に配置します。これらのファイルは mkinitcpio の実行時に bash シェルによって実行されます。ビルドフックには2つの関数が含まれています: {{ic|build}} と {{ic|help}}。{{ic|build}} 関数にはイメージに追加するモジュールファイルバイナリを記述します。これらのアイテムの追加を容易にする {{man|8|mkinitcpio}} による API が用意されています。{{ic|help}} 関数はフックの役割を出力します。
+
ビルドフックは {{ic|/usr/lib/initcpio/install/}} にあります。カスタムビルドフックは {{ic|/etc/initcpio/install/}} に配置します。これらのファイルは ''mkinitcpio'' の実行時に bash シェルによって実行されます。ビルドフックには2つの関数が含まれています: {{ic|build}} と {{ic|help}}。{{ic|build}} 関数にはイメージに追加するモジュールファイルバイナリを記述します。これらのアイテムの追加を容易にする {{man|8|mkinitcpio}} による API が用意されています。{{ic|help}} 関数はフックの役割を出力します。
   
 
すべてのフックを一覧するには:
 
すべてのフックを一覧するには:
134行目: 131行目:
 
$ mkinitcpio -L
 
$ mkinitcpio -L
   
特定のフックのヘルプを出力するには mkinitcpio の {{ic|-H}}/{{ic|--hookhelp}} オプションを使って下さい、例えば:
+
特定のフックのヘルプを出力するには ''mkinitcpio'' の {{ic|-H}}/{{ic|--hookhelp}} オプションを使って下さい、例えば:
   
 
$ mkinitcpio -H udev
 
$ mkinitcpio -H udev
144行目: 141行目:
 
{{ic|run_earlyhook}}: API ファイルシステムがマウントされカーネルコマンドラインがパースされたときに、この名前の関数が実行されます。一般的に udev など初期ユーザ空間が始まったときに必要になる追加のデーモンはこの関数に置きます。
 
{{ic|run_earlyhook}}: API ファイルシステムがマウントされカーネルコマンドラインがパースされたときに、この名前の関数が実行されます。一般的に udev など初期ユーザ空間が始まったときに必要になる追加のデーモンはこの関数に置きます。
   
{{ic|run_hook}}: 初期のフックの後すぐに、この名前の関数が実行されます。一番普通のフックポイントで、スタックブロックデバイスのアセンブリなどのオペレーションはここで行なって下さい。
+
{{ic|run_hook}}: 初期のフックの後すぐに、この名前の関数が実行されます。一番一般的なフックポイントで、スタックブロックデバイスのアセンブリなどのオペレーションはここで行なって下さい。
   
 
{{ic|run_latehook}}: root デバイスがマウントされた後、この名前の関数が実行されます。root デバイスの後のセットアップや {{ic|/usr}} など他のファイルシステムのマウントなどに控えめに使われます。
 
{{ic|run_latehook}}: root デバイスがマウントされた後、この名前の関数が実行されます。root デバイスの後のセットアップや {{ic|/usr}} など他のファイルシステムのマウントなどに控えめに使われます。
150行目: 147行目:
 
{{ic|run_cleanuphook}}: 出来る限り最後に、この名前の関数が実行されます。設定ファイルの {{ic|HOOKS}} の順番とは逆に実行されます。これらのフックは初期のフックによって起動したデーモンのシャットダウンなど、最後のクリーンアップに使われます。
 
{{ic|run_cleanuphook}}: 出来る限り最後に、この名前の関数が実行されます。設定ファイルの {{ic|HOOKS}} の順番とは逆に実行されます。これらのフックは初期のフックによって起動したデーモンのシャットダウンなど、最後のクリーンアップに使われます。
   
{{Note|ランタイムフックは busyboxinit でのみ使用されます。 '''systemd''' フックは systemd ベースの init をトリガーします。これはランタイムフックを実行せず、代わりに systemd ユニットを使用します。}}
+
{{Note|ランタイムフックは busybox init でのみ使用されます。 '''systemd''' フックは systemd ベースの init をトリガーします。これはランタイムフックを実行せず、代わりに systemd ユニットを使用します。}}
   
 
==== 通常のフック ====
 
==== 通常のフック ====
   
通常のフックとイメージ生成への影響と関連するランタイムを示した表です。パッケージにカスタムフックを入れることができるので、この表は完全ではないことに注意してください。
+
以下は、通常のフックとイメージ生成への影響と関連するランタイムを示した表です。パッケージにカスタムフックを入れることができるので、この表は完全ではないことに注意してください。
  +
  +
{{Expansion|Add info about {{ic|hostdata}}, {{ic|memdisk}}, {{ic|sleep}} and {{ic|strip}}, find out if {{ic|dmraid}}, etc. work/are needed for systemd based initramfs.|section=Improvements for the Common hooks table and section about systemd hook}}
   
 
{| class="wikitable"
 
{| class="wikitable"
|+ '''現行のフック'''
 
|-
 
 
! busybox init !! systemd init !! [[#ビルドフック|ビルドフック]] !! [[#ランタイムフック|ランタイムフック]] (busybox init のみ)
 
! busybox init !! systemd init !! [[#ビルドフック|ビルドフック]] !! [[#ランタイムフック|ランタイムフック]] (busybox init のみ)
 
|-
 
|-
|colspan="2" style="text-align: center;"| '''base''' || 全ての initial directory をセットアップし基本のユーティリティとライブラリをインストールす。何をしようとしているわからない限りはこのフックを番最初のフックしておいてください。'''systemd''' フックを使用している場合、busybox のリカバリシェル提供されます。 {{Note|initramfs の root アカウントが [https://github.com/archlinux/svntogit-packages/commit/776743d220cbb56e9abca2cc8bcef3a0ab7c8d0a locked] されてるため、リカバリシェルは使用できません。}}
+
|colspan="2" {{C|'''base'''}} || 全ての初期ディレクトリをセットアップし基本のユーティリティとライブラリをインストールします。'''systemd''' フックを使用していない場合、このフックは重要な busybox init を提供するので、何をしようとしているか理解していない限りはこのフックを常に1番最初にいてください。<br/>'''systemd''' フックを使用る場合、'''base''' フックは busybox のリカバリシェルのみを提供するので、'''base''' の追加は任意となります。{{Note|initramfs の root アカウントが[https://github.com/archlinux/svntogit-packages/commit/776743d220cbb56e9abca2cc8bcef3a0ab7c8d0a ロックされて]ため、リカバリシェルは使用できません。{{Bug|70408}} を見てください。}}
| --
+
| {{-}}
 
|-
 
|-
| style="text-align: center;"| '''udev''' ||rowspan="3" style="text-align: center;"| '''systemd''' || イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 || dev デーモンを起動してカーネルからの uevent を処理しますデバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。
+
| {{C|'''udev'''}} ||rowspan="3" {{C|'''systemd'''}} || イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 || udev デーモンを起動してカーネルからの uevent を処理します; デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。
 
|-
 
|-
| style="text-align: center;"| '''usr''' || {{ic|/usr}} の分割パーティションのサポートを追加。 || real root がマウントされた後に {{ic|/usr}} パーティションをマウントします。
+
| {{C|'''usr'''}} || {ic|/usr}} の分割パーティションのサポートを追加します詳細は [[#/usr を別のパーティションに分割する]] を見てください。 || 本物のルートファイルシステムがマウントされた後に {{ic|/usr}} パーティションをマウントします。
 
|-
 
|-
 
|-
 
|-
| style="text-align: center;"| '''resume''' || -- || "ハイバネート" (suspend to disk) 状態からの復帰を試みます。詳しい設定方法は[[ハイバネート]]を見てください。
+
| {{C|'''resume'''}} || {{-}} || "ハイバネート" (suspend to disk) 状態からの復帰を試みます。詳しい設定方法は [[ハイバネート]] を見てください。
 
|-
 
|-
| style="text-align: center;"| '''btrfs''' || {{Grey|--}} || root で [[Btrfs]] を有効にしてサブボリュを使用するために必要なモジュールを設定します。シングルデバイスで Btrfs を使うだけならこのフックは不要です。 || udev フックが存在しないときに {{ic|btrfs device scan}} を実行してマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには {{Pkg|btrfs-progs}} パッケージが必要です。
+
| {{C|'''btrfs'''}} || {{Grey|}} || [[Btrfs]] を有効にして、Btrfs でフォマットされた複数のデバイスを使用するために必要なモジュールを設定します。このフックを使うには、{{Pkg|btrfs-progs}} をインストールする必要があります。シングルデバイスで Btrfs を使うだけならこのフックは不要です。 || udev フックが存在しないときに {{ic|btrfs device scan}} を実行してマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには {{Pkg|btrfs-progs}} パッケージが必要です。
 
|-
 
|-
|colspan="2" style="text-align: center;"| '''autodetect''' || sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。'autodetect' より前に置かれたフックは完全にインストールされます。 || --
+
|colspan="2" {{C|'''autodetect'''}} || sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。'autodetect' より前に置かれたフックは完全にインストールされます。 || {{-}}
 
|-
 
|-
|colspan="2" style="text-align: center;"| '''modconf''' || {{ic|/etc/modprobe.d}} と {{ic|/usr/lib/modprobe.d/}} から modprobe 設定ファイルをロードします。 || --
+
|colspan="2" {{C|'''modconf'''}} || {{ic|/etc/modprobe.d/}} と {{ic|/usr/lib/modprobe.d/}} から modprobe 設定ファイルをロードします。 || {{-}}
 
|-
 
|-
|colspan="2" style="text-align: center;"| '''block''' || 全てのブロックデバイスモジュールを追加します。昔は ''fw'', ''mmc'', ''pata'', ''sata'', ''scsi'' , ''usb'', ''virtio'' フックに分かれていました。 || --
+
|colspan="2" {{C|'''block'''}} || 全てのブロックデバイスモジュールを追加します。昔は ''fw'', ''mmc'', ''pata'', ''sata'', ''scsi'' , ''usb'', ''virtio'' フックに分かれていました。 || {{-}}
 
|-
 
|-
| style="text-align: center;"| '''net''' || {{R|''未実装''}} || ネットワークデバイスに必要なモジュールを追加します。PCMCIA net デバイス''pcmcia'' フックも追加してください。 || NFS の root ファイルシステムの管理を提供します。
+
| {{C|'''net'''}} || {{Grey|''未実装''}} || ネットワークデバイスに必要なモジュールを追加します。このフックを使うには {{Pkg|mkinitcpio-nfs-utils}} トールしなければなりません。詳細[[#net を使う]] を見てください。 || NFS の root ファイルシステムの管理を提供します。
 
|-
 
|-
| style="text-align: center;"| '''dmraid''' || style="text-align: center;"| ''?'' || fakeRAID root デバイスのサポートを提供します。これを使うには {{Pkg|dmraid}} をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では ''mdadm_udev'' フックと一緒に {{ic|mdadm}} を使うことが推奨されます。 || {{ic|dmraid}} を使用して fakeRAID ブロックデバイスを構築します。
+
| {{C|'''dmraid'''}} || {{Grey|''?''}} || fakeRAID root デバイスのサポートを提供します。これを使うには {{Pkg|dmraid}} をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では ''mdadm_udev'' フックと一緒に [[mdadm]] を使うことが推奨されます。詳細は [[#RAID を使う]] を見てください。 || {{ic|dmraid}} を使用して fakeRAID ブロックデバイスを検索・構築します。
 
|-
 
|-
| style="text-align: center;"| '''mdadm''' || {{Grey|--}} || {{ic|/etc/mdadm.conf}} からの RAID アレイの構築や、起動中の自動検出のサポートを提供します。こを使うには {{Pkg|mdadm}} インストールが必須です。このフックよりも ''mdadm_udev'' フックが推奨されています。 || {{ic|mdassemble}} を使ってソフトウェア RAID ブロックデバイスを構築します。
+
|colspan="2" {{C|'''mdadm_udev'''}} || udev を使って RAID アレイの構築サポートします。このフックを使うには {{Pkg|mdadm}} インストールする必要あります。このフック FakeRAID アレイで使用する場合、{{ic|BINARIES}} に {{ic|mdmom}} を含めることが推奨されます。詳細は [[#RAID を使う]] を見てください。 || {{-}}
 
|-
 
|-
  +
|colspan="2" {{C|'''keyboard'''}} || キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。これは古い ''usbinput'' フックを置き換えました。
|colspan="2" style="text-align: center;"| '''mdadm_udev''' || udev による RAID アレイの構築のサポートを提供します。これを使うには {{Pkg|mdadm}} のインストールが必要です。[[FakeRAID]] アレイでこのフックを使う場合、binaries セクションに {{ic|mdmon}} を含めて ''shutdown'' フックを追加することが推奨されます。再起動時に不必要な RAID を再ビルドしないためです。 || {{ic|udev}} と {{ic|mdadm}} を使ってソフトウェア RAID ブロックデバイスを動的に構築します。mdadm アセンブリの推奨方法です (上記の ''mdadm'' フックを使うよりも)。
 
  +
|-
 
  +
{{Note|異なるハードウェア構成で起動されるシステム(たとえば、外部キーボードと内部キーボードを備えたラップトップまたは [[Wikipedia:Headless computer|headless systems]]) の場合、起動時にキーボードを利用できるようにするために (例えば、{{ic|encrypt}} フックが使用されている場合に暗号化済みデバイスをアンロックするために)、このフックを '''autodetect''' の前に配置する必要があります。}}
|colspan="2" style="text-align: center;"| '''keyboard''' || キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。
 
   
  +
| {{-}}
{{Tip|異なるハードウェア構成で起動されるシステム(たとえば、外部キーボードと内部キーボードを備えたラップトップまたは [[Wikipedia:Headless computer|headless systems]]) の場合、このフックを '''autodetect''' の前に配置すると便利です。 常にすべてのキーボードドライバを含めるため。 それ以外の場合、外部キーボードは、イメージの作成時に接続されている場合にのみ、初期のユーザースペースで機能します。}}
 
|| --
 
 
|-
 
|-
| style="text-align: center;"| '''keymap''' ||rowspan="2" style="text-align: center;"| '''sd-vconsole''' || {{ic|/etc/vconsole.conf}} から initramfs に指定したキーマップを追加します。システム暗号化 (特に[[Dm-crypt/システム全体の暗号化|完全なシステム暗号化]]) を使用する場合、{{ic|1=encrypt}} フックよりも前に追加するようにしてください。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップをロードします。
+
| {{C|'''keymap'''}} ||rowspan="2" {{C|'''sd-vconsole'''}} || {{ic|/etc/vconsole.conf}} から initramfs に指定した[[コンソールでのキーボード設定#永続的な設定|キーマップ]]を追加します。[[Dm-crypt/システム全体の暗号化|システム暗号化]]を使用する場合 (特にフルディスク暗号化) 、{{ic|1=encrypt}} フックよりも前に追加するようにしてください。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップをロードします。
 
|-
 
|-
| style="text-align: center;"| '''consolefont''' || {{ic|/etc/vconsole.conf}} から initramfs に指定したコンソールフォントを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたコンソールフォントをロードします。
+
| {{C|'''consolefont'''}} || {{ic|/etc/vconsole.conf}} から initramfs に指定した[[コンソールでのキーボード設定#永続的な設定|コンソールフォント]]を追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたコンソールフォントをロードします。
 
|-
 
|-
| style="text-align: center;"| '''encrypt''' || style="text-align: center;"| '''sd-encrypt''' || {{ic|dm_crypt}} カーネルモジュールと {{ic|cryptsetup}} ツールをイメージに追加します。これを使うには {{Pkg|cryptsetup}} をインストールする必要があります。 || 暗号化された root パーティションを検知してアンロックします。設定については [[#ランタイムのカスタマイズ]] を見て下さい。'''sd-encrypt''' については [[Dm-crypt/システム設定#sd-encrypt フックを使う]]を見てください。
+
| {{C|'''encrypt'''}} || {{C|'''sd-encrypt'''}} || {{ic|dm_crypt}} カーネルモジュールと {{ic|cryptsetup}} ツールをイメージに追加します。これを使うには {{Pkg|cryptsetup}} をインストールする必要があります。{{Note|暗号化されたデバイスを起動時にアンロックするための ''keyboard'' フックの注意書きや、ファイルをアンロックする際はファイルシステムについての [[#MODULES]] にある注意書きを見てください。}} || 暗号化された root パーティションを検知してアンロックします。設定については [[#ランタイムのカスタマイズ]] を見て下さい。
  +
'''sd-encrypt''' については [[Dm-crypt/システム設定#sd-encrypt フックを使う]]を見てください。
 
|-
 
|-
| style="text-align: center;"| '''lvm2''' || style="text-align: center;"| '''sd-lvm2''' || device mapper カーネルモジュールと {{ic|lvm}} ツールをイメージに追加します。これを使うには {{Pkg|lvm2}} をインストールする必要があります。 || 全ての LVM2 ボリュームグループを有効にします。root ファイルシステム [[LVM]] 上にる場合は必須です。
+
|colspan="2" {{C|'''lvm2'''}} || device mapper カーネルモジュールと {{ic|lvm}} ツールをイメージに追加します。これを使うには {{Pkg|lvm2}} をインストールする必要があります。ルーファイルシステム [[LVM]] 上に置いている場合、このフックは必須です。 || {{-}}
 
|-
 
|-
|colspan="2" style="text-align: center;"| '''fsck''' || fsck バイナリとファイルシステム有のヘルパーを追加します。''autodetect'' フックの後ろに追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は強く推奨されており、{{ic|/usr}} パーティションを分割する場合は必須です。 || root デバイス (と分割している場合は {{ic|/usr}}) 対してマウントする前に fsck 実行します。ブートローダー設定で問題ありませんが、疑問がある場合は [https://bbs.archlinux.org/viewtopic.php?pid=1307895#p1307895 こちら設定] を読んで下さい。
+
|colspan="2" {{C|'''fsck'''}} || fsck バイナリとファイルシステム有のヘルパーを追加し、マウント前にルードデバイスに対して fsck を実行できるようにします。'''autodetect''' フックの後ろにこのフックを追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は'''強く'''推奨されており、{{ic|/usr}} パーティションを分割する場合は必須です。このフックを含める場合、初期ユーザ空間でキーボードが動作することを保証するため必要なモジュールも追加すること強く推奨します。<br/>このフックを使用するには、[[カーネコマンドライン]]にパラメータ {{ic|rw}} を設定する必要がありま ([https://bbs.archlinux.org/viewtopic.php?pid=1307895#p1307895 議論])。詳細は [[fsck#ブート時チェック]] を見てください。 || {{-}}
 
|-
 
|-
|colspan="2" style="text-align: center;"| '''filesystems''' || イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを MODULES で指定していない限りこのフックが必要になります。 || --
+
|colspan="2" {{C|'''filesystems'''}} || イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを {{ic|MODULES}} で指定していない限りこのフックが'''必要'''になります。 || {{-}}
 
|-
 
|-
 
|}
 
|}
 
==== 廃止されたフック ====
 
{{Pkg|mkinitcpio}} 0.13.0 では、{{ic|usbinput}} フックは廃止され {{ic|keyboard}} フックを使うようになりました。
 
 
{{Pkg|mkinitcpio}} 0.12.0 では、以下のフックが廃止されました。以下のフックのどれかを使っているときは、{{ic|block}} フックに置き換える必要があります。
 
 
*{{ic|fw}}
 
*{{ic|mmc}}
 
*{{ic|pata}}
 
*{{ic|sata}}
 
*{{ic|scsi}}
 
*{{ic|usb}}
 
*{{ic|virtio}}
 
 
詳しくは、Git コミット [https://projects.archlinux.org/mkinitcpio.git/commit/?id=97368c0e78f3a4fe4d62f7aedde88d4be13bfdba 97368c0e78] や [https://mailman.archlinux.org/pipermail/arch-projects/2012-November/003426.html arch-projects メーリングリスト]を見て下さい。
 
   
 
=== COMPRESSION ===
 
=== COMPRESSION ===
   
カーネルは、 initramfs の圧縮にいくつかの形式をサポートしています: {{pkg|gzip}}、 {{pkg|bzip2}}、 lzma、 {{pkg|xz}}、 {{pkg|lzo}}、 {{pkg|lz4}} および {{pkg|zstd}} mkinitcpio はデフォルトで zstd 圧縮イメージを使用します。 zstd 圧縮はマルチスレッドモードで実行されます (検出されたコアと同じ数のスレッドを使用します。 {{ic|-T 0}} オプションを使用)
+
カーネルは、initramfs の圧縮にいくつかの形式をサポートしています: {{pkg|gzip}}、{{pkg|bzip2}}、lzma、{{Pkg|xz}}、{{Pkg|lzo}}、{{Pkg|lz4}}{{Pkg|zstd}}mkinitcpio はデフォルトで zstd 圧縮イメージを使用します。 zstd 圧縮はマルチスレッドモードで実行されます ({{ic|-T 0}} オプションが使用され、検出されたコアと同じ数のスレッドを使用します。)
   
提供されている {{ic|mkinitcpio.conf}} には、さまざまな {{ic|COMPRESSION}} オプションがコメントアウトされています。別の圧縮方法に切り替える場合は、コメントを解除し、対応する圧縮ユーティリティがインストールされていることを確認します。何も指定しない場合は、zstdのデフォルトのメソッドが使用されます。非圧縮イメージを作成する場合は、設定ファイルで {{ic|1=COMPRESSION='''cat'''}} を指定するか、コマンドラインで {{ic|-z cat}} を使用します。
+
提供されている {{ic|mkinitcpio.conf}} には、さまざまな {{ic|COMPRESSION}} オプションがコメントアウトされています。別の圧縮方法に切り替える場合は、コメントを解除し、対応する圧縮ユーティリティがインストールされていることを確認してください。何も指定しない場合は、zstd のデフォルトのメソッドが使用されます。非圧縮イメージを作成する場合は、設定ファイルで {{ic|1=COMPRESSION='''cat'''}} を指定するか、コマンドラインで {{ic|-z cat}} を使用します。
   
{{Tip|高圧縮モード (-9) のイメージの圧縮比は通常の約2.5で、解凍速度が非常に速いため、 '''lz4''' はより遅いシングルスレッド圧縮を犠牲にして最も速い解凍速度を実現します。わずかに優れた圧縮の、lzo も解凍が速いです。zstd は、マルチスレッド圧縮と、そのオプションを使用した幅広い圧縮レベルを備えた汎用的なソリューションを提供します。 {{man|1|zstd|Operation modifiers}} を参照してください。 xz は、解凍速度がはるかに遅くなりますが、高圧縮プリセット (-9) で約5の縮小係数で最小サイズを実現します。}}
+
{{Tip|高圧縮モード (-9) のイメージの圧縮比は通常の約2.5で、解凍速度が非常に速いため、lz4 はより遅いシングルスレッド圧縮を犠牲にして最も速い解凍速度を実現します。わずかに優れた圧縮の、lzo も解凍が速いです。zstd は、マルチスレッド圧縮と、そのオプションを使用した幅広い圧縮レベルを備えた汎用的なソリューションを提供します。 {{man|1|zstd|Operation modifiers}} を参照してください。 xz は、解凍速度がはるかに遅くなりますが、高圧縮プリセット (-9) で約5の縮小係数で最小サイズを実現します。}}
   
 
=== COMPRESSION_OPTIONS ===
 
=== COMPRESSION_OPTIONS ===
235行目: 217行目:
 
COMPRESSION_OPTIONS=(-9)
 
COMPRESSION_OPTIONS=(-9)
   
mkinitcpio はイメージを作成するときサポートされている圧縮方法に必要なフラグを渡すので、通常はこのオプションは必ありません。なお、カーネルが作成された圧縮ファイルを解凍できないとき、このオプションを使っていないとシステムをブートできなくなる可能性があります。
+
{{Note|''mkinitcpio'' はイメージを作成するときサポートされている圧縮方法に必要なフラグを渡すので、このオプションは必須ではありません。なお、カーネルが作成された圧縮ファイルを解凍できないとき、このオプションを使っていないと'''システムをブートできなくなる'''可能性があります。}}
   
 
== ランタイムのカスタマイズ ==
 
== ランタイムのカスタマイズ ==
   
  +
{{Expansion|Which options work with the {{ic|systemd}} hook and which are {{ic|base}}-only?}}
ランタイム設定オプションはカーネルコマンドラインを通して {{ic|init}} や特定のフックに渡すことができます。カーネルコマンドラインパラメータはブートローダによって与えられることがほとんどです。下で書かれているオプションをカーネルコマンドラインに追加することでデフォルトの挙動を変えることができます。詳しくは[[カーネルパラメータ]]や [[Arch ブートプロセス]]を見て下さい。
 
   
  +
ランタイム設定オプションはカーネルコマンドラインを通して {{ic|init}} や特定のフックに渡すことができます。カーネルコマンドラインパラメータはブートローダによって与えられることがほとんどです。下で書かれているオプションをカーネルコマンドラインに追加することでデフォルトの挙動を変えることができます。詳しくは [[カーネルパラメータ]] や [[Arch ブートプロセス]] を見て下さい。
=== init ===
 
   
  +
=== base フックの init ===
; {{ic|root}}: カーネルコマンドラインで指定する一番重要なパラメータであり、どのデバイスを root デバイスとしてマウントするかを決めます。mkinitcpio は柔軟に様々な形式を使うことができるようになっています、例:
 
root=/dev/sda1 # /dev node
 
root=LABEL=CorsairF80 # label
 
root=UUID=ea1c4959-406c-45d0-a144-912f4e86b207 # UUID
 
root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 # GPT partition UUID
 
   
  +
; {{ic|root}}: カーネルコマンドラインで指定する一番重要なパラメータであり、どのデバイスを root デバイスとしてマウントするかを決めます。''mkinitcpio'' は柔軟に様々な形式を使うことができるようになっています。例えば: {{bc|1=<nowiki>
{{Note|以下のブートパラメーターは initramfs 環境における {{ic|init}} のデフォルトの挙動を変更します。詳しくは {{ic|/usr/lib/initcpio/init}} を参照。{{ic|systemd}} フックが使われている場合 {{ic|base}} フックの {{ic|init}} は置き換わるため機能しません。}}
 
  +
root=/dev/sda1 # /dev node
  +
root=LABEL=CorsairF80 # label
  +
root=UUID=ea1c4959-406c-45d0-a144-912f4e86b207 # UUID
  +
root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 # GPT partition UUID</nowiki>
  +
}} {{Note|以下のブートパラメーターは initramfs 環境における {{ic|init}} のデフォルトの挙動を変更します。詳しくは {{ic|/usr/lib/initcpio/init}} を参照。{{ic|systemd}} フックが使われている場合 {{ic|base}} フックの {{ic|init}} は置き換わるため機能しません。}}
   
; {{ic|break}}: {{ic|<nowiki>break</nowiki>}} や {{ic|<nowiki>break=premount</nowiki>}} が指定された場合、(フックをロードした後、root ファイルシステムをマウントする前に) {{ic|init}} はブートプロセスを停止してトラブルシューティングに使うことができるインタラクティブシェルを起動します。{{ic|<nowiki>break=postmount</nowiki>}} と指定することで root がマウントされた後にこのシェルを起動することもできます。シェルを終了すると通常通りに起動が行われます。
+
; {{ic|break}}: {{ic|break}} や {{ic|1=break=premount}} が指定された場合、(フックをロードした後、root ファイルシステムをマウントする前に) {{ic|init}} はブートプロセスを停止してトラブルシューティングに使うことができるインタラクティブシェルを起動します。{{ic|1=break=postmount}} と指定することで root がマウントされた後にこのシェルを起動することもできます。シェルを終了すると通常通りに起動が行われます。
   
; {{ic|disablehooks}}: {{ic|<nowiki>disablehooks=hook1{,hook2,...}</nowiki>}} を追加すると実行時にフックを無効化します。例: {{bc|1=disablehooks=resume}}
+
; {{ic|disablehooks}}: {{ic|1=disablehooks=hook1[,hook2,...]}} を追加すると実行時にフックを無効化します。例: {{bc|1=disablehooks=resume}}
   
; {{ic|earlymodules}}: {{ic|<nowiki>earlymodules=mod1{,mod2,...}</nowiki>}} という風に先にロードするモジュールを指定することでモジュールがロードされる順番を変更することができます (例えば、複数のネットワークインターフェイスの順番を適切に確定したいときなどに使います)。
+
; {{ic|earlymodules}}: {{ic|1=earlymodules=mod1[,mod2,...]}} という風に先にロードするモジュールを指定することでモジュールがロードされる順番を変更することができます (例えば、複数のネットワークインターフェイスの順番を適切に確定したいときなどに使います)。
   
  +
他のパラメータについては [[ブートデバッグ]] や {{man|8|mkinitcpio}} を見て下さい。
; {{ic|rootdelay&#61;N}}: {{ic|rootdelay}} を追加すると root ファイルシステムをマウントする前に {{ic|N}} 秒間だけ停止します (例えば、初期化に時間がかかる USB ハードドライブから起動するときなどに使います)。
 
 
他のパラメータについては[[ブートデバッグ]]や {{man|8|mkinitcpio}} を見て下さい。
 
   
 
=== RAID を使う ===
 
=== RAID を使う ===
   
  +
[[RAID#mdadm フックを mkinitcpio.conf に追加する]] を見てください。
{{Note|{{ic|mdadm}} は推奨されません。更新時に {{ic|1===> WARNING: Hook 'mdadm' is deprecated. Replace it with 'mdadm_udev' in your config}} が表示されます。}}
 
   
  +
=== net を使う ===
まず、{{ic|/etc/mkinitcpio.conf}} 内の {{ic|HOOKS}} に {{ic|mdadm_udev}} または {{ic|mdadm}} フックを追加し、必要な RAID モジュール全て (例: raid456, ext4) を {{ic|MODULES}} に追加して下さい。
 
   
  +
{{Note|NFSv4 はまだサポートされていません {{Bug|28287}}。}}
{{ic|mdadm}} フックを使う場合、[[カーネルパラメータ]]で RAID アレイを設定する必要はありません。{{ic|mdadm}} フックは {{ic|/etc/mdadm.conf}} ファイルを使うか、またはブート時の init 段階でアレイを自動で検出します。
 
   
  +
'''必要なパッケージ'''
{{ic|mdadm_udev}} フックを使うことで udev による構築も可能です。上流ではこの方法が推奨されています。{{ic|/etc/mdadm.conf}} は構築されたデバイスに名前を付けるために読み込まれます。
 
   
  +
{{ic|net}} は {{Pkg|mkinitcpio-nfs-utils}} パッケージを必要とします。
=== net を使う ===
 
   
  +
'''カーネルパラメータ'''
{{Warning|NFSv4 はまだサポートされていません ({{Bug|28287}})。}}
 
   
  +
公式の[https://docs.kernel.org/admin-guide/nfs/nfsroot.html カーネルドキュメント]に包括的で最新の情報が載っています。
'''必要なパッケージ:'''
 
 
{{ic|net}} は {{Pkg|mkinitcpio-nfs-utils}} パッケージを必要とします。
 
   
  +
'''ip='''
'''カーネルパラメータ:'''
 
   
  +
このパラメータはカーネルに、デバイスの IP アドレスの設定方法と、IP ルーティングテーブルの設定方法を指定します。コロンで区切った9つまでの引数を指定できます: {{ic|1=ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip>}}。
公式の[https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt カーネルドキュメント]に最新の情報が載っています。
 
   
  +
カーネルコマンドラインにこのパラメータが存在しなかった場合、全てのフィールドが空とされて、[https://docs.kernel.org/admin-guide/nfs/nfsroot.html カーネルドキュメント]に書かれているデフォルト設定が適用されます。一般的にはカーネルは自動設定を使って全てを設定しようとします。
'''ip='''
 
   
  +
{{ic|<autoconf>}} パラメータは {{ic|ip}} パラメータの唯一の値として指定できます (前の全ての {{ic|:}} 文字を排除)。値が {{ic|1=ip=off}} や {{ic|1=ip=none}} の場合、自動設定は行われません。そうでないなら、自動的に設定されます。最も一般的な使い方は {{ic|1=ip=dhcp}} です。
このパラメータはカーネルに、デバイスの IP アドレスの設定方法と、IP ルーティングテーブルの設定方法を指定します。コロンで区切った9つの引数を指定できます: {{ic|1=ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>}}。
 
   
カーネルコマンドラインにこのパラメータが存在しなかった場合、全てフィールドが空とされて、[https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt カーネルドキュメント]に書かれているデフォルト設定が適用されます。一般的にはカーネルは自動設定を使って全てを設定しようとします
+
パラメータの説明は、[https://docs.kernel.org/admin-guide/nfs/nfsroot.html カーネルドキュメント]を参照しください。
   
  +
例:
{{ic|<autoconf>}} パラメータは 'ip' パラメータの唯一の値として指定できます (前の全ての ':' 文字を排除)。値が {{ic|1=ip=off}} や {{ic|1=ip=none}} の場合、自動設定は行われません。そうでないなら、自動的に設定されます。最も一般的な使い方は {{ic|1=ip=dhcp}} です。
 
   
  +
ip=127.0.0.1:::::lo:none --> ループバックインターフェイスを有効化。
パラメータの説明は、[https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt カーネルドキュメント]を参照してください。
 
  +
ip=192.168.1.1:::::eth2:none --> 静的 eth2 インターフェイスを有効化。
 
  +
ip=:::::eth0:dhcp --> eth0 構成に対して dhcp プロトコルを有効化。
; 例
 
ip=127.0.0.1:::::lo:none --> Enable the loopback interface.
 
ip=192.168.1.1:::::eth2:none --> Enable static eth2 interface.
 
ip=:::::eth0:dhcp --> Enable dhcp protocol for eth0 configuration.
 
   
{{Note|{{ic|<device>}} パラメータにはカーネルのデバイス名を使用してください (例: ''eth0'')、[[ネットワーク設定#デバイス|udev]] のデバイス名 (例: ''enp2s0'') では動作しません。}}
+
{{Note|{{ic|<device>}} パラメータにはカーネルのデバイス名を使用してください (例: {{ic|eth0}})、永続的なのデバイス名 (例: {{ic|enp2s0}}) では動作しません。詳細は [[ネットワーク設定#ネットワークインターフェイス]] を見てください。}}
   
 
'''BOOTIF='''
 
'''BOOTIF='''
   
複数のネットワークカードを使っているときは、このパラメータに起動するインターフェイスの MAC アドレスを含めることができます。インターフェイスの数字が変わってしまったり、pxelinux の IPAPPEND 2 や IPAPPEND 3 オプションを使うときに便利です。指定しなかった場合、eth0 が使われます。
+
複数のネットワークカードを使っているときは、このパラメータに起動するインターフェイスの MAC アドレスを含めることができます。インターフェイスの数字が変わってしまったり、pxelinux の IPAPPEND 2 や IPAPPEND 3 オプションを使うときに便利です。指定しなかった場合、{{ic|eth0}} が使われます。
   
''例:''
+
例:
  +
BOOTIF=01-A1-B2-C3-D4-E5-F6 # Note the prepended "01-" and capital letters.
 
  +
BOOTIF=01-A1-B2-C3-D4-E5-F6 # 先頭の "01-" と大文字に注意
   
 
'''nfsroot='''
 
'''nfsroot='''
315行目: 292行目:
 
パラメータの説明を見るには {{ic|mkinitcpio -H net}} を実行してください。
 
パラメータの説明を見るには {{ic|mkinitcpio -H net}} を実行してください。
   
  +
=== LVM を使う ===
'''root=/dev/nfs'''
 
 
{{ic|nfsroot}} パラメータを使わない場合、{{ic|1=root=/dev/nfs}} を設定して自動設定により NFS root から起動するようにする必要があります。
 
 
=== LVM を使う ===
 
   
root デバイスを [[LVM]] 上に置く場合は、[[LVM#mkinitcpio.conf の設定|lvm2 フック mkinitcpio.conf に追加する]]必要があります
+
root デバイスを [[LVM]] 上に置く場合は、[[LVM#mkinitcpio.conf の設定]]見てください
   
=== 暗号化された root を使う ===
+
=== 暗号化されたルートを使う ===
   
[[Dm-crypt/システム全体の暗号化|root を暗号化]]している場合、{{ic|filesystems}} 前に {{ic|encrypt}} フックを追加す必要があり、他のフックも必要なりま。ブートローダーによって特定のカーネルコマンドラインパラメータを指定しくてはなりません: 詳しくは [[Dm-crypt/システム設定#mkinitcpio]] を見て下さい。
+
[[Dm-crypt/システム全体の暗号化|root を暗号化]]している場合、のフックを含めべきかる詳細情報は [[Dm-crypt/システム設定#mkinitcpio]] を見て下さい。
   
=== /usr パーティション分割する ===
+
=== /usr を別のパーティション分割する ===
   
 
{{ic|/usr}} のパーティションを別にする場合、以下を行う必要があります:
 
{{ic|/usr}} のパーティションを別にする場合、以下を行う必要があります:
   
* {{ic|fsck}} フックを追加して、{{ic|/etc/fstab}} で {{ic|/usr}} の {{ic|passno}} を {{ic|0}} にする。起動時に {{ic|/usr}} を fsck したい場合は必須です。このフックが存在しないと、{{ic|/usr}} は永遠に fsck されません。
+
* 起動時にこのパーティションのチェックを実行するために、{{ic|fsck}} フックを追加して、{{ic|/etc/fstab}} で {{ic|/usr}} の {{ic|passno}} を {{ic|2}} にする。起動時に {{ic|/usr}} を fsck したい場合は必須です (これはすべてのユーザに推奨されます)。このフックが存在しないと、{{ic|/usr}} は永遠に fsck されません。
* systemd フックを使っていない場合、{{ic|usr}} フックを追加。ルートがマウントされた後に {{ic|/usr}} パーティションがマウントされるようになります。0.9.0 以前では、{{ic|/usr}} はルートの {{ic|/etc/fstab}} で確認されたら自動的にマウントされていました。[[Fstab]] を参照
+
* systemd フックを使っていない場合、{{ic|usr}} フックを追加する。ルートがマウントされた後に {{ic|/usr}} パーティションがマウントされるようになります。
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
340行目: 313行目:
 
initramfs イメージの中に何が入っているか気になるときは、イメージを展開して中に入っているファイルを調べることができます。
 
initramfs イメージの中に何が入っているか気になるときは、イメージを展開して中に入っているファイルを調べることができます。
   
initramfs イメージは SVR4 CPIO アーカイブであり、{{ic|find}} と {{ic|bsdcpio}} コマンドによって生成されています。また、任意でカーネルが対応した圧縮方法によって圧縮されています。圧縮方法について詳しくは [[#COMPRESSION]] を見て下さい。
+
initramfs イメージは SVR4 CPIO アーカイブであり、{{ic|find}} と {{ic|bsdcpio}} コマンドによって生成されています。また、任意でカーネルが対応した圧縮方法によって圧縮されています。圧縮方法について詳しくは [[#COMPRESSION]] を見て下さい。
   
mkinitcpio には {{ic|lsinitcpio}} というユーティリティが含まれており initramfs イメージの中身を一覧・展開することができます。
+
''mkinitcpio'' には {{man|1|lsinitcpio}} というユーティリティが含まれており initramfs イメージの中身を一覧・展開することができます。
   
 
イメージ内のファイルを一覧するには:
 
イメージ内のファイルを一覧するには:
$ lsinitcpio /boot/initramfs-linux.img
 
   
  +
# lsinitcpio /boot/initramfs-linux.img
作業ディレクトリにファイルを全て展開するには:
 
  +
$ lsinitcpio -x /boot/initramfs-linux.img
 
  +
カレントディレクトリにファイルを全て展開するには:
  +
  +
# lsinitcpio -x /boot/initramfs-linux.img
   
 
イメージの重要なパーツについて読みやすいリストを取得することもできます:
 
イメージの重要なパーツについて読みやすいリストを取得することもできます:
  +
$ lsinitcpio -a /boot/initramfs-linux.img
 
  +
# lsinitcpio -a /boot/initramfs-linux.img
   
 
=== 展開して修正を加えたイメージの再圧縮 ===
 
=== 展開して修正を加えたイメージの再圧縮 ===
上記のようにイメージを展開してから修正を加えたら、再圧縮に必要なコマンドを確認します。{{ic|/usr/bin/mkinitcpio}} を編集して以下のように行を変更してください (mkinitcpio v20-1 の場合は531行目):
 
#MKINITCPIO_PROCESS_PRESET=1 "$0" "${preset_cmd[@]}"
 
MKINITCPIO_PROCESS_PRESET=1 /usr/bin/bash -x "$0" "${preset_cmd[@]}"
 
   
そして通常のオプションで {{ic|mkinitcpio}} を実行 ({{ic|mkinitcpio -p linux}}) すると、最後の20行に以下のような表示がれます:
+
{{ic|/usr/bin/mkinitcpio}} スクリプトの {{ic|build_image}} 関数を以下のパラメータで実行してくだ:
+ find -mindepth 1 -printf '%P\0'
 
+ LANG=C
 
+ bsdcpio -0 -o -H newc --quiet
 
+ gzip
 
   
  +
build_image ''出力ファイル'' ''圧縮方式''
上記の出力が再圧縮するのに必要なコマンドになります。例:
 
# find -mindepth 1 -printf '%P\0' | LANG=C bsdcpio -0 -o -H newc --quiet | gzip > /boot/initramfs-linux.img
 
   
  +
{{ic|build_image}} 関数の内容で新しいスクリプトを作成することでこれを実行できます。
{{Warning|上書きするまえに自動生成された {{ic|/boot/initramfs-linux.img}} の名前を変更することで、簡単に元に戻すことができるようになります。何か問題が発生して起動できなくなった場合、フォールバックイメージやブート CD で起動して、{{ic|mkinitcpio}} を実行して元のイメージに戻してください。}}
 
  +
これはカレントディレクトリ内の内容を {{ic|''出力ファイル''}} というファイルに圧縮します。
  +
  +
{{Warning|上書きするまえに自動生成された {{ic|/boot/initramfs-linux.img}} の名前を変更することで、簡単に元に戻すことができるようになります。何か問題が発生して起動できなくなった場合、フォールバックイメージやブート CD で起動して、{{ic|mkinitcpio}} を実行して元のイメージに戻してください。あるいは、自分で修正してイメージを再圧縮してください。}}
   
 
=== マウントされているのに "/dev must be mounted" と表示される ===
 
=== マウントされているのに "/dev must be mounted" と表示される ===
{{ic|/dev}} がマウントされているかどうか確認するのに mkinitcpio は {{ic|/dev/fd/}} が存在するかどうかを確かめます。問題がないようでしたら、手動で作成することができます:
 
# ln -s /proc/self/fd /dev/
 
   
  +
{{ic|/dev}} がマウントされているかどうか確認するために mkinitcpio は {{ic|/dev/fd/}} が存在するかどうかを確かめます。問題がないようでしたら、手動で作成することができます:
当然 {{ic|/proc}} のマウントも必要です。mkinitcpio によって次にチェックされます。
 
   
  +
# ln -s /proc/self/fd /dev/
=== LUKS/LVM/resume セットアップで systemd フックを使う ===
 
  +
伝統的な {{ic|encrypt}}/{{ic|lvm2}}/{{ic|resume}} の代わりに {{ic|systemd}}/{{ic|sd-encrypt}}/{{ic|sd-lvm2}} フックを使う場合、ブートローダーで別の initrd パラメータを渡す必要があります。詳しくはフォーラムの投稿を見て下さい [https://bbs.archlinux.org/viewtopic.php?pid=1480241]。
 
  +
(当然 {{ic|/proc}} のマウントも必要です。''mkinitcpio'' によって次にチェックされます。)
   
 
=== Possibly missing firmware for module XXXX ===
 
=== Possibly missing firmware for module XXXX ===
382行目: 352行目:
 
カーネルのアップデート後に initramfs を再生成する際、以下のような警告が表示されることがあります:
 
カーネルのアップデート後に initramfs を再生成する際、以下のような警告が表示されることがあります:
   
  +
==> WARNING: Possibly missing firmware for module: wd719x
 
==> WARNING: Possibly missing firmware for module: aic94xx
 
==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: wd719x
+
==> WARNING: Possibly missing firmware for module: xhci_pci
   
  +
''デフォルト''の initramfs イメージを生成するときに同じようなメッセージが表示される場合、警告メッセージが言っている通り、追加のファームウェアをインストールする必要があるかもしれません。ほとんどの一般的なファームウェアファイルは {{Pkg|linux-firmware}} パッケージを[[インストール]]することで入手できます。ファームウェアを提供する他のパッケージについては、以下の表を見るか、[[公式リポジトリ]]や [[AUR]] でモジュール名を検索してみてください。
ファームウェアモジュールをインストールしていない Arch Linux ユーザーなら誰でも表示されます。ファームウェアを使用するハードウェアを使っていない場合、上記のメッセージは無視してかまいません。
 
2022年1月30日現在において、aic94xx、wd719x、xhci_pciモジュールについては表示を抑えることができます。
 
aic94xxモジュール向けに{{AUR|aic94xx-firmware}}を、wd719xモジュール向けに{{AUR|wd719x-firmware}}を、xhci_pci向けに{{AUR|upd72020x-fw}}をそれぞれインストールしてください。
 
詳しくは[https://gist.github.com/imrvelj/c65cd5ca7f5505a65e59204f5a3f7a6d こちらの議論]を参照してください。
 
   
  +
メッセージが''フォールバック'' initramfs イメージの生成時にのみ表示される場合は、以下の2つの選択肢があります:
殆どのファームウェアについては、''linux-firmware''パッケージを[[インストール]]することにより入手することができます。
 
  +
他のパッケージについては、[[公式リポジトリ]]または[[AUR]]にてモジュール名を検索してください。
 
  +
* 影響を受けるハードウェアを使用しないことがわかっている場合は、警告を安全に無視できます。
  +
* 警告を抑制したい場合、不足しているファームウェアをインストールできます。メタパッケージ {{AUR|mkinitcpio-firmware}} には、ほどんどのオプションのファームウェアが含まれています。あるいは、手動で必要なパッケージをインストールしてください:
  +
:{| class="wikitable"
  +
|-
  +
! モジュール !! パッケージ
  +
|-
  +
| aic94xx || {{AUR|aic94xx-firmware}}
  +
|-
  +
| bfa || {{Pkg|linux-firmware-qlogic}}
  +
|-
  +
| bnx2x || {{Pkg|linux-firmware-bnx2x}}
  +
|-
  +
| liquidio || {{Pkg|linux-firmware-liquidio}}
  +
|-
  +
| mlxsw_spectrum || {{Pkg|linux-firmware-mellanox}}
  +
|-
  +
| nfp || {{Pkg|linux-firmware-nfp}}
  +
|-
  +
| qat_4xxx || ファームウェアは未だ利用できず。
  +
|-
  +
| qed || {{Pkg|linux-firmware-qlogic}}
  +
|-
  +
| qla1280 || {{Pkg|linux-firmware-qlogic}}
  +
|-
  +
| qla2xxx || {{Pkg|linux-firmware-qlogic}}
  +
|-
  +
| wd719x || {{AUR|wd719x-firmware}}
  +
|-
  +
| xhci_pci || {{AUR|upd72020x-fw}}
  +
|}
  +
* 警告を取り除きたいが、必要ないファームウェアパッケージのためにシステムの空き領域を無駄にしたくない場合、フォールバック initramfs の生成を無効化することができます:
  +
*# {{ic|/etc/mkinitcpio.d/}} 内のすべての ''.preset'' ファイルで、{{ic|1=PRESETS=('default' 'fallback')}} 行を {{ic|1=PRESETS=('default')}} に変更してください。
  +
*# フォールバック initramfs イメージを削除してください: {{ic|# rm /boot/*-fallback.img}}。
  +
*# ブートローダの設定ファイルを再生成してください (例えば、[[GRUB]] の場合: {{ic|# grub-mkconfig -o /boot/grub/grub.cfg}})。
  +
:{{Warning|フォールバック initramfs の生成を無効化すると、デフォルトの initramfs でシステムの起動が失敗した場合に、システムを起動するためのもう一つの手段が失われることになります。上記の手順を実行する前に、システムリカバリのための起動可能[[USB インストールメディア|インストールメディア]]を作成しておいてください。}}
  +
  +
=== No PS/2 controller found ===
  +
  +
一部のマザーボードで (ほとんどの場合、古いもの。しかし、一部の新しいものでも起こります)、i8042 コントローラが自動検出できません。稀なケースですが、キーボードが使えなくなってしまうことがあります。この状況を事前に察知することができます。PS/2 ポートがあり、{{ic|i8042: PNP: No PS/2 controller found. Probing ports directly}} というメッセージが表示される場合、{{ic|MODULES}} 配列に '''atkbd''' を追加してください。
   
 
=== 標準的なレスキュー手順 ===
 
=== 標準的なレスキュー手順 ===
   
不適切な初期 RAM ディスクを使用すると、システムが起動できなくなることがよくあります。 したがって、以下のようなシステムレスキュー手順に従ってください
+
不適切な初期 RAM ディスクを使用すると、システムが起動できなくなることがよくあります。 したがって、以下のようなシステムレスキュー手順に従ってください:
   
 
==== あるマシンでは起動できるが他のマシンでは起動できない ====
 
==== あるマシンでは起動できるが他のマシンでは起動できない ====
  +
''mkinitcpio'' の {{ic|autodetect}} フックは {{ic|/sys}} をスキャンしてロードされているカーネルモジュールを確認して不要な[[カーネルモジュール]]を排除します。{{ic|/boot}} ディレクトリを他のマシンに移動して、初期ユーザー空間でブートが失敗する場合、カーネルモジュールが存在しないために新しいハードウェアが検出されていないのが原因かもしれません。USB 2.0 と 3.0 では必要なカーネルモジュールが異なるので注意してください。
 
  +
''mkinitcpio'' の {{ic|autodetect}} フックは {{ic|/sys}} をスキャンして、ロードされている[[カーネルモジュール]]を確認して不要なカーネルモジュールを排除します。{{ic|/boot}} ディレクトリを他のマシンに移動して、初期ユーザー空間でブートが失敗する場合、カーネルモジュールが存在しないために新しいハードウェアが検出されていないのが原因かもしれません。USB 2.0 と 3.0 では必要なカーネルモジュールが異なるので注意してください。
   
 
修正するには、[[ブートローダー]]から [[#イメージ作成とアクティベーション|fallback]] イメージを選択してください (fallback は {{ic|autodetect}} によるフィルタリングがされていません)。起動したら、新しいマシンで ''mkinitcpio'' を実行して適切なモジュールでイメージを再生成してください。fallback イメージで起動できない場合、Arch Linux のライブ CD/USB で起動して、chroot し、新しいマシンで ''mkinitcpio'' を実行して下さい。それでも駄目な場合、initramfs にモジュールを[[#MODULES|手動]]で追加します。
 
修正するには、[[ブートローダー]]から [[#イメージ作成とアクティベーション|fallback]] イメージを選択してください (fallback は {{ic|autodetect}} によるフィルタリングがされていません)。起動したら、新しいマシンで ''mkinitcpio'' を実行して適切なモジュールでイメージを再生成してください。fallback イメージで起動できない場合、Arch Linux のライブ CD/USB で起動して、chroot し、新しいマシンで ''mkinitcpio'' を実行して下さい。それでも駄目な場合、initramfs にモジュールを[[#MODULES|手動]]で追加します。
   
 
== 参照 ==
 
== 参照 ==
  +
* Linux カーネルドキュメントの [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/filesystems/ramfs-rootfs-initramfs.txt?id=HEAD initramfs] ''What is rootfs?'' でページ内を検索してください
 
* Linux カーネルドキュメント [https://doc.kusakata.com/admin-guide/initrd.html initrd]
+
* Linux カーネルドキュメント [https://docs.kernel.org/filesystems/ramfs-rootfs-initramfs.html#what-is-rootfs initramfs, "What is rootfs?"]
  +
* Linux カーネルドキュメント [https://docs.kernel.org/admin-guide/initrd.html initrd]
* [[Wikipedia:ja:initrd]]
 
  +
* Wikipedia 記事 [[wikipedia:initrd|initrd]]
  +
  +
{{TranslationStatus|mkinitcpio|2022-08-17|735796}}

2022年8月17日 (水) 07:08時点における版

関連記事

mkinitcpio初期 RAM ディスク環境を作成するために使われる Bash スクリプトです。mkinitcpio(8) man ページより:

initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして init にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せたりすることが可能になります。mkinitcpio はカスタムフックによって簡単に拡張することができ、実行時の自動検知など様々な機能を持っています。

伝統的には、ブートプロセスの初めにハードウェアを検知したりタスクの初期化を行うのはカーネルで、それから root ファイルシステムがマウントされ init にコントロールが移されます。しかしながら、先端技術が生まれるにつれ、こういった作業は複雑になりつつあります。

今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのメーカーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペース (初期RAMディスク) へ管理を譲渡することです。参照: /dev/brain0 » Blog Archive » Early Userspace in Arch Linux

mkinitcpio は Arch Linux デベロッパーとコミュニティの貢献によって開発されています。public Git リポジトリを見て下さい。

インストール

mkinitcpio パッケージをインストールしてください。このパッケージは linux の依存パッケージとなっているので、大抵すでにインストールされているでしょう。

上級者は mkinitcpio-gitAUR パッケージで mkinitcpio の最新開発バージョンをインストールできます。

ノート: Git から mkinitcpio を使う時は メーリングリストを購読することが 強く 推奨されます!

イメージ作成とアクティベーション

自動生成

カーネルがインストールまたはアップグレードされるたびに、pacman フック/etc/mkinitcpio.d/ 内に保存される .preset ファイルを自動的に生成します。例えば、公式の安定版 linux カーネルパッケージの場合は linux.preset です。プリセットは、様々なパラメーターや出力ファイルの場所を手動で指定する手間を省き、初期 RAM ディスクイメージを作成するために必要な情報のリストです。 デフォルトでは、2つのイメージを生成するための命令が含まれています:

  1. デフォルト RAM ディスクイメージ。このイメージの内容は、mkinicpio の #設定 で指定されたディレクティブに従って生成されます。
  2. フォールバック RAM ディスクイメージ。作成時に autodetect フックがスキップされることを除いて上記と同じであるため、ほとんどのシステムをサポートするすべてのモジュールが含まれます。

プリセットを作成した後、pacman フックは、プリセットで提供された情報を使用して2つのイメージを生成する mkinitcpio スクリプトを呼び出します。

ノート: .preset ファイルは、カーネルの更新後に initramfs を自動的に再生成するために使用されます。編集するときは注意してください。

手動生成

スクリプトを手動で実行するには、マニュアルページ mkinitcpio(8) で手順を確認してください。特に、カーネルパッケージによって提供されるプリセットを(再)生成するには、使用するプリセットを -p/--preset オプションで指定してください。例えば、linux パッケージの場合、次のコマンドを使用してください:

# mkinitcpio -p linux

既存のすべてのプリセットを(再)生成するには、-P/--allpresets スイッチを使用してください。これは通常、グローバルな #設定 の変更後にすべての initramfs イメージを再生成するために使用されます:

# mkinitcpio -P

ユーザーは、さまざまな構成で initramfs イメージをいくつでも作成できます。生成したいイメージは、それぞれのブートローダーの設定ファイルで指定する必要があります。

生成のカスタマイズ

ユーザーは、代替の設定ファイルを使用してイメージを生成できます。次の例では、/etc/mkinitcpio-custom.conf に記述されている指示に従って初期 RAM ディスクイメージを生成し、/boot/initramfs-custom.img として保存します。

# mkinitcpio --config /etc/mkinitcpio-custom.conf --generate /boot/initramfs-custom.img

現在実行中のカーネル以外のカーネルのイメージを生成する場合は、カーネルリリースバージョンをコマンドラインに追加してください。インストールされているカーネルリリースは /usr/lib/modules/ にあり、構文は各カーネルのコマンド uname -r の出力と一致しています。

# mkinitcpio --generate /boot/initramfs-custom2.img --kernel 5.7.12-arch1-1

Unified カーネルイメージ

バージョン31 以降の mkinitpcio では Unified カーネルイメージ を作成することもできます。

設定

mkinitcpio のプライマリ設定ファイルは、/etc/mkinitcpio.conf です。さらに、カーネルパッケージによって提供されるプリセット定義が /etc/mkinitcpio.d ディレクトリにあります (例: /etc/mkinitcpio.d/linux.preset)。

ユーザーは、設定ファイルの中にある6つの変数を変更できます (詳細は mkinitcpio.conf(5) を見てください):

MODULES
ブートフックが実行される前にロードされるカーネルモジュール。
BINARIES
initramfs イメージに含める追加のバイナリ。
FILES
initramfs イメージに含める追加のファイル。
HOOKS
フックは初期 RAM ディスクで実行するスクリプトです。
COMPRESSION
initramfs イメージを圧縮する際に使用されます。
COMPRESSION_OPTIONS
COMPRESSION のプログラムに渡す追加の引数。この設定の使用は推奨されません。mkinitcpio は圧縮プログラムに特殊な細工を施すので (例: xz には --check=crc32 を指定します)、誤って利用するとシステムが起動できなくなる可能性があります。
ノート:
  • システムが必要とする場合があるフックのいくつか (lvm2mdadm_udevencrypt など) は、デフォルトで 有効化されていないません。これに関する指示は #HOOKS セクションを注意深く読んでください。
  • ノード名が同じだがカーネルモジュールが異なる複数のディスクコントローラを使っている場合 (例: 2つの SCSI/SATA または2つの IDE コントローラ)、正しいデバイスがマウントされることを保証するために、永続的なブロックデバイスの命名を使うべきです。さもないと、ルートデバイスの場所がブート毎に変わってしまい、その結果、カーネルパニックを引き起こす場合があります。

MODULES

MODULES 配列では、何か他のことが行われる前にロードするモジュールを指定します。

モジュールの後ろに ? を付けると、モジュールが見つからなかったときでもエラーを投げません。これは、フックや設定ファイルにリストアップされたモジュールを含んでコンパイルするカスタムカーネルで有益かもしれません。

ノート:
  • reiser4 を使う場合、そのモジュールを MODULES 配列に追加しなければなりません
  • encryptsd-encrypt を使用し、かつ mkinitcpio が実行されるシステムと生成されたイメージが使用されるシステムが異なる場合、システムの起動中に LUKS デバイスをアンロックするために必要なキーボードモジュールやファイルシステムを MODULES 配列に追加する必要があります。例えば、使用するキーファイルが ext2 ファイルシステム上にあるが、mkinitcpio が実行されたときには ext2 ファイルシステムがマウントされていなかった場合、ext2 を追加してください。詳細は Dm-crypt/システム設定#cryptkey を見てください。
  • LUKS デバイスをアンロックするために USB 3 ハブのキーボードを使いたい場合、usbhid xhci_hcd を追加してください。
  • ドッキングステーションに接続されているディスプレイを使用する場合、initrd の出力を見えるようにするためにあなたのグラフィックカードのモジュールを追加する必要があるかもしれません (例: ほとんどの Intel カードでは i915)。

BINARIES と FILES

以下のオプションを使ってイメージにファイルを追加することができます。BINARIESFILES はフックが実行される前に追加され、フックによって使用/提供されるファイルを上書きすることがあります。BINARIES は標準の PATH に自動で配置され、依存関係がパースされます。つまり必要なライブラリも全て追加されます。FILESそのままの状態で追加されます。例:

FILES=(/etc/modprobe.d/modprobe.conf)
BINARIES=(kexec)

BINARIESFILES は両方とも Bash 配列です。なので、スペースで区切ることで複数のエントリを追加することができます。

HOOKS

HOOKS 配列は設定ファイルの中で一番重要な設定です。フックはイメージに追加されるものを記述する小さなスクリプトです。フックによっては、デーモンを起動したりスタックしたブロックデバイスを集めたりするためのランタイムコンポーネントを含んでいるものもあります。フックは名前によって参照され、設定ファイルの HOOKS にある順番通りに実行されます。

ほとんどのシンプルな単一ディスク環境では、デフォルトの HOOKS 設定で十分なはずです。LVMRAIDdm-crypt などのスタックルートデバイスやマルチブロックデバイスを使う時は、関連する wiki ページを見て必要な設定を調べて下さい。

ビルドフック

ビルドフックは /usr/lib/initcpio/install/ にあります。カスタムビルドフックは /etc/initcpio/install/ に配置します。これらのファイルは mkinitcpio の実行時に bash シェルによって実行されます。ビルドフックには2つの関数が含まれています: buildhelpbuild 関数にはイメージに追加するモジュール、ファイル、バイナリを記述します。これらのアイテムの追加を容易にする mkinitcpio(8) による API が用意されています。help 関数はフックの役割を出力します。

すべてのフックを一覧するには:

$ mkinitcpio -L

特定のフックのヘルプを出力するには mkinitcpio-H/--hookhelp オプションを使って下さい、例えば:

$ mkinitcpio -H udev

ランタイムフック

ランタイムフックは /usr/lib/initcpio/hooks/ にあります。カスタムランタイムフックは /etc/initcpio/hooks/ に配置します。全てのランタイムフックには同じ名前のビルドフックが存在している必要があり、そのビルドフックは add_runscript をコールしてランタイムフックをイメージに追加します。これらのファイルは初期ユーザ空間で busybox の ash シェルによって実行されます。cleanup フックを除いて全てのフックは HOOKS 設定の順番で実行されます。ランタイムフックには複数の関数を含めることができます:

run_earlyhook: API ファイルシステムがマウントされカーネルコマンドラインがパースされたときに、この名前の関数が実行されます。一般的に udev など初期ユーザ空間が始まったときに必要になる追加のデーモンはこの関数に置きます。

run_hook: 初期のフックの後すぐに、この名前の関数が実行されます。一番一般的なフックポイントで、スタックブロックデバイスのアセンブリなどのオペレーションはここで行なって下さい。

run_latehook: root デバイスがマウントされた後、この名前の関数が実行されます。root デバイスの後のセットアップや /usr など他のファイルシステムのマウントなどに控えめに使われます。

run_cleanuphook: 出来る限り最後に、この名前の関数が実行されます。設定ファイルの HOOKS の順番とは逆に実行されます。これらのフックは初期のフックによって起動したデーモンのシャットダウンなど、最後のクリーンアップに使われます。

ノート: ランタイムフックは busybox init でのみ使用されます。 systemd フックは systemd ベースの init をトリガーします。これはランタイムフックを実行せず、代わりに systemd ユニットを使用します。

通常のフック

以下は、通常のフックとイメージ生成への影響と関連するランタイムを示した表です。パッケージにカスタムフックを入れることができるので、この表は完全ではないことに注意してください。

この記事またはセクションは加筆を必要としています。
理由: Add info about hostdata, memdisk, sleep and strip, find out if dmraid, etc. work/are needed for systemd based initramfs. (議論: トーク:Mkinitcpio#Improvements for the Common hooks table and section about systemd hook)
busybox init systemd init ビルドフック ランタイムフック (busybox init のみ)
base 全ての初期ディレクトリをセットアップし、基本のユーティリティとライブラリをインストールします。systemd フックを使用していない場合、このフックは重要な busybox init を提供するので、何をしようとしているか理解していない限りはこのフックを常に1番最初に置いてください。
systemd フックを使用する場合、base フックは busybox のリカバリシェルのみを提供するので、base の追加は任意となります。
ノート: initramfs の root アカウントがロックされているため、リカバリシェルは使用できません。FS#70408 を見てください。
udev systemd イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 udev デーモンを起動して、カーネルからの uevent を処理します; デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。
usr /usr}} の分割パーティションのサポートを追加します。詳細は #/usr を別のパーティションに分割する を見てください。 本物のルートファイルシステムがマウントされた後に /usr パーティションをマウントします。
resume "ハイバネート" (suspend to disk) 状態からの復帰を試みます。詳しい設定方法は ハイバネート を見てください。
btrfs Btrfs を有効にして、Btrfs でフォーマットされた複数のデバイスを使用するために必要なモジュールを設定します。このフックを使うには、btrfs-progs をインストールする必要があります。シングルデバイスで Btrfs を使うだけならこのフックは不要です。 udev フックが存在しないときに btrfs device scan を実行してマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには btrfs-progs パッケージが必要です。
autodetect sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。'autodetect' より前に置かれたフックは完全にインストールされます。
modconf /etc/modprobe.d//usr/lib/modprobe.d/ から modprobe 設定ファイルをロードします。
block 全てのブロックデバイスモジュールを追加します。昔は fw, mmc, pata, sata, scsi , usb, virtio フックに分かれていました。
net 未実装 ネットワークデバイスに必要なモジュールを追加します。このフックを使うには mkinitcpio-nfs-utils をインストールしなければなりません。詳細は #net を使う を見てください。 NFS の root ファイルシステムの管理を提供します。
dmraid ? fakeRAID root デバイスのサポートを提供します。これを使うには dmraid をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では mdadm_udev フックと一緒に mdadm を使うことが推奨されます。詳細は #RAID を使う を見てください。 dmraid を使用して fakeRAID ブロックデバイスを検索・構築します。
mdadm_udev udev を使って RAID アレイの構築をサポートします。このフックを使うには mdadm をインストールする必要があります。このフックを FakeRAID アレイで使用する場合、BINARIESmdmom を含めることが推奨されます。詳細は #RAID を使う を見てください。
keyboard キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。これは古い usbinput フックを置き換えました。
ノート: 異なるハードウェア構成で起動されるシステム(たとえば、外部キーボードと内部キーボードを備えたラップトップまたは headless systems) の場合、起動時にキーボードを利用できるようにするために (例えば、encrypt フックが使用されている場合に暗号化済みデバイスをアンロックするために)、このフックを autodetect の前に配置する必要があります。
keymap sd-vconsole /etc/vconsole.conf から initramfs に、指定したキーマップを追加します。システム暗号化を使用する場合 (特にフルディスク暗号化) 、encrypt フックよりも前に追加するようにしてください。 初期ユーザ空間で /etc/vconsole.conf から指定されたキーマップをロードします。
consolefont /etc/vconsole.conf から initramfs に、指定したコンソールフォントを追加します。 初期ユーザ空間で /etc/vconsole.conf から指定されたコンソールフォントをロードします。
encrypt sd-encrypt dm_crypt カーネルモジュールと cryptsetup ツールをイメージに追加します。これを使うには cryptsetup をインストールする必要があります。
ノート: 暗号化されたデバイスを起動時にアンロックするための keyboard フックの注意書きや、ファイルをアンロックする際はファイルシステムについての #MODULES にある注意書きを見てください。
暗号化された root パーティションを検知してアンロックします。設定については #ランタイムのカスタマイズ を見て下さい。

sd-encrypt については Dm-crypt/システム設定#sd-encrypt フックを使うを見てください。

lvm2 device mapper カーネルモジュールと lvm ツールをイメージに追加します。これを使うには lvm2 をインストールする必要があります。ルートファイルシステムを LVM 上に置いている場合、このフックは必須です。
fsck fsck バイナリとファイルシステム固有のヘルパーを追加し、マウント前にルードデバイスに対して fsck を実行できるようにします。autodetect フックの後ろにこのフックを追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は強く推奨されており、/usr パーティションを分割する場合は必須です。このフックを含める場合、初期ユーザ空間でキーボードが動作することを保証するために必要なモジュールも追加することを強く推奨します。
このフックを使用するには、カーネルコマンドラインにパラメータ rw を設定する必要があります (議論)。詳細は fsck#ブート時のチェック を見てください。
filesystems イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを MODULES で指定していない限りこのフックが必要になります。

COMPRESSION

カーネルは、initramfs の圧縮にいくつかの形式をサポートしています: gzipbzip2、lzma、xzlzolz4zstd。mkinitcpio はデフォルトで zstd 圧縮イメージを使用します。 zstd 圧縮はマルチスレッドモードで実行されます (-T 0 オプションが使用され、検出されたコアと同じ数のスレッドを使用します。)

提供されている mkinitcpio.conf には、さまざまな COMPRESSION オプションがコメントアウトされています。別の圧縮方法に切り替える場合は、コメントを解除し、対応する圧縮ユーティリティがインストールされていることを確認してください。何も指定しない場合は、zstd のデフォルトのメソッドが使用されます。非圧縮イメージを作成する場合は、設定ファイルで COMPRESSION=cat を指定するか、コマンドラインで -z cat を使用します。

ヒント: 高圧縮モード (-9) のイメージの圧縮比は通常の約2.5で、解凍速度が非常に速いため、lz4 はより遅いシングルスレッド圧縮を犠牲にして最も速い解凍速度を実現します。わずかに優れた圧縮の、lzo も解凍が速いです。zstd は、マルチスレッド圧縮と、そのオプションを使用した幅広い圧縮レベルを備えた汎用的なソリューションを提供します。 zstd(1) § Operation modifiers を参照してください。 xz は、解凍速度がはるかに遅くなりますが、高圧縮プリセット (-9) で約5の縮小係数で最小サイズを実現します。

COMPRESSION_OPTIONS

COMPRESSION で指定したプログラムに渡す追加のフラグを記述します、例:

COMPRESSION_OPTIONS=(-9)
ノート: mkinitcpio はイメージを作成するときサポートされている圧縮方法に必要なフラグを渡すので、このオプションは必須ではありません。なお、カーネルが作成された圧縮ファイルを解凍できないとき、このオプションを使っていないとシステムをブートできなくなる可能性があります。

ランタイムのカスタマイズ

この記事またはセクションは加筆を必要としています。
理由: Which options work with the systemd hook and which are base-only? (議論: トーク:Mkinitcpio#)

ランタイム設定オプションはカーネルコマンドラインを通して init や特定のフックに渡すことができます。カーネルコマンドラインパラメータはブートローダによって与えられることがほとんどです。下で書かれているオプションをカーネルコマンドラインに追加することでデフォルトの挙動を変えることができます。詳しくは カーネルパラメータArch ブートプロセス を見て下さい。

base フックの init

root
カーネルコマンドラインで指定する一番重要なパラメータであり、どのデバイスを root デバイスとしてマウントするかを決めます。mkinitcpio は柔軟に様々な形式を使うことができるようになっています。例えば:
root=/dev/sda1                                                # /dev node
root=LABEL=CorsairF80                                         # label
root=UUID=ea1c4959-406c-45d0-a144-912f4e86b207                # UUID
root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660            # GPT partition UUID
ノート: 以下のブートパラメーターは initramfs 環境における init のデフォルトの挙動を変更します。詳しくは /usr/lib/initcpio/init を参照。systemd フックが使われている場合 base フックの init は置き換わるため機能しません。
break
breakbreak=premount が指定された場合、(フックをロードした後、root ファイルシステムをマウントする前に) init はブートプロセスを停止してトラブルシューティングに使うことができるインタラクティブシェルを起動します。break=postmount と指定することで root がマウントされた後にこのシェルを起動することもできます。シェルを終了すると通常通りに起動が行われます。
disablehooks
disablehooks=hook1[,hook2,...] を追加すると実行時にフックを無効化します。例:
disablehooks=resume
earlymodules
earlymodules=mod1[,mod2,...] という風に先にロードするモジュールを指定することでモジュールがロードされる順番を変更することができます (例えば、複数のネットワークインターフェイスの順番を適切に確定したいときなどに使います)。

他のパラメータについては ブートデバッグmkinitcpio(8) を見て下さい。

RAID を使う

RAID#mdadm フックを mkinitcpio.conf に追加する を見てください。

net を使う 

ノート: NFSv4 はまだサポートされていません FS#28287

必要なパッケージ

netmkinitcpio-nfs-utils パッケージを必要とします。

カーネルパラメータ

公式のカーネルドキュメントに包括的で最新の情報が載っています。

ip=

このパラメータはカーネルに、デバイスの IP アドレスの設定方法と、IP ルーティングテーブルの設定方法を指定します。コロンで区切った9つまでの引数を指定できます: ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip>

カーネルコマンドラインにこのパラメータが存在しなかった場合、全てのフィールドが空とされて、カーネルドキュメントに書かれているデフォルト設定が適用されます。一般的にはカーネルは自動設定を使って全てを設定しようとします。

<autoconf> パラメータは ip パラメータの唯一の値として指定できます (前の全ての : 文字を排除)。値が ip=offip=none の場合、自動設定は行われません。そうでないなら、自動的に設定されます。最も一般的な使い方は ip=dhcp です。

パラメータの説明は、カーネルドキュメントを参照してください。

例:

ip=127.0.0.1:::::lo:none  --> ループバックインターフェイスを有効化。
ip=192.168.1.1:::::eth2:none --> 静的 eth2 インターフェイスを有効化。
ip=:::::eth0:dhcp --> eth0 構成に対して dhcp プロトコルを有効化。
ノート: <device> パラメータにはカーネルのデバイス名を使用してください (例: eth0)、永続的な名前のデバイス名 (例: enp2s0) では動作しません。詳細は ネットワーク設定#ネットワークインターフェイス を見てください。

BOOTIF=

複数のネットワークカードを使っているときは、このパラメータに起動するインターフェイスの MAC アドレスを含めることができます。インターフェイスの数字が変わってしまったり、pxelinux の IPAPPEND 2 や IPAPPEND 3 オプションを使うときに便利です。指定しなかった場合、eth0 が使われます。

例:

BOOTIF=01-A1-B2-C3-D4-E5-F6  # 先頭の "01-" と大文字に注意

nfsroot=

nfsroot パラメータがコマンドラインで指定されなかった場合、デフォルトで /tftpboot/%s が使われます。

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

パラメータの説明を見るには mkinitcpio -H net を実行してください。

LVM を使う 

root デバイスを LVM 上に置く場合は、LVM#mkinitcpio.conf の設定 を見てください。

暗号化されたルートを使う

root を暗号化している場合、どのフックを含めるべきかに関する詳細な情報は Dm-crypt/システム設定#mkinitcpio を見て下さい。

/usr を別のパーティションに分割する

/usr のパーティションを別にする場合、以下を行う必要があります:

  • 起動時にこのパーティションのチェックを実行するために、fsck フックを追加して、/etc/fstab/usrpassno2 にする。起動時に /usr を fsck したい場合は必須です (これはすべてのユーザに推奨されます)。このフックが存在しないと、/usr は永遠に fsck されません。
  • systemd フックを使っていない場合、usr フックを追加する。ルートがマウントされた後に /usr パーティションがマウントされるようになります。

トラブルシューティング

イメージの展開

initramfs イメージの中に何が入っているか気になるときは、イメージを展開して中に入っているファイルを調べることができます。

initramfs イメージは SVR4 CPIO アーカイブであり、findbsdcpio コマンドによって生成されています。また、任意で、カーネルが対応した圧縮方法によって圧縮されています。圧縮方法について詳しくは #COMPRESSION を見て下さい。

mkinitcpio には lsinitcpio(1) というユーティリティが含まれており initramfs イメージの中身を一覧・展開することができます。

イメージ内のファイルを一覧するには:

# lsinitcpio /boot/initramfs-linux.img

カレントディレクトリにファイルを全て展開するには:

# lsinitcpio -x /boot/initramfs-linux.img

イメージの重要なパーツについて読みやすいリストを取得することもできます:

# lsinitcpio -a /boot/initramfs-linux.img

展開して修正を加えたイメージの再圧縮

/usr/bin/mkinitcpio スクリプトの build_image 関数を以下のパラメータで実行してください:

build_image 出力ファイル 圧縮方式

build_image 関数の内容で新しいスクリプトを作成することでこれを実行できます。 これはカレントディレクトリ内の内容を 出力ファイル というファイルに圧縮します。

警告: 上書きするまえに自動生成された /boot/initramfs-linux.img の名前を変更することで、簡単に元に戻すことができるようになります。何か問題が発生して起動できなくなった場合、フォールバックイメージやブート CD で起動して、mkinitcpio を実行して元のイメージに戻してください。あるいは、自分で修正してイメージを再圧縮してください。

マウントされているのに "/dev must be mounted" と表示される

/dev がマウントされているかどうか確認するために mkinitcpio は /dev/fd/ が存在するかどうかを確かめます。問題がないようでしたら、手動で作成することができます:

# ln -s /proc/self/fd /dev/

(当然 /proc のマウントも必要です。mkinitcpio によって次にチェックされます。)

Possibly missing firmware for module XXXX

カーネルのアップデート後に initramfs を再生成する際、以下のような警告が表示されることがあります:

==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: xhci_pci

デフォルトの initramfs イメージを生成するときに同じようなメッセージが表示される場合、警告メッセージが言っている通り、追加のファームウェアをインストールする必要があるかもしれません。ほとんどの一般的なファームウェアファイルは linux-firmware パッケージをインストールすることで入手できます。ファームウェアを提供する他のパッケージについては、以下の表を見るか、公式リポジトリAUR でモジュール名を検索してみてください。

メッセージがフォールバック initramfs イメージの生成時にのみ表示される場合は、以下の2つの選択肢があります:

  • 影響を受けるハードウェアを使用しないことがわかっている場合は、警告を安全に無視できます。
  • 警告を抑制したい場合、不足しているファームウェアをインストールできます。メタパッケージ mkinitcpio-firmwareAUR には、ほどんどのオプションのファームウェアが含まれています。あるいは、手動で必要なパッケージをインストールしてください:
モジュール パッケージ
aic94xx aic94xx-firmwareAUR
bfa linux-firmware-qlogic
bnx2x linux-firmware-bnx2x
liquidio linux-firmware-liquidio
mlxsw_spectrum linux-firmware-mellanox
nfp linux-firmware-nfp
qat_4xxx ファームウェアは未だ利用できず。
qed linux-firmware-qlogic
qla1280 linux-firmware-qlogic
qla2xxx linux-firmware-qlogic
wd719x wd719x-firmwareAUR
xhci_pci upd72020x-fwAUR
  • 警告を取り除きたいが、必要ないファームウェアパッケージのためにシステムの空き領域を無駄にしたくない場合、フォールバック initramfs の生成を無効化することができます:
    1. /etc/mkinitcpio.d/ 内のすべての .preset ファイルで、PRESETS=('default' 'fallback') 行を PRESETS=('default') に変更してください。
    2. フォールバック initramfs イメージを削除してください: # rm /boot/*-fallback.img
    3. ブートローダの設定ファイルを再生成してください (例えば、GRUB の場合: # grub-mkconfig -o /boot/grub/grub.cfg)。
警告: フォールバック initramfs の生成を無効化すると、デフォルトの initramfs でシステムの起動が失敗した場合に、システムを起動するためのもう一つの手段が失われることになります。上記の手順を実行する前に、システムリカバリのための起動可能インストールメディアを作成しておいてください。

No PS/2 controller found

一部のマザーボードで (ほとんどの場合、古いもの。しかし、一部の新しいものでも起こります)、i8042 コントローラが自動検出できません。稀なケースですが、キーボードが使えなくなってしまうことがあります。この状況を事前に察知することができます。PS/2 ポートがあり、i8042: PNP: No PS/2 controller found. Probing ports directly というメッセージが表示される場合、MODULES 配列に atkbd を追加してください。

標準的なレスキュー手順

不適切な初期 RAM ディスクを使用すると、システムが起動できなくなることがよくあります。 したがって、以下のようなシステムレスキュー手順に従ってください:

あるマシンでは起動できるが他のマシンでは起動できない

mkinitcpioautodetect フックは /sys をスキャンして、ロードされているカーネルモジュールを確認して不要なカーネルモジュールを排除します。/boot ディレクトリを他のマシンに移動して、初期ユーザー空間でブートが失敗する場合、カーネルモジュールが存在しないために新しいハードウェアが検出されていないのが原因かもしれません。USB 2.0 と 3.0 では必要なカーネルモジュールが異なるので注意してください。

修正するには、ブートローダーから fallback イメージを選択してください (fallback は autodetect によるフィルタリングがされていません)。起動したら、新しいマシンで mkinitcpio を実行して適切なモジュールでイメージを再生成してください。fallback イメージで起動できない場合、Arch Linux のライブ CD/USB で起動して、chroot し、新しいマシンで mkinitcpio を実行して下さい。それでも駄目な場合、initramfs にモジュールを手動で追加します。

参照

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