initramfs と実際のメインファイルシステムの違いは何ですか?

initramfs と実際のメインファイルシステムの違いは何ですか?

initramfsは、システムを起動するために使用される一時ファイル システムであり、マウント後にルート FS (ファイル システム) に制御を渡します。ramfs を使用して操作を実行できない理由は、保存したものは保持されず、再起動するたびに消去されるためです。

しかし、マウントされたルート ファイルシステムは、電源をオフにしても書き込み可能で、内容を記憶します。これはなぜでしょうか。なぜ rootfs は変更を記録できるのに、initramfs はできないのでしょうか。

さらに重要なのは、このルート ファイルシステムはどこにあるべきなのかということです。ルート パーティションを見ると はありますuinitfs.imageが、マウントしようとしているルート ファイルシステムになるはずの他のアーカイブは見当たりません。これは物理的にはどこに保存されているのでしょうか?

答え1

initramfs は圧縮されたイメージで、通常は/boot(たとえば、私の CentOS 7 マシンでは/boot/initramfs-3.10.0-327.18.2.el7.x86_64.img) に保存されます。これは gzip で圧縮された cpio アーカイブである可能性があります。

例えば

sudo gzip -dc /boot/initramfs-3.10.0-327.4.5.el7.x86_64.img | cpio -t | head
.
etc
etc/modprobe.d
etc/modprobe.d/mlx4.conf
etc/ld.so.conf.d
etc/ld.so.conf.d/kernel-3.10.0-327.3.1.el7.x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-327.4.4.el7.x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-229.20.1.el7.x86_64.conf
etc/ld.so.conf.d/mariadb-x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-327.4.5.el7.x86_64.conf

これには、OS がルート デバイスを認識できる状態にするために必要な最小限のルーチン セットが格納されます。たとえば、HBA と通信するために必要なドライバーが含まれている場合があります。

これは起動時に RAM に解凍され、実行されます。RAM イメージであるため、変更はすべて失われます。

実際のルート ディスクが見つかると、それがマウントされ、ルートがこれに切り替えられます。その後、ブートは通常どおり続行されます。このルートは実際のファイル システム (メモリ イメージではない) であるため、ここで保存された変更は永続的です。

関連情報