「Mkinitcpio」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎LVM を使う : リンクを修正)
(11人の利用者による、間の42版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:ブートプロセス]]
+
[[Category:initramfs]]
 
[[Category:カーネル]]
 
[[Category:カーネル]]
  +
[[Category:Arch プロジェクト]]
[[da:Mkinitcpio]]
 
  +
[[Category:コマンド]]
 
[[de:Mkinitcpio]]
 
[[de:Mkinitcpio]]
 
[[en:Mkinitcpio]]
 
[[en:Mkinitcpio]]
[[es:Mkinitcpio]]
+
[[fr:Mkinitcpio]]
[[fr:mkinitcpio]]
+
[[pt:Mkinitcpio]]
[[it:Mkinitcpio]]
 
 
[[ru:Mkinitcpio]]
 
[[ru:Mkinitcpio]]
[[zh-CN:Mkinitcpio]]
+
[[zh-hans:Mkinitcpio]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|systemd}}
+
{{Related|Booster}}
  +
{{Related|ブートデバッグ}}
  +
{{Related|dracut}}
 
{{Related|カーネルモジュール}}
 
{{Related|カーネルモジュール}}
  +
{{Related|initramfs の最小化}}
  +
{{Related|systemd}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
[https://github.com/archlinux/mkinitcpio mkinitcpio] は[[Wikipedia:Initial ramdisk|初期 RAM ディスク]]環境を作成するために使われる Bash スクリプトです。{{man|8|mkinitcpio}} man ページより:
'''mkinitcpio''' は次世代の [[Wikipedia:ja:initrd|initramfs]] 作成ツールです。
 
   
  +
:''initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして {{ic|init}} にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せたりすることが可能になります。''mkinitcpio'' はカスタムフックによって簡単に拡張することができ、実行時の自動検知など様々な機能を持っています。''
== 概要 ==
 
   
  +
伝統的には、[[Arch ブートプロセス|ブートプロセス]]の初めにハードウェアを検知したりタスクの初期化を行うのはカーネルで、それから root ファイルシステムがマウントされ {{ic|init}} にコントロールが移されます。しかしながら、先端技術が生まれるにつれ、こういった作業は複雑になりつつあります。
mkinitcpio は initial ramdisk 環境を作成するために使われる Bash スクリプトです。[https://projects.archlinux.org/mkinitcpio.git/tree/man/mkinitcpio.8.txt mkinitcpio man page] より:
 
   
  +
今日、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]。
:''initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして init にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せることが可能になります。mkinitcpio はカスタムフックによって簡単に拡張することができ、自動時の自動検知など様々な機能を持っています。''
 
   
  +
''mkinitcpio'' は Arch Linux デベロッパーとコミュニティの貢献によって開発されています。[https://github.com/archlinux/mkinitcpio public Git リポジトリ]を見て下さい。
伝統的には、[[Arch ブートプロセス|ブートプロセス]]の初めにハードウェアを検知したりタスクの初期化を行うのはカーネルで、それから root ファイルシステムがマウントされ {{ic|init}} にコントロールが移されます。しかしながら、先端技術が生まれるにつれ、こういった作業は複雑になりつつあります。
 
   
  +
== インストール ==
今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのマニュファクチャーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペースへ管理を譲渡することです: initial ramdisk。
 
   
  +
{{Pkg|mkinitcpio}} パッケージを[[インストール]]してください。このパッケージは {{Pkg|linux}} の依存パッケージとなっているので、大抵すでにインストールされているでしょう。
参照: [http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ /dev/brain0 » Blog Archive » Early Userspace in Arch Linux].
 
   
  +
上級者は {{AUR|mkinitcpio-git}} パッケージで ''mkinitcpio'' の最新開発バージョンをインストールできます。
mkinitcpio は initramfs CPIO イメージを作成するためのモジュール式のツールで、他の方法に比べて多くのアドバンテージを有します。例えば:
 
   
  +
{{Note|Git から ''mkinitcpio'' を使う時は [https://lists.archlinux.org/mailman3/lists/arch-projects.lists.archlinux.org/ メーリングリスト]を購読することが '''強く''' 推奨されます!}}
* 初期ユーザ空間の小さくて軽量な基盤として [http://www.busybox.net/ BusyBox] を使用。
 
* 実行時のハードウェア自動検知のための '''[[udev]]''' サポート、そして不必要なモジュールのロードの回避。
 
* 拡張性のあるフックベースの init スクリプト、カスタムフックを簡単に [[pacman]] パッケージに含めることが可能。
 
* LUKS ボリュームのための '''LVM2''', '''dm-crypt''' サポート。USB マスストレージデバイスからのレジューム・ブートのための '''mdadm''', '''swsusp''', '''suspend2''' サポート。
 
* イメージをリビルドする必要なくカーネルコマンドラインから多くの機能を設定可能。
 
   
  +
== イメージ作成とアクティベーション ==
mkinitcpio は Arch Linux デベロッパーとコミュニティの貢献によって開発されています。[https://projects.archlinux.org/mkinitcpio.git/ Git リポジトリ]を見て下さい。
 
   
== インストール ==
+
=== 自動生成 ===
   
  +
カーネルがインストールまたはアップグレードされるたびに、[[pacman フック]]は {{ic|/etc/mkinitcpio.d/}} 内に保存される ''.preset'' ファイルを自動的に生成します。例えば、公式の安定版 {{Pkg|linux}} カーネルパッケージの場合は {{ic|linux.preset}} です。プリセットは、様々なパラメーターや出力ファイルの場所を手動で指定する手間を省き、初期 RAM ディスクイメージを作成するために必要な情報のリストです。
{{Pkg|mkinitcpio}} パッケージは[[公式リポジトリ]]で利用可能で {{Pkg|linux}} パッケージの依存パッケージになっています。
 
  +
デフォルトでは、2つのイメージを生成するための命令が含まれています:
   
  +
# ''default'' RAM ディスクイメージ。このイメージの内容は、mkinicpio の [[#設定]] で指定されたディレクティブに従って生成されます。
上級ユーザーのために Git から mkinitcpio の最新開発バージョンをインストールできます:
 
  +
# ''fallback'' RAM ディスクイメージ。作成時に ''autodetect'' フックがスキップされることを除いて上記と同じであるため、ほとんどのシステムをサポートするすべてのモジュールが含まれます。
<nowiki>$ git clone git://projects.archlinux.org/mkinitcpio.git</nowiki>
 
   
  +
プリセットを作成した後、pacman フックは、プリセットで提供された情報を使用して2つのイメージを生成する ''mkinitcpio'' スクリプトを呼び出します。
{{Note|Git から mkinitcpio を使う時は [https://mailman.archlinux.org/mailman/listinfo/arch-projects arch-projects メーリングリスト]を購読することが'''強く'''推奨されます!}}
 
   
  +
{{Note|''.preset'' ファイルは、カーネルの更新後に initramfs を自動的に再生成するために使用されます。編集するときは注意してください。}}
== イメージ作成とアクティベーション ==
 
   
  +
=== 手動生成 ===
デフォルトで、カーネルのインストール・アップグレードが行われた後 mkinitcpio スクリプトは2つのイメージを生成します: {{ic|/boot/initramfs-linux.img}} と {{ic|/boot/initramfs-linux-fallback.img}}。''fallback'' イメージは ''default'' イメージと同じ設定ファイルを利用しますが、作成中に '''autodetect''' フックだけはスキップされ、全てのモジュールが入ります。'''autodetect''' フックは必要なモジュールを検出して、イメージを固有のハードウェアにあわせて、initramfs を小さくします。
 
   
  +
スクリプトを手動で実行するには、マニュアルページ {{man|8|mkinitcpio}} で手順を確認してください。特に、カーネルパッケージによって提供されるプリセットを(再)生成するには、使用するプリセットを {{ic|-p}}/{{ic|--preset}} オプションで指定してください。例えば、{{Pkg|linux}} パッケージの場合、次のコマンドを使用してください:
様々な設定ファイルを使って initramfs イメージを沢山作りたいと思っているユーザーもいるかもしれません。ブートローダに使いたいイメージを指定する必要があります、主としてブートローダの[[ブートローダー|設定ファイル]]で指定します。設定ファイルに変更を加えた後は、イメージを再生成しなければなりません。標準の Arch Linux カーネル {{Pkg|linux}} で再生成するには次のコマンドを root 権限で実行してください:
 
   
 
# mkinitcpio -p linux
 
# mkinitcpio -p linux
   
{{ic|-p}} スイッチはプリセット (''preset'') を使うことを示しま; ほとんどのカーネルパッケージ {{ic|/etc/mkinitcpio.d}} の中に関連する mkinitcpio プリセトファイル提供しています (例: {{ic|linux}} {{ic|/etc/mkinitcpio.d/linux.preset}})。毎回設定ファイルと出力ファイルを指定る代わりに initramfs イメージを成する方法がプリセット定義されています
+
既存のすべてのプリセット()生成るに{{ic|-P}}/{{ic|--allpresets}} スイ使用してくださ。これ通常、グローバルな [[#設定]] の変更後にべての initramfs イメージを再生成するため使用されます:
   
  +
# mkinitcpio -P
{{Warning|''プリセット''ファイルはカーネルがアップデートされた後 initramfs を再生成するときに自動で使われます; 編集する時は気をつけて下さい。}}
 
   
ユーザーは他の設定ファイルを使ってイメージを手動で作成することもできます。例えば、以下のコマンドは {{ic|/etc/mkinitcpio-custom.conf}} の指示に従って initramfs イメージを生成し {{ic|/boot/linux-custom.img}} にイメージを保存します。
+
ユーザーは、さまざまな構成で initramfs イメージをいくつ作成できます。生成したいイメージは、それぞれの[[ブートローダー]]の設定ファイルで指定する必要があります。
   
  +
=== 生成のカスタマイズ ===
# mkinitcpio -c /etc/mkinitcpio-custom.conf -g /boot/linux-custom.img
 
   
  +
ユーザーは、代替の設定ファイルを使用してイメージを生成できます。次の例では、{{ic|/etc/mkinitcpio-custom.conf}} に記述されている指示に従って初期 RAM ディスクイメージを生成し、{{ic|/boot/initramfs-custom.img}} として保存します。
現在動作しているカーネル以外のカーネル用のイメージを作成するときは、コマンドラインにカーネルのバージョンを加えて下さい。{{ic|/usr/lib/modules}} 内でカーネルバージョンを見ることができます。
 
   
# mkinitcpio -g /boot/linux.img -k 3.3.0-ARCH
+
# mkinitcpio --config /etc/mkinitcpio-custom.conf --generate /boot/initramfs-custom.img
   
  +
現在実行中のカーネル以外のカーネルのイメージを生成する場合は、カーネルリリースバージョンをコマンドラインに追加してください。インストールされているカーネルリリースは {{ic|/usr/lib/modules/}} にあり、構文は各カーネルのコマンド {{ic|uname -r}} の出力と一致しています。
== 設定 ==
 
   
  +
# mkinitcpio --generate /boot/initramfs-custom2.img --kernel 5.7.12-arch1-1
'''mkinitcpio''' の基本の設定ファイルは {{ic|/etc/mkinitcpio.conf}} です。さらに、カーネルパッケージによって提供されるプリセット定義が {{ic|/etc/mkinitcpio.d}} ディレクトリにあります (例: {{ic|/etc/mkinitcpio.d/linux.preset}})。
 
   
  +
=== Unified カーネルイメージ ===
{{Warning|デフォルトでは '''lvm2''', '''mdadm''', '''encrypt''' は'''有効化されていません'''。これらのフックが必要なときは注意してこのセクションを読んで下さい。}}
 
   
  +
バージョン31 以降の ''mkinitpcio'' では [[Unified カーネルイメージ]] を作成することもできます。
{{Note|Users with multiple hardware disk controllers that use the same node names but different kernel modules (e.g. two SCSI/SATA or two IDE controllers) should ensure the correct order of modules is specified in {{ic|/etc/mkinitcpio.conf}}. Otherwise, the root device location may change between boots, resulting in kernel panics.
 
   
  +
== 設定 ==
A more elegant alternative is to use [[persistent block device naming]] to ensure that the right devices are mounted.}}
 
   
  +
''mkinitcpio'' のプライマリ設定ファイルは、{{ic|/etc/mkinitcpio.conf}} です。さらに、カーネルパッケージによって提供されるプリセット定義が {{ic|/etc/mkinitcpio.d}} ディレクトリにあります (例: {{ic|/etc/mkinitcpio.d/linux.preset}})。
{{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つの変数を修正することが可能です:
+
ユーザーは設定ファイルの中にある6つの変数を変更きま (詳細は {{man|5|mkinitcpio.conf}} を見てください):
   
; {{ic|MODULES}}: boot フックが実行される前にロードべきカーネルモジュール。
+
; {{ic|MODULES}}: ブートフックが実行される前にロードされるカーネルモジュール。
 
; {{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|If using '''reiser4''', it ''must'' be added to the modules list. Additionally, if you will be needing any file system during the boot process that is not live when you run mkinitcpio — for example, if your LUKS encryption key file is on an '''ext2''' file system but no '''ext2''' file systems are mounted when you run mkinitcpio — that file system module must also be added to the MODULES list. See [[Dm-crypt/System configuration#cryptkey]] for more details.}}
 
  +
* '''reiser4''' を使う場合、そのモジュールを {{ic|MODULES}} 配列に追加''しなければなりません''。
  +
* '''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)
   
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|LVM]], [[mdadm]], [[dm-crypt|dm-crypt]] などスタックした root デバイスやマルチブロックデバイスを使う時は、関連する wiki ページを見て必要な設定を調べて下さい。
+
ほとんどのシンプルな単一ディスク環境ではデフォルトの {{ic|HOOKS}} 設定で十分なはずです。[[LVM]][[RAID]][[dm-crypt]] などスタックルートデバイスやマルチブロックデバイスを使う時は、関連する wiki ページを見て必要な設定を調べて下さい。
   
 
==== ビルドフック ====
 
==== ビルドフック ====
   
ビルドフックは {{ic|/usr/lib/initcpio/install}} にあります。これらのファイルは mkinitcpio の実行時に bash シェルによって実行されます。ビルドフックには2つの関数が含まれています: {{ic|build}} と {{ic|help}}。{{ic|build}} 関数にはイメージに追加するモジュールファイルバイナリを記述します。これらのアイテムの追加を容易にする mkinitcpio(8) による 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}} 関数はフックの役割を出力します。
   
 
すべてのフックを一覧するには:
 
すべてのフックを一覧するには:
120行目: 131行目:
 
$ mkinitcpio -L
 
$ mkinitcpio -L
   
特定のフックのヘルプを出力するには mkinitcpio の {{ic|-H}} オプションを使って下さい、例えば:
+
特定のフックのヘルプを出力するには ''mkinitcpio'' の {{ic|-H}}/{{ic|--hookhelp}} オプションを使って下さい、例えば:
   
 
$ mkinitcpio -H udev
 
$ mkinitcpio -H udev
126行目: 137行目:
 
==== ランタイムフック ====
 
==== ランタイムフック ====
   
ランタイムフックは {{ic|/usr/lib/initcpio/hooks}} にあります。全てのランタイムフックには同じ名前のビルドフックが存在している必要があり、そのビルドフックは {{ic|add_runscript}} をコールしてランタイムフックをイメージに追加します。これらのファイルは初期ユーザ空間で busybox の ash シェルによって実行されます。cleanup フックを除いて全てのフックは {{ic|HOOKS}} 設定の順番で実行されます。ランタイムフックには複数の関数を含めることができます:
+
ランタイムフックは {{ic|/usr/lib/initcpio/hooks/}} にあります。カスタムランタイムフックは {{ic|/etc/initcpio/hooks/}} に配置します。全てのランタイムフックには同じ名前のビルドフックが存在している必要があり、そのビルドフックは {{ic|add_runscript}} をコールしてランタイムフックをイメージに追加します。これらのファイルは初期ユーザ空間で busybox の ash シェルによって実行されます。cleanup フックを除いて全てのフックは {{ic|HOOKS}} 設定の順番で実行されます。ランタイムフックには複数の関数を含めることができます:
   
 
{{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}} など他のファイルシステムのマウントなどに控えめに使われます。
   
 
{{ic|run_cleanuphook}}: 出来る限り最後に、この名前の関数が実行されます。設定ファイルの {{ic|HOOKS}} の順番とは逆に実行されます。これらのフックは初期のフックによって起動したデーモンのシャットダウンなど、最後のクリーンアップに使われます。
 
{{ic|run_cleanuphook}}: 出来る限り最後に、この名前の関数が実行されます。設定ファイルの {{ic|HOOKS}} の順番とは逆に実行されます。これらのフックは初期のフックによって起動したデーモンのシャットダウンなど、最後のクリーンアップに使われます。
  +
  +
{{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 sortable"
 
  +
|+ '''現行のフック'''
 
  +
{| class="wikitable"
|-
 
  +
! busybox init !! systemd init !! [[#ビルドフック|ビルドフック]] !! [[#ランタイムフック|ランタイムフック]] (busybox init のみ)
! フック || インストール || ランタイム
 
|-
 
| '''base''' || 全ての initial directory をセットアップし基本のユーティリティとライブラリをインストールする。何をしようとしているのかわからない限りはこのフックを一番最初のフックにしておいてください。 || --
 
|-
 
| '''systemd''' || このフックは基本的な systemd セットアップを initramfs にインストールします。これによって 'base', 'usr', 'udev', 'timestamp' フックが置き換えられます。(暗号化など) 他のフックも移す必要がありますが、期待通りには動作しません。下にある systemd 特有のフック ("sd-*") を使用するときは、必須になります。{{Pkg|systemd}} 207 から、このフックは lvm2 と一緒に使うと上手く動作せず起動できなくなることがあります。''lvm2'' フックの代わりに ''sd-lvm2'' フックを使って下さい。initramfs で緊急シェルが使えるように (このフックの前に) ''base'' フックを含めると良いでしょう。{{Pkg|systemd}} 217 から、このフックはハイバネートからの復帰に必要なサービスやバイナリヘルパーもインストールします。 || systemd 217 で起動して、カーネルコマンドラインの resume パラメータのハイバネーションイメージを探して、イメージからの復帰を開始します。
 
|-
 
| '''btrfs''' || root で [[Btrfs|Btrfs]] を有効にしてサブボリュームを使用するために必要なモジュールを設定します。 || udev フックが存在しないときに {{ic|btrfs device scan}} を実行してマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには {{Pkg|btrfs-progs}} パッケージが必要です。
 
|-
 
| '''udev''' || イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 || udev デーモンを起動してカーネルからの uevent を処理します。デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。
 
|-
 
| '''autodetect''' || sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。'autodetect' より前に置かれたフックは完全にインストールされます。 || --
 
 
|-
 
|-
  +
|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}} を見てください。}}
| '''modconf''' || {{ic|/etc/modprobe.d}} と {{ic|/usr/lib/modprobe.d}} から modprobe 設定ファイルをロードします。 || --
 
  +
| {{-}}
 
|-
 
|-
  +
| {{C|'''udev'''}} ||rowspan="3" {{C|'''systemd'''}} || イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 || udev デーモンを起動して、カーネルからの uevent を処理します; デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。
| '''block''' || 全てのブロックデバイスモジュールを追加します。昔は '''fw''', '''mmc''', '''pata''', '''sata''', '''scsi''' , '''usb''', '''virtio''' フックに分かれていました。 || --
 
 
|-
 
|-
  +
| {{C|'''usr'''}} || {{ic|/usr}} の分割パーティションのサポートを追加します。詳細は [[#/usr を別のパーティションに分割する]] を見てください。 || 本物のルートファイルシステムがマウントされた後に {{ic|/usr}} パーティションをマウントします。
| '''pcmcia''' || PCMCIA デバイスに必要なモジュールを追加します。これを使うには {{Pkg|pcmciautils}} をインストールする必要があります。 || --
 
 
|-
 
|-
| '''net''' || ネットワークデバイスに必要なモジュールを追加します。PCMCIA net デバイスには '''pcmcia''' フックも追加してください。 || NFS の root ファイルシステムの管理を提供します。
 
 
|-
 
|-
  +
| {{C|'''resume'''}} || {{-}} || "ハイバネート" (suspend to disk) 状態からの復帰を試みます。詳しい設定方法は [[ハイバネート]] を見てください。
| '''dmraid''' || fakeRAID root デバイスのサポートを提供します。これを使うには {{Pkg|dmraid}} をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では '''mdadm_udev''' フックと一緒に {{ic|mdadm}} を使うことが推奨されます。 || {{ic|dmraid}} を使用して fakeRAID ブロックデバイスを構築します。
 
 
|-
 
|-
| '''mdadm''' || {{ic|/etc/mdadm.conf}} からの RAID アレイの構築や起動中の自動検出のサポートを提供します。こを使うには {{Pkg|mdadm}} インストール須です。このフックよりも '''mdadm_udev''' フックが推奨されてます。 || {{ic|mdassemble}} を使っソフトウェア RAID ブロックデバイスを構築します。
+
| {{C|'''btrfs'''}} || {{Grey|}} || [[Btrfs]] を有効にしてBtrfs でフォマッされた複数のデバイス使用するために必要なモジュールを設定します。このフックを使うには{{Pkg|btrfs-progs}} インストールする要があります。シングルデバイスで Btrfs を使うだけならこのフックは不要です。 || udev フックが存在しなときに {{ic|btrfs device scan}} を実行しマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには {{Pkg|btrfs-progs}} パッケージが必要です。
 
|-
 
|-
  +
|colspan="2" {{C|'''autodetect'''}} || sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。'autodetect' より前に置かれたフックは完全にインストールされます。 || {{-}}
| '''mdadm_udev''' || udev による RAID アレイの構築のサポートを提供します。これを使うには {{Pkg|mdadm}} のインストールが必要です。FakeRAID アレイでこのフックを使う場合、binaries セクションに {{ic|mdmon}} を含めて '''shutdown''' フックを追加することが推奨されます。再起動時に不必要な RAID を再ビルドしないためです。 || {{ic|udev}} と {{ic|mdadm}} を使ってソフトウェア RAID ブロックデバイスを動的に構築します。mdadm アセンブリの推奨方法です (上記の ''mdadm'' フックを使うよりも)。
 
 
|-
 
|-
  +
|colspan="2" {{C|'''modconf'''}} || {{ic|/etc/modprobe.d/}} と {{ic|/usr/lib/modprobe.d/}} から modprobe 設定ファイルをロードします。 || {{-}}
| '''keyboard''' || キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。 || --
 
 
|-
 
|-
  +
|colspan="2" {{C|'''block'''}} || 全てのブロックデバイスモジュールを追加します。昔は ''fw'', ''mmc'', ''pata'', ''sata'', ''scsi'' , ''usb'', ''virtio'' フックに分かれていました。 || {{-}}
| '''keymap''' || {{ic|/etc/vconsole.conf}} から initramfs に指定したキーマップを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップをロードします。
 
 
|-
 
|-
  +
| {{C|'''net'''}} || {{Grey|''未実装''}} || ネットワークデバイスに必要なモジュールを追加します。このフックを使うには {{Pkg|mkinitcpio-nfs-utils}} をインストールしなければなりません。詳細は [[#net を使う]] を見てください。 || NFS の root ファイルシステムの管理を提供します。
| '''consolefont''' || {{ic|/etc/vconsole.conf}} から initramfs に指定したコンソールフォントを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたコンソールフォントをロードします。
 
 
|-
 
|-
  +
| {{C|'''dmraid'''}} || {{Grey|''?''}} || fakeRAID root デバイスのサポートを提供します。これを使うには {{Pkg|dmraid}} をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では ''mdadm_udev'' フックと一緒に [[mdadm]] を使うことが推奨されます。詳細は [[#RAID を使う]] を見てください。 || {{ic|dmraid}} を使用して fakeRAID ブロックデバイスを検索・構築します。
| '''sd-vconsole''' || {{ic|/etc/vconsole.conf}} から systemd ベースの initramfs に指定したキーマップとコンソールフォントを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップとコンソールフォントをロードします。
 
 
|-
 
|-
| '''encrypt''' || {{ic|dm_crypt}} カーネルモジュールと {{ic|cryptsetup}} ツールをジに追加します。こを使うには {{Pkg|cryptsetup}} をインストールする必要があります。 || 暗号化された root パーティション検知してアンロックします。設定については [[#ランタイムのカスタマイズ]] を見てさい。
+
|colspan="2" {{C|'''mdadm_udev'''}} || udev を使って RAID アレの構築をサポします。このフックを使うには {{Pkg|mdadm}} をインストールする必要があります。このフックを FakeRAID アレイで使用する場合、{{ic|BINARIES}} {{ic|mdmom}}含めることが推奨されます。詳細は [[#RAID を使う]] を見てください。 || {{-}}
 
|-
 
|-
  +
|colspan="2" {{C|'''keyboard'''}} || キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。これは古い ''usbinput'' フックを置き換えました。
| '''sd-encrypt''' || このフックを使うことで systemd initramfs で暗号化された root デバイスを扱えます。
 
   
  +
{{Note|異なるハードウェア構成で起動されるシステム(たとえば、外部キーボードと内部キーボードを備えたラップトップまたは [[Wikipedia:Headless computer|ヘッドレスシステム]]) の場合、起動時にキーボードを利用できるようにするために (例えば、{{ic|encrypt}} フックが使用されている場合に暗号化済みデバイスをアンロックするために)、このフックを '''autodetect''' の前に配置する必要があります。}}
利用できるカーネルコマンドラインオプションについては systemd-cryptsetup-generator(8) の man ページを見て下さい。また、{{ic|/etc/crypttab.initramfs}} ファイルが存在する場合、{{ic|/etc/crypttab}} として initramfs に追加されます。crypttab の構文の詳細は crypttab(5) manpage を見て下さい。
 
  +
| --
 
  +
| {{-}}
 
|-
 
|-
  +
| {{C|'''keymap'''}} ||rowspan="2" {{C|'''sd-vconsole'''}} || {{ic|/etc/vconsole.conf}} から initramfs に、指定した[[コンソールでのキーボード設定#永続的な設定|キーマップ]]を追加します。[[Dm-crypt/システム全体の暗号化|システム暗号化]]を使用する場合 (特にフルディスク暗号化) 、{{ic|1=encrypt}} フックよりも前に追加するようにしてください。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップをロードします。
| '''lvm2''' || device mapper カーネルモジュールと {{ic|lvm}} ツールをイメージに追加します。これを使うには {{Pkg|lvm2}} をインストールする必要があります。 || 全ての LVM2 ボリュームグループを有効にします。root ファイルシステムが [[LVM|LVM]] 上にある場合は必須です。
 
 
|-
 
|-
  +
| {{C|'''consolefont'''}} || {{ic|/etc/vconsole.conf}} から initramfs に、指定した[[コンソールでのキーボード設定#永続的な設定|コンソールフォント]]を追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたコンソールフォントをロードします。
| '''fsck''' || fsck バイナリとファイルシステム特有のヘルパーを追加します。'''autodetect''' フックの後ろに追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は強く推奨されており、{{ic|/usr}} パーティションを分割する場合は必須です。 || root デバイス (と分割している場合は {{ic|/usr}}) に対してマウントする前に fsck を実行します。ブートローダーのデフォルト設定で問題ありませんが、疑問がある場合は[https://bbs.archlinux.org/viewtopic.php?pid=1307895#p1307895 こちらの設定]を読んで下さい。
 
 
|-
 
|-
  +
| {{C|'''encrypt'''}} || {{C|'''sd-encrypt'''}} || {{ic|dm_crypt}} カーネルモジュールと {{ic|cryptsetup}} ツールをイメージに追加します。これを使うには {{Pkg|cryptsetup}} をインストールする必要があります。{{Note|暗号化されたデバイスを起動時にアンロックするための ''keyboard'' フックの注意書きや、ファイルをアンロックする際はファイルシステムについての [[#MODULES]] にある注意書きを見てください。}} || 暗号化された root パーティションを検知してアンロックします。設定については [[#ランタイムのカスタマイズ]] を見て下さい。
| '''resume''' || ハイバネートを検出・復帰するための sh initramfs で動作するシェルスクリプトをインストールします。 || "ハイバネート" (suspend to disk) 状態からの復帰を試みます。''swsusp'' と ''[[suspend2]]'' の両方と一緒に動作します。設定は [[#ランタイムのカスタマイズ]] を見て下さい。systemd 217 から、systemd initramfs ではハイバネートに必要ありません。
 
  +
'''sd-encrypt''' については [[Dm-crypt/システム設定#sd-encrypt フックを使う]]を見てください。
 
|-
 
|-
| '''filesystems''' || イメージに必要なファルシテムモジュールを含めます。ファイルシステムモジュールMODULES で指定していない限りこのフックが'''要になりま'''。 || --
+
|colspan="2" {{C|'''lvm2'''}} || device mapper カーネルモジュールと {{ic|lvm}} ツールをイメージに追加します。これを使うには {{Pkg|lvm2}} をールする必要があります。ルートファイルシステムを [[LVM]] 上に置いている場合、このフック須です。 || {{-}}
 
|-
 
|-
  +
|colspan="2" {{C|'''fsck'''}} || fsck バイナリとファイルシステム固有のヘルパーを追加し、マウント前にルードデバイスに対して fsck を実行できるようにします。'''autodetect''' フックの後ろにこのフックを追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は'''強く'''推奨されており、{{ic|/usr}} パーティションを分割する場合は必須です。このフックを含める場合、初期ユーザ空間でキーボードが動作することを保証するために必要なモジュールも追加することを強く推奨します。<br/>このフックを使用するには、[[カーネルコマンドライン]]にパラメータ {{ic|rw}} を設定する必要があります ([https://bbs.archlinux.org/viewtopic.php?pid=1307895#p1307895 議論])。詳細は [[fsck#ブート時のチェック]] を見てください。 || {{-}}
| '''shutdown''' || シャットダウン initramfs サポートを追加します。mkinitcpio 0.16 以前までは {{ic|/usr}} パーティションを分割していたり root を暗号化しているときはこのフックを使うことを強く推奨されていました。mkinitcpio 0.16 以降から、[https://mailman.archlinux.org/pipermail/arch-dev-public/2013-December/025742.html 必須ではない]とされています。 || シャットダウン時にデバイスをアンマウント・取り外します。
 
  +
|-
  +
|colspan="2" {{C|'''filesystems'''}} || イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを {{ic|MODULES}} で指定していない限りこのフックが'''必要'''になります。 || {{-}}
 
|-
 
|-
| '''usr''' || {{ic|/usr}} の分割パーティションのサポートを追加。 || real root がマウントされた後に {{ic|/usr}} パーティションをマウントします。
 
 
|}
 
|}
 
==== 廃止されたフック ====
 
{{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 の圧縮に複数フォーマットをサポートしています - gzip, bzip2, lzma, xz (別名 lzma2), lzo, lz4。ほとんどの場合、gzip か lzop、またlz4 を使ったときに圧縮イメージサイズ展開速度バランが一番良くなります。
+
カーネルはinitramfs の圧縮にいくつか形式をサポートしています: {{pkg|gzip}}、{{pkg|bzip2}}、lzma、{{Pkg|xz}}、{{Pkg|lzo}}、{{Pkg|lz4}}、{{Pkg|zstd}}mkinitcpioデフォルトで zstd 圧縮イメージを使用します。 zstd 圧縮はマルチスレッドモードで実行されます ({{ic|-T 0}} オプションが使用され、検出されたコア同じ数のスレッドを使用します。)
COMPRESSION="gzip"
 
COMPRESSION="bzip2" # since kernel 2.6.30
 
COMPRESSION="lzma" # since kernel 2.6.30
 
COMPRESSION="lzop" # since kernel 2.6.34
 
COMPRESSION="xz" # since kernel 2.6.38
 
COMPRESSION="lz4" # since kernel 3.11; mkinitcpio>=16-2
 
   
{{ic|COMPRESSION}} を指定しないときinitramfs ァイは gzip で圧縮されます。イメージを圧縮したくないときは、{{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の縮小係数で最小サイズを実現します。}}
使用する圧縮方法の適切なファイル圧縮ユーティリティがインストールされているか確認してください。
 
   
 
=== COMPRESSION_OPTIONS ===
 
=== COMPRESSION_OPTIONS ===
230行目: 215行目:
 
{{ic|COMPRESSION}} で指定したプログラムに渡す追加のフラグを記述します、例:
 
{{ic|COMPRESSION}} で指定したプログラムに渡す追加のフラグを記述します、例:
   
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 ===
{{Note|The following options alter the default behavior of {{ic|init}} in the initramfs environment. See {{ic|/usr/lib/initcpio/init}} for details.}}
 
   
; {{ic|root}}: カーネルコマンドラインで指定する一番重要なパラメータであり、どのデバイスを root デバイスとしてマウントするかを決めます。mkinitcpio は柔軟に様々な形式を使うことができるようになっています例:
+
; {{ic|root}}: カーネルコマンドラインで指定する一番重要なパラメータであり、どのデバイスを root デバイスとしてマウントするかを決めます。''mkinitcpio'' は柔軟に様々な形式を使うことができるようになっていますえば: {{bc|1=<nowiki>
root=/dev/sda1 # /dev node
+
root=/dev/sda1 # /dev node
root=LABEL=CorsairF80 # label
+
root=LABEL=CorsairF80 # label
root=UUID=ea1c4959-406c-45d0-a144-912f4e86b207 # UUID
+
root=UUID=ea1c4959-406c-45d0-a144-912f4e86b207 # UUID
root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 # GPT partition 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}} は置き換わるため機能しません。}}
root=/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0-part1 # udev symlink (requires the '''udev''' hook)
 
root=801 # hex-encoded major/minor number
 
   
; {{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 ハードドライブから起動するときなどに使います)。
 
 
参照: [[Boot debugging|Debugging with GRUB and init]]
 
   
 
=== RAID を使う ===
 
=== RAID を使う ===
   
  +
[[RAID#mdadm フックを mkinitcpio.conf に追加する]] を見てください。
まず、{{ic|/etc/mkinitcpio.conf}} 内の {{ic|HOOKS}} に {{ic|mdadm_udev}} または {{ic|mdadm}} フックを追加し、必要な RAID モジュール全て (例: raid456, ext4) を {{ic|MODULES}} に追加して下さい。
 
   
  +
=== net を使う ===
{{ic|mdadm}} フックを使う場合、[[カーネルパラメータ]]で RAID アレイを設定する必要はありません。{{ic|mdadm}} フックは {{ic|/etc/mdadm.conf}} ファイルを使うか、またはブート時の init 段階でアレイを自動で検出します。
 
   
  +
{{Note|NFSv4 はまだサポートされていません {{Bug|28287}}。}}
{{ic|mdadm_udev}} フックを使うことで udev による構築も可能です。上流ではこの方法が推奨されています。{{ic|/etc/mdadm.conf}} は構築されたデバイスに名前を付けるために読み込まれます。
 
   
  +
'''必要なパッケージ'''
=== net を使う ===
 
   
  +
{{ic|net}} は {{Pkg|mkinitcpio-nfs-utils}} パッケージを必要とします。
{{Warning|NFSv4 はまだサポートされていません。}}
 
   
'''必要なッケジ:'''
+
'''カーネルラメ'''
   
  +
公式の[https://docs.kernel.org/admin-guide/nfs/nfsroot.html カーネルドキュメント]に包括的で最新の情報が載っています。
{{ic|net}} は[[Official Repositories|公式リポジトリ]]の {{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 カーネルドキュメント]を参照しください。
   
  +
例:
The {{ic|<autoconf>}} parameter can appear alone as the value to the 'ip' parameter (without all the ':' characters before). If the value is "ip=off" or "ip=none", no autoconfiguration will take place, otherwise autoconfiguration will take place. The most common way to use this is "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'')、[[Network_Configuration#デバイス|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='''
308行目: 288行目:
 
{{ic|nfsroot}} パラメータがコマンドラインで指定されなかった場合、デフォルトで {{ic|/tftpboot/%s}} が使われます。
 
{{ic|nfsroot}} パラメータがコマンドラインで指定されなかった場合、デフォルトで {{ic|/tftpboot/%s}} が使われます。
   
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
+
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
   
''パラメータの説明:''
+
パラメータの説明を見るには {{ic|mkinitcpio -H net}} を実行してください。
 
<server-ip> Specifies the IP address of the NFS server. If this field
 
is not given, the default address as determined by the
 
`ip' variable (see below) is used. One use of this
 
parameter is for example to allow using different servers
 
for RARP and NFS. Usually you can leave this blank.
 
 
<root-dir> Name of the directory on the server to mount as root. If
 
there is a "%s" token in the string, the token will be
 
replaced by the ASCII-representation of the client's IP
 
address.
 
 
<nfs-options> Standard NFS options. All options are separated by commas.
 
If the options field is not given, the following defaults
 
will be used:
 
port = as given by server portmap daemon
 
rsize = 1024
 
wsize = 1024
 
timeo = 7
 
retrans = 3
 
acregmin = 3
 
acregmax = 60
 
acdirmin = 30
 
acdirmax = 60
 
flags = hard, nointr, noposix, cto, ac
 
 
'''root=/dev/nfs'''
 
 
{{ic|nfsroot}} パラメータを使わない場合、{{ic|1=root=/dev/nfs}} を設定して自動設定により NFS root から起動するようにする必要があります。
 
   
 
=== LVM を使う ===
 
=== LVM を使う ===
   
root デバイスを LVM 上に置いている場合は、'''lvm2''' フックを追加する必要があります。カーネルコマンドラインで以下の形式を使って root デバイスのパス通しさい:
+
root デバイスを [[LVM]] 上に置場合は、[[LVM に Arch Linux をインストールする#mkinitcpio フックを追加する]]ください
   
  +
=== 暗号化されたルートを使う ===
root=/dev/mapper/<volume group name>-<logical volume name>
 
   
  +
[[Dm-crypt/システム全体の暗号化|root を暗号化]]している場合、どのフックを含めるべきかに関する詳細な情報は [[Dm-crypt/システム設定#mkinitcpio]] を見て下さい。
例:
 
   
  +
=== /usr を別のパーティションに分割する ===
root=/dev/mapper/myvg-root
 
   
さらに、root デバイス初期化が遅かったり (例: USB デバイス) 起動時 "volume group not found" エラーが表示される場合、以下をカーネルコマンドラインに追加する必要があります:
+
{{ic|/usr}}パーティションを別る場合、以下を行う必要があります:
   
  +
* 起動時にこのパーティションのチェックを実行するために、{{ic|fsck}} フックを追加して、{{ic|/etc/fstab}} で {{ic|/usr}} の {{ic|passno}} を {{ic|2}} にする。起動時に {{ic|/usr}} を fsck したい場合は必須です (これはすべてのユーザに推奨されます)。このフックが存在しないと、{{ic|/usr}} は永遠に fsck されません。
lvmwait=/dev/mapper/<volume group name>-<logical volume name>
 
  +
* systemd フックを使っていない場合、{{ic|usr}} フックを追加する。ルートがマウントされた後に {{ic|/usr}} パーティションがマウントされるようになります。
   
  +
== トラブルシューティング ==
例:
 
   
  +
=== イメージの展開 ===
lvmwait=/dev/mapper/myvg-root
 
   
  +
initramfs イメージの中に何が入っているか気になるときは、イメージを展開して中に入っているファイルを調べることができます。
これは LVM がデバイスを利用可能にするまでブートプロセスを待機させます。
 
   
  +
initramfs イメージは SVR4 CPIO アーカイブであり、{{ic|find}} と {{ic|bsdcpio}} コマンドによって生成されています。また、任意で、カーネルが対応した圧縮方法によって圧縮されています。圧縮方法について詳しくは [[#COMPRESSION]] を見て下さい。
=== 暗号化された root を使う ===
 
   
  +
''mkinitcpio'' には {{man|1|lsinitcpio}} というユーティリティが含まれており initramfs イメージの中身を一覧・展開することができます。
[[Dm-crypt/Encrypting_an_entire_system|root を暗号化]]している場合、{{ic|filesystems}} の前に {{ic|encrypt}} フックを追加する必要があり、他のフックも必要になります。ブートローダーによって特定のカーネルコマンドラインパラメータを指定しなくてはなりません: 詳しくは [[Dm-crypt/System configuration#mkinitcpio]] を見て下さい。
 
   
=== /usr パティション分割する ===
+
イメジ内のファイル一覧するには:
   
  +
# lsinitcpio /boot/initramfs-linux.img
{{ic|/usr}} のパーティションを別にする場合、以下を行う必要があります:
 
   
  +
カレントディレクトリにファイルを全て展開するには:
* {{ic|mkinitcpio-generate-shutdown-ramfs.service}} を有効にするか {{ic|shutdown}} フックを追加してください。
 
* Add the {{ic|fsck}} hook, mark {{ic|/usr}} with a {{ic|passno}} of {{ic|0}} in {{ic|/etc/fstab}}. While recommended for everyone, it is mandatory if you want your {{ic|/usr}} partition to be fsck'ed at boot-up. Without this hook, {{ic|/usr}} will never be fsck'd.
 
* Add the {{ic|usr}} hook. This will mount the {{ic|/usr}} partition after root is mounted. Prior to 0.9.0, mounting of {{ic|/usr}} would be automatic if it was found in the real root's {{ic|/etc/fstab}}.
 
   
  +
# lsinitcpio -x /boot/initramfs-linux.img
== トラブルシューティング ==
 
   
  +
イメージの重要なパーツについて読みやすいリストを取得することもできます:
=== イメージの展開 ===
 
   
  +
# lsinitcpio -a /boot/initramfs-linux.img
initrd イメージの中に何が入っているか気になるときは、イメージを展開して中に入っているファイルを調べることができます。
 
   
  +
=== 展開して修正を加えたイメージの再圧縮 ===
initrd イメージは SVR4 CPIO アーカイブであり、{{ic|find}} と {{ic|bsdcpio}} コマンドによって生成されています。また、任意でカーネルが対応した圧縮方法によって圧縮されています。圧縮方法について詳しくは [[#COMPRESSION]] を見て下さい。
 
   
  +
{{ic|/usr/bin/mkinitcpio}} スクリプトの {{ic|build_image}} 関数を以下のパラメータで実行してください:
mkinitcpio には {{ic|lsinitcpio}} というユーティリティが含まれており initramfs イメージの中身を一覧・展開することができます。
 
   
イメージ内のファイルを一覧するには:
+
build_image ''出力ファイル'' ''圧縮方式''
$ lsinitcpio /boot/initramfs-linux.img
 
   
  +
{{ic|build_image}} 関数の内容で新しいスクリプトを作成することでこれを実行できます。
作業ディレクトリにファイルを全て展開するには:
 
  +
これはカレントディレクトリ内の内容を {{ic|''出力ファイル''}} というファイルに圧縮します。
$ lsinitcpio -x /boot/initramfs-linux.img
 
   
  +
{{Warning|上書きするまえに自動生成された {{ic|/boot/initramfs-linux.img}} の名前を変更することで、簡単に元に戻すことができるようになります。何か問題が発生して起動できなくなった場合、fallback イメージやブート CD で起動して、{{ic|mkinitcpio}} を実行して元のイメージに戻してください。あるいは、自分で修正してイメージを再圧縮してください。}}
イメージの重要なパーツについて読みやすいリストを取得することもできます:
 
$ lsinitcpio -a /boot/initramfs-linux.img
 
   
 
=== マウントされているのに "/dev must be mounted" と表示される ===
 
=== マウントされているのに "/dev must be mounted" と表示される ===
  +
The test used by mkinitcpio to determine if {{ic|/dev}} is mounted is to see if {{ic|/dev/fd/}} is there. If everything else looks fine, it can be "created" manually by:
 
  +
{{ic|/dev}} がマウントされているかどうか確認するために mkinitcpio は {{ic|/dev/fd/}} が存在するかどうかを確かめます。問題がないようでしたら、手動で作成することができます:
  +
 
# ln -s /proc/self/fd /dev/
 
# ln -s /proc/self/fd /dev/
   
  +
(当然 {{ic|/proc}} のマウントも必要です。''mkinitcpio'' によって次にチェックされます。)
(Obviously, /proc must be mounted as well. mkinitcpio requires that anyway, and that is the next thing it will check.)
 
  +
  +
=== 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
  +
  +
''default'' initramfs イメージを生成するときに同じようなメッセージが表示される場合、警告メッセージが言っている通り、追加のファームウェアをインストールする必要があるかもしれません。ほとんどの一般的なファームウェアファイルは {{Pkg|linux-firmware}} パッケージを[[インストール]]することで入手できます。ファームウェアを提供する他のパッケージについては、以下の表を見るか、[[公式リポジトリ]]や [[AUR]] でモジュール名を検索してみてください。
  +
  +
メッセージが ''fallback'' initramfs イメージの生成時にのみ表示される場合は、以下の2つの選択肢があります:
  +
  +
* 影響を受けるハードウェアを使用しないことがわかっている場合は、警告を安全に無視できます。
  +
* 警告を抑制したい場合、不足しているファームウェアをインストールできます。メタパッケージ {{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}}
  +
|}
  +
* 警告を取り除きたいが、必要ないファームウェアパッケージのためにシステムの空き領域を無駄にしたくない場合、fallback initramfs の生成を無効化することができます:
  +
*# {{ic|/etc/mkinitcpio.d/}} 内のすべての ''.preset'' ファイルで、{{ic|1=PRESETS=('default' 'fallback')}} 行を {{ic|1=PRESETS=('default')}} に変更してください。
  +
*# fallback initramfs イメージを削除してください: {{ic|# rm /boot/*-fallback.img}}。
  +
*# ブートローダの設定ファイルを再生成してください (例えば、[[GRUB]] の場合: {{ic|# grub-mkconfig -o /boot/grub/grub.cfg}})。
  +
:{{Warning|fallback 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 ディスクを使用すると、システムが起動できなくなることがよくあります。 したがって、以下のようなシステムレスキュー手順に従ってください:
  +
  +
==== あるマシンでは起動できるが他のマシンでは起動できない ====
  +
  +
''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|手動]]で追加します。
   
 
== 参照 ==
 
== 参照 ==
  +
* [[ブートデバッグ]] - GRUB によるデバッグ
 
* Linux カーネルドキュメント [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/filesystems/ramfs-rootfs-initramfs.txt;hb=HEAD initramfs]
+
* Linux カーネルドキュメント [https://docs.kernel.org/filesystems/ramfs-rootfs-initramfs.html#what-is-rootfs initramfs, "What is rootfs?"]
* Linux カーネルドキュメント [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/initrd.txt;hb=HEAD initrd]
+
* Linux カーネルドキュメント [https://docs.kernel.org/admin-guide/initrd.html initrd]
* [[Wikipedia:ja:initrd]]
+
* Wikipedia 記事 [[wikipedia:ja:initrd|initrd]]
  +
  +
{{TranslationStatus|mkinitcpio|2022-08-17|735796}}

2022年9月1日 (木) 13:44時点における版

関連記事

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. default RAM ディスクイメージ。このイメージの内容は、mkinicpio の #設定 で指定されたディレクティブに従って生成されます。
  2. fallback 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 フックを置き換えました。
ノート: 異なるハードウェア構成で起動されるシステム(たとえば、外部キーボードと内部キーボードを備えたラップトップまたは ヘッドレスシステム) の場合、起動時にキーボードを利用できるようにするために (例えば、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 に Arch Linux をインストールする#mkinitcpio フックを追加する を見てください。

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

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 の名前を変更することで、簡単に元に戻すことができるようになります。何か問題が発生して起動できなくなった場合、fallback イメージやブート 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

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

メッセージが fallback 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
  • 警告を取り除きたいが、必要ないファームウェアパッケージのためにシステムの空き領域を無駄にしたくない場合、fallback initramfs の生成を無効化することができます:
    1. /etc/mkinitcpio.d/ 内のすべての .preset ファイルで、PRESETS=('default' 'fallback') 行を PRESETS=('default') に変更してください。
    2. fallback initramfs イメージを削除してください: # rm /boot/*-fallback.img
    3. ブートローダの設定ファイルを再生成してください (例えば、GRUB の場合: # grub-mkconfig -o /boot/grub/grub.cfg)。
警告: fallback 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 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。