![initramfs と実際のメインファイルシステムの違いは何ですか?](https://rvso.com/image/89169/initramfs%20%E3%81%A8%E5%AE%9F%E9%9A%9B%E3%81%AE%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
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 イメージであるため、変更はすべて失われます。
実際のルート ディスクが見つかると、それがマウントされ、ルートがこれに切り替えられます。その後、ブートは通常どおり続行されます。このルートは実際のファイル システム (メモリ イメージではない) であるため、ここで保存された変更は永続的です。