
ro
ルートファイルシステムがinitramfs(およびinitrd)にマウントされるのはなぜですか?
例えばGentoo initramfsガイドルートファイルシステムをマウントするには、次のコマンドを使用します。
mount -o ro /dev/sda1 /mnt/root
以下はなぜできませんか?
mount -o rw /dev/sda1 /mnt/root
これには妥当な理由があるかもしれませんが(関連するかもしれませんswitchroot
)、どこにも文書化されていないようです。
答え1
これ初期仮想ディスク(initrd)は通常、実際のルートファイルシステムをマウントして直接起動するために必要なものだけを含むルートファイルシステムの単純なバージョンです。
initrdが存在する理由は、最新のシステムでは、ブートローダがルートファイルシステムを確実に見つけるほどスマートではないからです。ブートローダのような小さなプログラムでは、扱うにはあまりにも多くの可能性があります。 NFSルート、非標準RAIDカードなどを検討してください。ブートローダはBIOSのみを使用し、そのタスクを実行するためにブートセクタに入ることができるすべてのコードを使用する必要があります。
initrdはブートローダのどこかに保存されています。できるそれを見つけると、一般的に占める追加スペースが誰にも邪魔にならないほど小さくなります。 (コンパクトな組み込みシステムには通常、「実際の」ルートはなく、initrdのみがあります。)
initrdは価値があります。 initrdが破損してもシステムは起動しないため、すべての状況でその内容を保存する必要があります。これを保証するために、デザイナーが選択した設計の1つは、ブートローダーがinitrdを読み取り専用でロードできるようにすることでした。これを達成するための他の原則もあります。たとえば、「実際の」ルートを持たない小さなシステムでは、アイテムを保存するために別々に/tmp
マウントできます。/var/cache
initrdの変更はほとんど発生しないため、非常に注意してください。
正常に戻るはいinitrdは読み取り専用なので、最初は読み取り専用としてマウントされる実際のルートファイルシステムです。その後、同じ理由で可能な限り長い間読み取り専用のままになります。デフォルト設定によっては、実際に完了する必要がある実際のルートへのすべての書き込みは、システムの起動まで、または少なくともデフォルト設定を満たすことができない起動プロセスの後半まで延期されます。
この読み取り専用フェーズで発生する最も重要なことは、ルートファイルシステムが完全にアンマウントされていることを確認することです。これは、initrdに任せることなくブートローダが確実に実行できることです。ただし、ルートファイルシステムいいえ除去はきれいですか?その後、それをfsck
確認して修正するために呼び出す必要があります。したがって、「実際の」ルートに切り替わるのを待つのではなく、このステップを処理した場合、どこで入手initrd
できるのでしょうか。fsck
ビルド時にfsck
コピーする必要があると言うかもしれませんが、initrd
今は大きくなりました。最も重要なことは、どの fsck
コピーしてもらえますか? Linuxシステムはしばしば12を超える異なるファイルシステムを使用します。initrd
実際の根を作るのに必要な根だけをコピーしましたか?ルートファイルシステムが後で別の種類のファイルシステムに移行され、誰かがinitrdを再構築するのを忘れた場合に備えて、利用可能なinitrd
すべてのプログラムをここにコピーしてサイズを増やしましたか?fsck.foo
Linuxブートシステムの設計者は、これらの問題でinitrdに負担をかけないことを賢く選択しました。実際のルートファイルシステムチェックは、initrdよりも実行に適しているため、実際のルートファイルシステムに委任します。
起動プロセスが十分に進行して安全に実行されると、initrdは実際のルートディレクトリで置き換えられます。pivot_root(8)
、ファイルシステムは読み書きモードで再マウントされます。
答え2
これは、起動時にルートファイルシステムが最初は常に読み取り専用でマウントされるためです。さまざまなセルフテストが完了したら、ルートファイルシステムを読み取り/書き込みで再マウントし、別のファイルシステムのマウントを開始します。
答え3
私が考えることができる1つの理由は、ある種の腐敗を防ぐことです。たとえば、ext4ファイルシステムをext2としてマウントできます(またはその逆)。これはroモードでは安全ですが、initramでrwをマウントすると、互換性のないフォーマット変更が発生する可能性があります。
ああ、もう一つの理由があります。 initramfsにfsckがないかもしれませんが、rwにマウントする前にファイルシステムをチェックしたいかもしれません。