「Mkinitcpio」の版間の差分
細 (文字列「[[zh-CN:」を「[[zh-hans:」に置換) |
(同期) |
||
7行目: | 7行目: | ||
[[es:Mkinitcpio]] |
[[es:Mkinitcpio]] |
||
[[fr:mkinitcpio]] |
[[fr:mkinitcpio]] |
||
+ | [[id:Mkinitcpio]] |
||
[[it:Mkinitcpio]] |
[[it:Mkinitcpio]] |
||
[[ru:Mkinitcpio]] |
[[ru:Mkinitcpio]] |
||
13行目: | 14行目: | ||
{{Related|systemd}} |
{{Related|systemd}} |
||
{{Related|カーネルモジュール}} |
{{Related|カーネルモジュール}} |
||
+ | {{Related|initramfs の最小化}} |
||
+ | {{Related|ブートデバッグ}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
'''mkinitcpio''' は次世代の [[Wikipedia:ja:initrd|initramfs]] 作成ツールです。 |
'''mkinitcpio''' は次世代の [[Wikipedia:ja:initrd|initramfs]] 作成ツールです。 |
||
18行目: | 21行目: | ||
== 概要 == |
== 概要 == |
||
− | mkinitcpio は initial ramdisk 環境を作成するために使われる Bash スクリプトです。 |
+ | mkinitcpio は initial ramdisk 環境を作成するために使われる Bash スクリプトです。{{man|8|mkinitcpio|url=https://projects.archlinux.org/mkinitcpio.git/tree/man/mkinitcpio.8.txt}} より: |
:''initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして init にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せることが可能になります。mkinitcpio はカスタムフックによって簡単に拡張することができ、自動時の自動検知など様々な機能を持っています。'' |
:''initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして init にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せることが可能になります。mkinitcpio はカスタムフックによって簡単に拡張することができ、自動時の自動検知など様々な機能を持っています。'' |
||
26行目: | 29行目: | ||
今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのマニュファクチャーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペースへ管理を譲渡することです: initial ramdisk。 |
今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのマニュファクチャーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペースへ管理を譲渡することです: initial ramdisk。 |
||
− | 参照: [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 は initramfs CPIO イメージを作成するためのモジュール式のツールで、他の方法に比べて多くのアドバンテージを有します。例えば: |
mkinitcpio は initramfs CPIO イメージを作成するためのモジュール式のツールで、他の方法に比べて多くのアドバンテージを有します。例えば: |
||
33行目: | 36行目: | ||
* 実行時のハードウェア自動検知のための ''[[udev]]'' サポート、そして不必要なモジュールのロードの回避。 |
* 実行時のハードウェア自動検知のための ''[[udev]]'' サポート、そして不必要なモジュールのロードの回避。 |
||
* 拡張性のあるフックベースの init スクリプト、カスタムフックを簡単に [[pacman]] パッケージに含めることが可能。 |
* 拡張性のあるフックベースの init スクリプト、カスタムフックを簡単に [[pacman]] パッケージに含めることが可能。 |
||
− | * LUKS ボリュームのための |
+ | * LUKS ボリュームのための [[LVM2]], [[dm-crypt]] サポート。USB マスストレージデバイスからのレジューム・ブートのための [[RAID]], [[サスペンドとハイバネート#カーネル (swsusp)|swsusp]], [[TuxOnIce]] サポート。 |
* イメージをリビルドする必要なくカーネルコマンドラインから多くの機能を設定可能。 |
* イメージをリビルドする必要なくカーネルコマンドラインから多くの機能を設定可能。 |
||
42行目: | 45行目: | ||
{{Pkg|mkinitcpio}} パッケージは[[公式リポジトリ]]で利用可能で {{Pkg|linux}} パッケージの依存パッケージになっています。 |
{{Pkg|mkinitcpio}} パッケージは[[公式リポジトリ]]で利用可能で {{Pkg|linux}} パッケージの依存パッケージになっています。 |
||
− | 上級 |
+ | 上級者は {{AUR|mkinitcpio-git}} パッケージで mkinitcpio の最新開発バージョンをインストールできます。 |
− | <nowiki>$ git clone git://projects.archlinux.org/mkinitcpio.git</nowiki> |
||
{{Note|Git から mkinitcpio を使う時は [https://mailman.archlinux.org/mailman/listinfo/arch-projects arch-projects メーリングリスト]を購読することが''強く''推奨されます!}} |
{{Note|Git から mkinitcpio を使う時は [https://mailman.archlinux.org/mailman/listinfo/arch-projects arch-projects メーリングリスト]を購読することが''強く''推奨されます!}} |
||
65行目: | 67行目: | ||
現在動作しているカーネル以外のカーネル用のイメージを作成するときは、コマンドラインにカーネルのバージョンを加えて下さい。{{ic|/usr/lib/modules}} 内でカーネルバージョンを見ることができます。 |
現在動作しているカーネル以外のカーネル用のイメージを作成するときは、コマンドラインにカーネルのバージョンを加えて下さい。{{ic|/usr/lib/modules}} 内でカーネルバージョンを見ることができます。 |
||
− | # mkinitcpio -g /boot/linux.img -k 3.3.0-ARCH |
+ | # mkinitcpio -g /boot/linux-custom2.img -k 3.3.0-ARCH |
== 設定 == |
== 設定 == |
||
141行目: | 143行目: | ||
通常のフックとイメージ生成への影響と関連するランタイムを示した表です。パッケージにカスタムフックを入れることができるので、この表は完全ではないことに注意してください。 |
通常のフックとイメージ生成への影響と関連するランタイムを示した表です。パッケージにカスタムフックを入れることができるので、この表は完全ではないことに注意してください。 |
||
− | {| class="wikitable |
+ | {| class="wikitable" |
|+ '''現行のフック''' |
|+ '''現行のフック''' |
||
|- |
|- |
||
− | ! |
+ | ! busybox !! systemd !! インストール !! ランタイム |
|- |
|- |
||
− | | '''base''' || 全ての initial directory をセットアップし基本のユーティリティとライブラリをインストールする。何をしようとしているのかわからない限りはこのフックを一番最初のフックにしておいてください。 |
+ | |colspan="2" style="text-align: center;"| '''base''' || 全ての initial directory をセットアップし基本のユーティリティとライブラリをインストールする。何をしようとしているのかわからない限りはこのフックを一番最初のフックにしておいてください。'''systemd''' フックを使用している場合、busybox のリカバリシェルが提供されます。 |
+ | | -- |
||
|- |
|- |
||
+ | | style="text-align: center;"| '''udev''' ||rowspan="3" style="text-align: center;"| '''systemd''' || イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 || dev デーモンを起動してカーネルからの uevent を処理します。デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。 |
||
− | | '''systemd''' || このフックは基本的な systemd セットアップを initramfs にインストールします。これによって 'base', 'usr', 'udev' フックが置き換えられます。(暗号化など) 他のフックも移す必要がありますが、期待通りには動作しません。下にある systemd 特有のフック ("sd-*") を使用するときは、必須になります。{{Pkg|systemd}} 207 から、このフックは lvm2 と一緒に使うと上手く動作せず起動できなくなることがあります。''lvm2'' フックの代わりに ''sd-lvm2'' フックを使って下さい。initramfs で緊急シェルが使えるように (このフックの前に) ''base'' フックを含めると良いでしょう。{{Pkg|systemd}} 217 から、このフックはハイバネートからの復帰に必要なサービスやバイナリヘルパーもインストールします。 || systemd 217 で起動して、カーネルコマンドラインの resume パラメータのハイバネーションイメージを探して、イメージからの復帰を開始します。 |
||
|- |
|- |
||
+ | | style="text-align: center;"| '''usr''' || {{ic|/usr}} の分割パーティションのサポートを追加。 || real root がマウントされた後に {{ic|/usr}} パーティションをマウントします。 |
||
− | | '''btrfs''' || root で [[Btrfs]] を有効にしてサブボリュームを使用するために必要なモジュールを設定します。 || udev フックが存在しないときに {{ic|btrfs device scan}} を実行してマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには {{Pkg|btrfs-progs}} パッケージが必要です。 |
||
|- |
|- |
||
− | | '''udev''' || イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 || udev デーモンを起動してカーネルからの uevent を処理します。デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。 |
||
|- |
|- |
||
+ | | style="text-align: center;"| '''resume''' || style="text-align: center;"| -- || "ハイバネート" (suspend to disk) 状態からの復帰を試みます。'''resume''' フックは ''swsusp'' と ''[[TuxOnIce]]'' をサポートしており、'''systemd''' フックは ''swsusp'' にしか対応していません。詳しい設定方法は[[ハイバネート]]を見てください。 |
||
− | | '''autodetect''' || sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。'autodetect' より前に置かれたフックは完全にインストールされます。 || -- |
||
|- |
|- |
||
+ | | style="text-align: center;"| '''btrfs''' || {{Grey|--}} || root で [[Btrfs]] を有効にしてサブボリュームを使用するために必要なモジュールを設定します。シングルデバイスで Btrfs を使うだけならこのフックは不要です。 || udev フックが存在しないときに {{ic|btrfs device scan}} を実行してマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには {{Pkg|btrfs-progs}} パッケージが必要です。 |
||
− | | '''modconf''' || {{ic|/etc/modprobe.d}} と {{ic|/usr/lib/modprobe.d}} から modprobe 設定ファイルをロードします。 || -- |
||
|- |
|- |
||
+ | |colspan="2" style="text-align: center;"| '''autodetect''' || sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。'autodetect' より前に置かれたフックは完全にインストールされます。 || -- |
||
− | | '''block''' || 全てのブロックデバイスモジュールを追加します。昔は ''fw'', ''mmc'', ''pata'', ''sata'', ''scsi'' , ''usb'', ''virtio'' フックに分かれていました。 || -- |
||
|- |
|- |
||
+ | |colspan="2" style="text-align: center;"| '''modconf''' || {{ic|/etc/modprobe.d}} と {{ic|/usr/lib/modprobe.d}} から modprobe 設定ファイルをロードします。 || -- |
||
− | | '''pcmcia''' || PCMCIA デバイスに必要なモジュールを追加します。これを使うには {{Pkg|pcmciautils}} をインストールする必要があります。 || -- |
||
|- |
|- |
||
− | | ''' |
+ | |colspan="2" style="text-align: center;"| '''block''' || 全てのブロックデバイスモジュールを追加します。昔は ''fw'', ''mmc'', ''pata'', ''sata'', ''scsi'' , ''usb'', ''virtio'' フックに分かれていました。 || -- |
|- |
|- |
||
− | | ''' |
+ | |colspan="2" style="text-align: center;"| '''pcmcia''' || PCMCIA デバイスに必要なモジュールを追加します。これを使うには {{Pkg|pcmciautils}} をインストールする必要があります。 || -- |
|- |
|- |
||
− | | ''' |
+ | | style="text-align: center;"| '''net''' || {{R|''未実装''}} || ネットワークデバイスに必要なモジュールを追加します。PCMCIA net デバイスには ''pcmcia'' フックも追加してください。 || NFS の root ファイルシステムの管理を提供します。 |
|- |
|- |
||
− | | ''' |
+ | | style="text-align: center;"| '''dmraid''' || style="text-align: center;"| ''?'' || fakeRAID root デバイスのサポートを提供します。これを使うには {{Pkg|dmraid}} をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では ''mdadm_udev'' フックと一緒に {{ic|mdadm}} を使うことが推奨されます。 || {{ic|dmraid}} を使用して fakeRAID ブロックデバイスを構築します。 |
|- |
|- |
||
+ | | style="text-align: center;"| '''mdadm''' || {{Grey|--}} || {{ic|/etc/mdadm.conf}} からの RAID アレイの構築や、起動中の自動検出のサポートを提供します。これを使うには {{Pkg|mdadm}} のインストールが必須です。このフックよりも ''mdadm_udev'' フックが推奨されています。 || {{ic|mdassemble}} を使ってソフトウェア RAID ブロックデバイスを構築します。 |
||
− | | '''keyboard''' || キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。 || -- |
||
|- |
|- |
||
+ | |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'' フックを使うよりも)。 |
||
− | | '''keymap''' || {{ic|/etc/vconsole.conf}} から initramfs に指定したキーマップを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップをロードします。 |
||
|- |
|- |
||
+ | |colspan="2" style="text-align: center;"| '''keyboard''' || キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。 || -- |
||
− | | '''consolefont''' || {{ic|/etc/vconsole.conf}} から initramfs に指定したコンソールフォントを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたコンソールフォントをロードします。 |
||
|- |
|- |
||
− | | '''sd-vconsole''' || {{ic|/etc/vconsole.conf}} から |
+ | | style="text-align: center;"| '''keymap''' ||rowspan="2" style="text-align: center;"| '''sd-vconsole''' || {{ic|/etc/vconsole.conf}} から initramfs に指定したキーマップを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップをロードします。 |
− | |- |
||
− | | '''encrypt''' || {{ic|dm_crypt}} カーネルモジュールと {{ic|cryptsetup}} ツールをイメージに追加します。これを使うには {{Pkg|cryptsetup}} をインストールする必要があります。 || 暗号化された root パーティションを検知してアンロックします。設定については [[#ランタイムのカスタマイズ]] を見て下さい。 |
||
− | |- |
||
− | | '''sd-encrypt''' || このフックを使うことで systemd initramfs で暗号化された root デバイスを扱えます。 |
||
− | |||
− | 利用できるカーネルコマンドラインオプションについては systemd-cryptsetup-generator(8) の man ページを見て下さい。また、{{ic|/etc/crypttab.initramfs}} ファイルが存在する場合、{{ic|/etc/crypttab}} として initramfs に追加されます。crypttab の構文の詳細は crypttab(5) manpage を見て下さい。 |
||
− | | -- |
||
|- |
|- |
||
+ | | style="text-align: center;"| '''consolefont''' || {{ic|/etc/vconsole.conf}} から initramfs に指定したコンソールフォントを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたコンソールフォントをロードします。 |
||
− | | '''lvm2''' || device mapper カーネルモジュールと {{ic|lvm}} ツールをイメージに追加します。これを使うには {{Pkg|lvm2}} をインストールする必要があります。 || 全ての LVM2 ボリュームグループを有効にします。root ファイルシステムが [[LVM]] 上にある場合は必須です。 |
||
|- |
|- |
||
+ | | style="text-align: center;"| '''encrypt''' || style="text-align: center;"| '''sd-encrypt''' || {{ic|dm_crypt}} カーネルモジュールと {{ic|cryptsetup}} ツールをイメージに追加します。これを使うには {{Pkg|cryptsetup}} をインストールする必要があります。 || 暗号化された root パーティションを検知してアンロックします。設定については [[#ランタイムのカスタマイズ]] を見て下さい。'''sd-encrypt''' の利用できるカーネルコマンドラインオプションについては {{man|8|systemd-cryptsetup-generator|url=https://www.freedesktop.org/software/systemd/man/systemd-cryptsetup-generator.html}} を見て下さい。また、{{ic|/etc/crypttab.initramfs}} ファイルが存在する場合、{{ic|/etc/crypttab}} として initramfs に追加されます。crypttab の構文の詳細は {{man|5|crypttab|url=https://www.freedesktop.org/software/systemd/man/crypttab.html}} を見て下さい。 |
||
− | | '''fsck''' || fsck バイナリとファイルシステム特有のヘルパーを追加します。''autodetect'' フックの後ろに追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は強く推奨されており、{{ic|/usr}} パーティションを分割する場合は必須です。 || root デバイス (と分割している場合は {{ic|/usr}}) に対してマウントする前に fsck を実行します。ブートローダーのデフォルト設定で問題ありませんが、疑問がある場合は [https://bbs.archlinux.org/viewtopic.php?pid=1307895#p1307895 こちらの設定] を読んで下さい。 |
||
|- |
|- |
||
+ | | style="text-align: center;"| '''lvm2''' || style="text-align: center;"| '''sd-lvm2''' || device mapper カーネルモジュールと {{ic|lvm}} ツールをイメージに追加します。これを使うには {{Pkg|lvm2}} をインストールする必要があります。 || 全ての LVM2 ボリュームグループを有効にします。root ファイルシステムが [[LVM]] 上にある場合は必須です。 |
||
− | | '''resume''' || ハイバネートを検出・復帰するための sh initramfs で動作するシェルスクリプトをインストールします。 || "ハイバネート" (suspend to disk) 状態からの復帰を試みます。''swsusp'' と ''[[TuxOnIce|suspend2]]'' の両方と一緒に動作します。設定は [[#ランタイムのカスタマイズ]] を見て下さい。systemd 217 から、systemd initramfs ではハイバネートに必要ありません。 |
||
|- |
|- |
||
+ | |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 こちらの設定] を読んで下さい。 |
||
− | | '''filesystems''' || イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを MODULES で指定していない限りこのフックが必要になります。 || -- |
||
|- |
|- |
||
+ | |colspan="2" style="text-align: center;"| '''filesystems''' || イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを MODULES で指定していない限りこのフックが必要になります。 || -- |
||
− | | '''shutdown''' || シャットダウン initramfs サポートを追加します。mkinitcpio 0.16 以前までは {{ic|/usr}} パーティションを分割していたり root を暗号化しているときはこのフックを使うことを強く推奨されていました。mkinitcpio 0.16 以降から、[https://mailman.archlinux.org/pipermail/arch-dev-public/2013-December/025742.html 必須ではない]とされています。 || シャットダウン時にデバイスをアンマウント・取り外します。 |
||
|- |
|- |
||
− | | '''usr''' || {{ic|/usr}} の分割パーティションのサポートを追加。 || real root がマウントされた後に {{ic|/usr}} パーティションをマウントします。 |
||
|} |
|} |
||
257行目: | 251行目: | ||
; {{ic|rootdelay=N}}: {{ic|rootdelay}} を追加すると root ファイルシステムをマウントする前に {{ic|N}} 秒間だけ停止します (例えば、初期化に時間がかかる USB ハードドライブから起動するときなどに使います)。 |
; {{ic|rootdelay=N}}: {{ic|rootdelay}} を追加すると root ファイルシステムをマウントする前に {{ic|N}} 秒間だけ停止します (例えば、初期化に時間がかかる USB ハードドライブから起動するときなどに使います)。 |
||
− | 他のパラメータについては[[ブートデバッグ]]や |
+ | 他のパラメータについては[[ブートデバッグ]]や {{man|8|mkinitcpio|url=https://projects.archlinux.org/mkinitcpio.git/tree/man/mkinitcpio.8.txt#n212}} を見て下さい。 |
=== RAID を使う === |
=== RAID を使う === |
||
269行目: | 263行目: | ||
=== net を使う === |
=== net を使う === |
||
− | {{Warning|NFSv4 はまだサポートされていません。}} |
+ | {{Warning|NFSv4 はまだサポートされていません ({{Bug|28287}})。}} |
'''必要なパッケージ:''' |
'''必要なパッケージ:''' |
||
342行目: | 336行目: | ||
=== LVM を使う === |
=== LVM を使う === |
||
− | root デバイスを [[LVM]] 上に置く場合は、[[LVM# |
+ | root デバイスを [[LVM]] 上に置く場合は、[[LVM#mkinitcpio.conf の設定|lvm2 フックを mkinitcpio.conf に追加する]]必要があります。 |
=== 暗号化された root を使う === |
=== 暗号化された root を使う === |
||
352行目: | 346行目: | ||
{{ic|/usr}} のパーティションを別にする場合、以下を行う必要があります: |
{{ic|/usr}} のパーティションを別にする場合、以下を行う必要があります: |
||
− | * {{ic|mkinitcpio-generate-shutdown-ramfs.service}} を有効にするか {{ic|shutdown}} フックを追加してください。 |
||
* {{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|0}} にする。起動時に {{ic|/usr}} を fsck したい場合は必須です。このフックが存在しないと、{{ic|/usr}} は永遠に fsck されません。 |
||
− | * {{ic|usr}} フックを追加。ルートがマウントされた後に {{ic|/usr}} パーティションがマウントされるようになります。0.9.0 以前では、{{ic|/usr}} はルートの {{ic|/etc/fstab}} で確認されたら自動的にマウントされていました。[[Fstab]] を参照。 |
+ | * systemd フックを使っていない場合、{{ic|usr}} フックを追加。ルートがマウントされた後に {{ic|/usr}} パーティションがマウントされるようになります。0.9.0 以前では、{{ic|/usr}} はルートの {{ic|/etc/fstab}} で確認されたら自動的にマウントされていました。[[Fstab]] を参照。 |
== トラブルシューティング == |
== トラブルシューティング == |
||
374行目: | 367行目: | ||
イメージの重要なパーツについて読みやすいリストを取得することもできます: |
イメージの重要なパーツについて読みやすいリストを取得することもできます: |
||
$ 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行に以下のような表示がされます: |
||
+ | + find -mindepth 1 -printf '%P\0' |
||
+ | + LANG=C |
||
+ | + bsdcpio -0 -o -H newc --quiet |
||
+ | + gzip |
||
+ | |||
+ | 上記の出力が再圧縮するのに必要なコマンドになります。例: |
||
+ | # find -mindepth 1 -printf '%P\0' | LANG=C bsdcpio -0 -o -H newc --quiet | gzip > /boot/initramfs-linux.img |
||
+ | |||
+ | {{Warning|上書きするまえに自動生成された {{ic|/boot/initramfs-linux.img}} の名前を変更することで、簡単に元に戻すことができるようになります。何か問題が発生して起動できなくなった場合、フォールバックイメージやブート CD で起動して、{{ic|mkinitcpio}} を実行して元のイメージに戻してください。}} |
||
=== マウントされているのに "/dev must be mounted" と表示される === |
=== マウントされているのに "/dev must be mounted" と表示される === |
||
379行目: | 388行目: | ||
# 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.) |
||
=== LUKS/LVM/resume セットアップで systemd フックを使う === |
=== LUKS/LVM/resume セットアップで systemd フックを使う === |
||
− | 伝統的な {{ic|encrypt/lvm2/resume}} の代わりに {{ic|systemd/sd-encrypt/sd-lvm2}} フックを使う場合、ブートローダーで別の initrd パラメータを渡す必要があります。詳しくはフォーラムの投稿を見て下さい [https://bbs.archlinux.org/viewtopic.php?pid=1480241]。 |
+ | 伝統的な {{ic|encrypt}}/{{ic|lvm2}}/{{ic|resume}} の代わりに {{ic|systemd}}/{{ic|sd-encrypt}}/{{ic|sd-lvm2}} フックを使う場合、ブートローダーで別の initrd パラメータを渡す必要があります。詳しくはフォーラムの投稿を見て下さい [https://bbs.archlinux.org/viewtopic.php?pid=1480241]。 |
=== Possibly missing firmware for module XXXX === |
=== Possibly missing firmware for module XXXX === |
||
394行目: | 403行目: | ||
=== あるマシンでは起動できるが他のマシンでは起動できない === |
=== あるマシンでは起動できるが他のマシンでは起動できない === |
||
− | ''mkinitcpio'' の {{ic|autodetect}} フックは {{ic|/sys}} をスキャンしてロードされているカーネルモジュールを確認して不要な[[カーネルモジュール]]を排除します。{{ic|/boot}} ディレクトリを他のマシンに移動して、初期ユーザー空間でブートが失敗する場合、カーネルモジュールが存在しないために新しいハードウェアが検出されていないのが原因かもしれません。 |
+ | ''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] |
||
− | * [[ブートデバッグ]] - GRUB によるデバッグ |
||
− | * Linux カーネルドキュメントの [https://git.kernel.org/ |
+ | * Linux カーネルドキュメントの [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/initrd.txt?id=HEAD initrd] |
− | * Linux カーネルドキュメントの [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/initrd.txt;hb=HEAD initrd] |
||
* [[Wikipedia:ja:initrd]] |
* [[Wikipedia:ja:initrd]] |
||
+ | * {{App|[[w:dracut (software)|dracut]]|クロスディストリビューションの initramfs 生成ツール。|https://dracut.wiki.kernel.org/|{{AUR|dracut}}}} |
2017年8月16日 (水) 21:12時点における版
mkinitcpio は次世代の initramfs 作成ツールです。
概要
mkinitcpio は initial ramdisk 環境を作成するために使われる Bash スクリプトです。mkinitcpio(8) より:
- initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして init にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せることが可能になります。mkinitcpio はカスタムフックによって簡単に拡張することができ、自動時の自動検知など様々な機能を持っています。
伝統的には、ブートプロセスの初めにハードウェアを検知したりタスクの初期化を行うのはカーネルで、それから root ファイルシステムがマウントされ init
にコントロールが移されます。しかしながら、先端技術が生まれるにつれ、こういった作業は複雑になりつつあります。
今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのマニュファクチャーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペースへ管理を譲渡することです: initial ramdisk。
参照: /dev/brain0 » Blog Archive » Early Userspace in Arch Linux。
mkinitcpio は initramfs CPIO イメージを作成するためのモジュール式のツールで、他の方法に比べて多くのアドバンテージを有します。例えば:
- 初期ユーザ空間の小さくて軽量な基盤として BusyBox を使用。
- 実行時のハードウェア自動検知のための udev サポート、そして不必要なモジュールのロードの回避。
- 拡張性のあるフックベースの init スクリプト、カスタムフックを簡単に pacman パッケージに含めることが可能。
- LUKS ボリュームのための LVM2, dm-crypt サポート。USB マスストレージデバイスからのレジューム・ブートのための RAID, swsusp, TuxOnIce サポート。
- イメージをリビルドする必要なくカーネルコマンドラインから多くの機能を設定可能。
mkinitcpio は Arch Linux デベロッパーとコミュニティの貢献によって開発されています。Git リポジトリを見て下さい。
インストール
mkinitcpio パッケージは公式リポジトリで利用可能で linux パッケージの依存パッケージになっています。
上級者は mkinitcpio-gitAUR パッケージで mkinitcpio の最新開発バージョンをインストールできます。
イメージ作成とアクティベーション
デフォルトで、カーネルのインストール・アップグレードが行われた後 mkinitcpio スクリプトは2つのイメージを生成します: /boot/initramfs-linux.img
と /boot/initramfs-linux-fallback.img
。fallback イメージは default イメージと同じ設定ファイルを利用しますが、作成中に autodetect フックだけはスキップされ、全てのモジュールが入ります。autodetect フックは必要なモジュールを検出して、イメージを固有のハードウェアにあわせて、initramfs を小さくします。
様々な設定ファイルを使って initramfs イメージを沢山作りたいと思っているユーザーもいるかもしれません。ブートローダに使いたいイメージを指定する必要があります、主としてブートローダの設定ファイルで指定します。設定ファイルに変更を加えた後は、イメージを再生成しなければなりません。標準の Arch Linux カーネル linux で再生成するには次のコマンドを root 権限で実行してください:
# mkinitcpio -p linux
-p
スイッチはプリセット (preset) を使うことを示します; ほとんどのカーネルパッケージは /etc/mkinitcpio.d
の中に関連する mkinitcpio プリセットファイルを提供しています (例: linux
は /etc/mkinitcpio.d/linux.preset
)。毎回設定ファイルと出力ファイルを指定する代わりに initramfs イメージを作成する方法がプリセットに定義されています。
ユーザーは他の設定ファイルを使ってイメージを手動で作成することもできます。例えば、以下のコマンドは /etc/mkinitcpio-custom.conf
の指示に従って initramfs イメージを生成し /boot/linux-custom.img
にイメージを保存します。
# mkinitcpio -c /etc/mkinitcpio-custom.conf -g /boot/linux-custom.img
現在動作しているカーネル以外のカーネル用のイメージを作成するときは、コマンドラインにカーネルのバージョンを加えて下さい。/usr/lib/modules
内でカーネルバージョンを見ることができます。
# mkinitcpio -g /boot/linux-custom2.img -k 3.3.0-ARCH
設定
mkinitcpio の基本の設定ファイルは /etc/mkinitcpio.conf
です。さらに、カーネルパッケージによって提供されるプリセット定義が /etc/mkinitcpio.d
ディレクトリにあります (例: /etc/mkinitcpio.d/linux.preset
)。
ユーザーは設定ファイルの中にある6つの変数を修正することが可能です:
MODULES
- boot フックが実行される前にロードするべきカーネルモジュール。
BINARIES
- initramfs イメージに含める追加のバイナリ。
FILES
- initramfs イメージに含める追加のファイル。
HOOKS
- フックは initial ramdisk で実行するスクリプトです。
COMPRESSION
- initramfs イメージを圧縮するのに使われます。
COMPRESSION_OPTIONS
COMPRESSION
プログラムに渡すコマンドラインオプション。この設定の使用はあまり推奨されません。mkinitcpio は圧縮プログラムに特殊な細工を施すので (例: xz には--check=crc32
を指定します)、誤って利用するとシステムが起動できなくなる可能性があります。
MODULES
MODULES 行では何か他のことが行われる前にロードするモジュールを指定します。
モジュールの後ろに ?
を付けると、モジュールが見つからなかったときでもエラーを投げません。これは、フックや設定ファイルにリストアップされたモジュールを含んでコンパイルするカスタムカーネルで有益かもしれません。
BINARIES と FILES
ユーザーはオプションを使ってイメージにファイルを追加することができます。BINARIES
と FILES
はフックが実行される前に追加され、フックによって使用されるファイルを上書きすることがあります。BINARIES
は標準の PATH
に自動で配置され、依存関係がパースされます。つまり必要なライブラリも全て追加されます。FILES
はそのままの状態で (as-is) 追加されます。例:
FILES="/etc/modprobe.d/modprobe.conf"
BINARIES="kexec"
BINARIES
と FILES
のどちらでも、スペースで区切ることで複数のエントリを追加することができます。
HOOKS
HOOKS
設定は設定ファイルの中で一番重要な設定です。フックはイメージに追加されるものを記述する小さなスクリプトです。フックによっては、デーモンを起動したりスタックしたブロックデバイスを集めたりするためのランタイムコンポーネントを含んでいるものもあります。フックは名前によって参照され、設定ファイルの HOOKS
にある順番通りに実行されます。
ほとんどのシンプルな、シングルディスクセットアップではデフォルトの HOOKS
設定で十分なはずです。LVM, mdadm, dm-crypt などスタックした root デバイスやマルチブロックデバイスを使う時は、関連する wiki ページを見て必要な設定を調べて下さい。
ビルドフック
ビルドフックは /usr/lib/initcpio/install
にあります。これらのファイルは mkinitcpio の実行時に bash シェルによって実行されます。ビルドフックには2つの関数が含まれています: build
と help
。build
関数にはイメージに追加するモジュール・ファイル・バイナリを記述します。これらのアイテムの追加を容易にする mkinitcpio(8) による API が用意されています。help
関数はフックの役割を出力します。
すべてのフックを一覧するには:
$ mkinitcpio -L
特定のフックのヘルプを出力するには mkinitcpio の -H
オプションを使って下さい、例えば:
$ mkinitcpio -H udev
ランタイムフック
ランタイムフックは /usr/lib/initcpio/hooks
にあります。全てのランタイムフックには同じ名前のビルドフックが存在している必要があり、そのビルドフックは add_runscript
をコールしてランタイムフックをイメージに追加します。これらのファイルは初期ユーザ空間で busybox の ash シェルによって実行されます。cleanup フックを除いて全てのフックは HOOKS
設定の順番で実行されます。ランタイムフックには複数の関数を含めることができます:
run_earlyhook
: API ファイルシステムがマウントされカーネルコマンドラインがパースされたときに、この名前の関数が実行されます。一般的に udev など初期ユーザ空間が始まったときに必要になる追加のデーモンはこの関数に置きます。
run_hook
: 初期のフックの後すぐに、この名前の関数が実行されます。一番普通のフックポイントで、スタックブロックデバイスのアセンブリなどのオペレーションはここで行なって下さい。
run_latehook
: root デバイスがマウントされた後、この名前の関数が実行されます。root デバイスの後のセットアップや /usr
など他のファイルシステムのマウントなどに控えめに使われます。
run_cleanuphook
: 出来る限り最後に、この名前の関数が実行されます。設定ファイルの HOOKS
の順番とは逆に実行されます。これらのフックは初期のフックによって起動したデーモンのシャットダウンなど、最後のクリーンアップに使われます。
通常のフック
通常のフックとイメージ生成への影響と関連するランタイムを示した表です。パッケージにカスタムフックを入れることができるので、この表は完全ではないことに注意してください。
busybox | systemd | インストール | ランタイム |
---|---|---|---|
base | 全ての initial directory をセットアップし基本のユーティリティとライブラリをインストールする。何をしようとしているのかわからない限りはこのフックを一番最初のフックにしておいてください。systemd フックを使用している場合、busybox のリカバリシェルが提供されます。 | -- | |
udev | systemd | イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 | dev デーモンを起動してカーネルからの uevent を処理します。デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。 |
usr | /usr の分割パーティションのサポートを追加。 |
real root がマウントされた後に /usr パーティションをマウントします。
| |
resume | -- | "ハイバネート" (suspend to disk) 状態からの復帰を試みます。resume フックは swsusp と TuxOnIce をサポートしており、systemd フックは swsusp にしか対応していません。詳しい設定方法はハイバネートを見てください。 | |
btrfs | -- | root で Btrfs を有効にしてサブボリュームを使用するために必要なモジュールを設定します。シングルデバイスで 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 フックに分かれていました。 | -- | |
pcmcia | PCMCIA デバイスに必要なモジュールを追加します。これを使うには pcmciautils をインストールする必要があります。 | -- | |
net | 未実装 | ネットワークデバイスに必要なモジュールを追加します。PCMCIA net デバイスには pcmcia フックも追加してください。 | NFS の root ファイルシステムの管理を提供します。 |
dmraid | ? | fakeRAID root デバイスのサポートを提供します。これを使うには dmraid をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では mdadm_udev フックと一緒に mdadm を使うことが推奨されます。 |
dmraid を使用して fakeRAID ブロックデバイスを構築します。
|
mdadm | -- | /etc/mdadm.conf からの RAID アレイの構築や、起動中の自動検出のサポートを提供します。これを使うには mdadm のインストールが必須です。このフックよりも mdadm_udev フックが推奨されています。 |
mdassemble を使ってソフトウェア RAID ブロックデバイスを構築します。
|
mdadm_udev | udev による RAID アレイの構築のサポートを提供します。これを使うには mdadm のインストールが必要です。FakeRAID アレイでこのフックを使う場合、binaries セクションに mdmon を含めて shutdown フックを追加することが推奨されます。再起動時に不必要な RAID を再ビルドしないためです。 |
udev と mdadm を使ってソフトウェア RAID ブロックデバイスを動的に構築します。mdadm アセンブリの推奨方法です (上記の mdadm フックを使うよりも)。
| |
keyboard | キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。 | -- | |
keymap | sd-vconsole | /etc/vconsole.conf から initramfs に指定したキーマップを追加します。 |
初期ユーザ空間で /etc/vconsole.conf から指定されたキーマップをロードします。
|
consolefont | /etc/vconsole.conf から initramfs に指定したコンソールフォントを追加します。 |
初期ユーザ空間で /etc/vconsole.conf から指定されたコンソールフォントをロードします。
| |
encrypt | sd-encrypt | dm_crypt カーネルモジュールと cryptsetup ツールをイメージに追加します。これを使うには cryptsetup をインストールする必要があります。 |
暗号化された root パーティションを検知してアンロックします。設定については #ランタイムのカスタマイズ を見て下さい。sd-encrypt の利用できるカーネルコマンドラインオプションについては systemd-cryptsetup-generator(8) を見て下さい。また、/etc/crypttab.initramfs ファイルが存在する場合、/etc/crypttab として initramfs に追加されます。crypttab の構文の詳細は crypttab(5) を見て下さい。
|
lvm2 | sd-lvm2 | device mapper カーネルモジュールと lvm ツールをイメージに追加します。これを使うには lvm2 をインストールする必要があります。 |
全ての LVM2 ボリュームグループを有効にします。root ファイルシステムが LVM 上にある場合は必須です。 |
fsck | fsck バイナリとファイルシステム特有のヘルパーを追加します。autodetect フックの後ろに追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は強く推奨されており、/usr パーティションを分割する場合は必須です。 |
root デバイス (と分割している場合は /usr ) に対してマウントする前に fsck を実行します。ブートローダーのデフォルト設定で問題ありませんが、疑問がある場合は こちらの設定 を読んで下さい。
| |
filesystems | イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを MODULES で指定していない限りこのフックが必要になります。 | -- |
廃止されたフック
mkinitcpio 0.13.0 では、usbinput
フックは廃止され keyboard
フックを使うようになりました。
mkinitcpio 0.12.0 では、以下のフックが廃止されました。以下のフックのどれかを使っているときは、block
フックに置き換える必要があります。
fw
mmc
pata
sata
scsi
usb
virtio
詳しくは、Git コミット 97368c0e78 や arch-projects メーリングリストを見て下さい。
COMPRESSION
カーネルは initramfs の圧縮に複数のフォーマットをサポートしています - gzip, bzip2, lzma, xz (別名 lzma2), lzo, lz4。ほとんどの場合、gzip か lzop、または lz4 を使ったときに圧縮イメージサイズと展開速度のバランスが一番良くなります。
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
COMPRESSION
を指定しないときは initramfs ファイルは gzip で圧縮されます。イメージを圧縮したくないときは、COMPRESSION=cat
を設定するかコマンドラインで -z cat
を使って下さい。
使用する圧縮方法の適切なファイル圧縮ユーティリティがインストールされているか確認してください。
COMPRESSION_OPTIONS
COMPRESSION
で指定したプログラムに渡す追加のフラグを記述します、例:
COMPRESSION_OPTIONS='-9'
mkinitcpio はイメージを作成するときサポートされている圧縮方法に必要なフラグを渡すので、通常はこのオプションは必要ありません。なお、カーネルが作成された圧縮ファイルを解凍できないとき、このオプションを使っていないとシステムをブートできなくなる可能性があります。
ランタイムのカスタマイズ
ランタイム設定オプションはカーネルコマンドラインを通して init
や特定のフックに渡すことができます。カーネルコマンドラインパラメータはブートローダによって与えられることがほとんどです。下で書かれているオプションをカーネルコマンドラインに追加することでデフォルトの挙動を変えることができます。詳しくはカーネルパラメータや Arch ブートプロセスを見て下さい。
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
break
break
やbreak=premount
が指定された場合、(フックをロードした後、root ファイルシステムをマウントする前に)init
はブートプロセスを停止してトラブルシューティングに使うことができるインタラクティブシェルを起動します。break=postmount
と指定することで root がマウントされた後にこのシェルを起動することもできます。シェルを終了すると通常通りに起動が行われます。
disablehooks
disablehooks=hook1{,hook2,...}
を追加すると実行時にフックを無効化します。例:disablehooks=resume
earlymodules
earlymodules=mod1{,mod2,...}
という風に先にロードするモジュールを指定することでモジュールがロードされる順番を変更することができます (例えば、複数のネットワークインターフェイスの順番を適切に確定したいときなどに使います)。
rootdelay=N
rootdelay
を追加すると root ファイルシステムをマウントする前にN
秒間だけ停止します (例えば、初期化に時間がかかる USB ハードドライブから起動するときなどに使います)。
他のパラメータについてはブートデバッグや mkinitcpio(8) を見て下さい。
RAID を使う
まず、/etc/mkinitcpio.conf
内の HOOKS
に mdadm_udev
または mdadm
フックを追加し、必要な RAID モジュール全て (例: raid456, ext4) を MODULES
に追加して下さい。
mdadm
フックを使う場合、カーネルパラメータで RAID アレイを設定する必要はありません。mdadm
フックは /etc/mdadm.conf
ファイルを使うか、またはブート時の init 段階でアレイを自動で検出します。
mdadm_udev
フックを使うことで udev による構築も可能です。上流ではこの方法が推奨されています。/etc/mdadm.conf
は構築されたデバイスに名前を付けるために読み込まれます。
net を使う
必要なパッケージ:
net
は公式リポジトリの mkinitcpio-nfs-utils パッケージを必要とします。
カーネルパラメータ:
公式のカーネルドキュメントに最新の情報が載っています。
ip=
このパラメータはカーネルに、デバイスの IP アドレスの設定方法と、IP ルーティングテーブルの設定方法を指定します。コロンで区切った9つの引数を指定できます: ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>
。
カーネルコマンドラインにこのパラメータが存在しなかった場合、全てのフィールドが空とされて、カーネルドキュメントに書かれているデフォルト設定が適用されます。一般的にはカーネルは自動設定を使って全てを設定しようとします。
<autoconf>
パラメータは 'ip' パラメータの唯一の値として指定できます (前の全ての ':' 文字を排除)。値が "ip=off" や "ip=none" の場合、自動設定は行われません。そうでないなら、自動的に設定されます。最も一般的な使い方は "ip=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.
BOOTIF=
複数のネットワークカードを使っているときは、このパラメータに起動するインターフェイスの MAC アドレスを含めることができます。インターフェイスの数字が変わってしまったり、pxelinux の IPAPPEND 2 や IPAPPEND 3 オプションを使うときに便利です。指定しなかった場合、eth0 が使われます。
例:
BOOTIF=01-A1-B2-C3-D4-E5-F6 # Note the prepended "01-" and capital letters.
nfsroot=
nfsroot
パラメータがコマンドラインで指定されなかった場合、デフォルトで /tftpboot/%s
が使われます。
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
パラメータの説明:
<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
nfsroot
パラメータを使わない場合、root=/dev/nfs
を設定して自動設定により NFS root から起動するようにする必要があります。
LVM を使う
root デバイスを LVM 上に置く場合は、lvm2 フックを mkinitcpio.conf に追加する必要があります。
暗号化された root を使う
root を暗号化している場合、filesystems
の前に encrypt
フックを追加する必要があり、他のフックも必要になります。ブートローダーによって特定のカーネルコマンドラインパラメータを指定しなくてはなりません: 詳しくは Dm-crypt/システム設定#mkinitcpio を見て下さい。
/usr パーティションを分割する
/usr
のパーティションを別にする場合、以下を行う必要があります:
fsck
フックを追加して、/etc/fstab
で/usr
のpassno
を0
にする。起動時に/usr
を fsck したい場合は必須です。このフックが存在しないと、/usr
は永遠に fsck されません。- systemd フックを使っていない場合、
usr
フックを追加。ルートがマウントされた後に/usr
パーティションがマウントされるようになります。0.9.0 以前では、/usr
はルートの/etc/fstab
で確認されたら自動的にマウントされていました。Fstab を参照。
トラブルシューティング
イメージの展開
initrd イメージの中に何が入っているか気になるときは、イメージを展開して中に入っているファイルを調べることができます。
initrd イメージは SVR4 CPIO アーカイブであり、find
と bsdcpio
コマンドによって生成されています。また、任意でカーネルが対応した圧縮方法によって圧縮されています。圧縮方法について詳しくは #COMPRESSION を見て下さい。
mkinitcpio には lsinitcpio
というユーティリティが含まれており initramfs イメージの中身を一覧・展開することができます。
イメージ内のファイルを一覧するには:
$ lsinitcpio /boot/initramfs-linux.img
作業ディレクトリにファイルを全て展開するには:
$ lsinitcpio -x /boot/initramfs-linux.img
イメージの重要なパーツについて読みやすいリストを取得することもできます:
$ lsinitcpio -a /boot/initramfs-linux.img
展開して修正を加えたイメージの再圧縮
上記のようにイメージを展開してから修正を加えたら、再圧縮に必要なコマンドを確認します。/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[@]}"
そして通常のオプションで mkinitcpio
を実行 (mkinitcpio -p linux
) すると、最後の20行に以下のような表示がされます:
+ find -mindepth 1 -printf '%P\0' + LANG=C + bsdcpio -0 -o -H newc --quiet + gzip
上記の出力が再圧縮するのに必要なコマンドになります。例:
# find -mindepth 1 -printf '%P\0' | LANG=C bsdcpio -0 -o -H newc --quiet | gzip > /boot/initramfs-linux.img
マウントされているのに "/dev must be mounted" と表示される
/dev
がマウントされているかどうか確認するのに mkinitcpio は /dev/fd/
が存在するかどうかを確かめます。問題がないようでしたら、手動で作成することができます:
# ln -s /proc/self/fd /dev/
当然 /proc
のマウントも必要です。mkinitcpio によって次にチェックされます。
LUKS/LVM/resume セットアップで systemd フックを使う
伝統的な encrypt
/lvm2
/resume
の代わりに systemd
/sd-encrypt
/sd-lvm2
フックを使う場合、ブートローダーで別の initrd パラメータを渡す必要があります。詳しくはフォーラムの投稿を見て下さい [1]。
Possibly missing firmware for module XXXX
カーネルのアップデート後に initramfs を再生成する際、以下の2つの警告が表示されることがあります:
==> WARNING: Possibly missing firmware for module: aic94xx ==> WARNING: Possibly missing firmware for module: smsmdtv
ファームウェアモジュールをインストールしていない Arch Linux ユーザーなら誰でも表示されます。ファームウェアを使用するハードウェアを使っていない場合、上記のメッセージは無視してかまいません。
あるマシンでは起動できるが他のマシンでは起動できない
mkinitcpio の autodetect
フックは /sys
をスキャンしてロードされているカーネルモジュールを確認して不要なカーネルモジュールを排除します。/boot
ディレクトリを他のマシンに移動して、初期ユーザー空間でブートが失敗する場合、カーネルモジュールが存在しないために新しいハードウェアが検出されていないのが原因かもしれません。USB 2.0 と 3.0 では必要なカーネルモジュールが異なるので注意してください。
修正するには、ブートローダーから fallback イメージを選択してください (fallback は autodetect
によるフィルタリングがされていません)。起動したら、新しいマシンで mkinitcpio を実行して適切なモジュールでイメージを再生成してください。fallback イメージで起動できない場合、Arch Linux のライブ CD/USB で起動して、chroot し、新しいマシンで mkinitcpio を実行して下さい。それでも駄目な場合、initramfs にモジュールを手動で追加します。
参照
- Linux カーネルドキュメントの [initramfs
- Linux カーネルドキュメントの initrd
- Wikipedia:ja:initrd
- dracut — クロスディストリビューションの initramfs 生成ツール。