Apa itu rootfs?
Rootfs
adalah contoh khusus dari ramfs
(atau tmpfs
, jika itu diaktifkan), yang
selalu ada di sistem 2.6. Anda tidak dapat mengrootfs
- unmount dengan alasan yang kira-kira sama dengan Anda tidak dapat mematikan proses init; Daripada memiliki kode khusus untuk memeriksa dan menangani daftar kosong, ini lebih kecil dan sederhana untuk kernel untuk memastikan daftar tertentu tidak menjadi kosong.
Sebagian besar sistem hanya memasang sistem file lain rootfs
dan mengabaikannya. Jumlah ruang contoh kosong ramf mengambil kecil.
Jika CONFIG_TMPFS diaktifkan, rootfs
akan digunakan tmpfs
alih-alih ramfs
secara default. Untuk memaksa ramfs
, tambahkan "rootfstype=ramfs"
ke baris perintah kernel.
Apa itu initramfs?
Semua kernel Linux 2.6 berisi"cpio"
arsip formatgzip, yang diekstraksi ke dalam rootfs
ketika kernel boot. Setelah mengekstraksi, kernel memeriksa untuk melihat apakahrootfs
berisi file"init"
, dan jika demikian dieksekusi sebagai PID 1. Jika ditemukan,init
proses ini bertanggung jawab untuk membawa sistem ke sisa jalan, termasuk menemukan dan memasang perangkat root sebenarnya ( jika ada). Jikarootfs
tidak mengandunginit
program setelahcpio
arsiptertanamdiekstraksi ke dalamnya, kernel akan jatuh ke kode yang lebih lama untuk menemukan dan me-mount partisi root, kemudian jalankan beberapa varian/sbin/init
dari itu.
Semua ini berbeda dari initrd lama dalam beberapa cara:
Initrd lama selalu merupakan file terpisah, sedangkan arsip initramfs ditautkan ke citra kernel linux. (Direktori linux - * / usr dikhususkan untuk membuat arsip ini selama pembuatan.)
File initrd yang lama adalah imej filesystem gzip (dalam beberapa format file, seperti ext2, yang membutuhkan driver yang dibangun ke dalam kernel), sedangkan arsip initramfs yang baru adalah arsip cpio yang di-gzip (seperti tar hanya lebih sederhana, lihat cpio (1) dan Dokumentasi / awal-userspace / buffer-format.txt). Kode ekstraksi cpio kernel tidak hanya sangat kecil, tetapi juga teks dan data yang dapat dibuang selama proses boot.
Program dijalankan oleh initrd lama (yang disebut / initrd, bukan / init) melakukan beberapa pengaturan dan kemudian kembali ke kernel, sedangkan program init dari initramfs tidak diharapkan untuk kembali ke kernel. (Jika / init perlu melepaskan kontrol, ia dapat overmount / dengan perangkat root baru dan mengeksekusi program init lain. Lihat utilitas switch_root, di bawah ini.)
Saat mengganti perangkat root lain, initrd akan pivot_root dan kemudian umount ramdisk. Tetapi initramfs adalah rootfs: Anda tidak bisa pivot_root rootfs, maupun unmount. Alih-alih hapus semua dari rootfs untuk membebaskan ruang (find -xdev / -exec rm '{}' ';'), overmount rootfs dengan root baru (cd / newmount; mount --move. /; Chroot.), lampirkan stdin / stdout / stderr ke / dev / console baru, dan exec init baru.
Karena ini adalah proses yang sangat gigih (dan melibatkan menghapus perintah sebelum Anda dapat menjalankannya), paket klibc memperkenalkan program pembantu (utils / run_init.c) untuk melakukan semua ini untuk Anda. Sebagian besar paket lain (seperti busybox) menamai perintah ini "switch_root".
Populasi initramfs:
Proses build kernel 2.6 selalu membuat arsip initramfs berformat cpio gzip dan menautkannya ke dalam biner kernel yang dihasilkan. Secara default, arsip ini kosong (menghabiskan 134 byte pada x86).
Pilihan konfigurasi CONFIG_INITRAMFS_SOURCE (di Umum Pengaturan di menuconfig,
dan tinggal di usr/Kconfig
) dapat digunakan untuk menentukan sumber untuk
initramfs
arsip, yang akan secara otomatis dimasukkan ke biner yang dihasilkan. Opsi ini dapat menunjuk ke * arsip yang ada gzip cpio
*, direktori yang berisi file yang akan diarsipkan, atau spesifikasi file teks seperti contoh berikut:
dir /dev 755 0 0
nod /dev/console 644 0 0 c 5 1
nod /dev/loop0 644 0 0 b 7 0
dir /bin 755 1000 1000
slink /bin/sh busybox 777 0 0
file /bin/busybox initramfs/busybox 755 0 0
dir /proc 755 0 0
dir /sys 755 0 0
dir /mnt 755 0 0
file /init initramfs/init.sh 755 0 0
Jalankan " usr/gen_init_cpio
" (setelah kernel membangun) untuk mendapatkan pesan penggunaan yang mendokumentasikan format file di atas.
Satu keuntungan dari file konfigurasi adalah root
akses tidak diperlukan untuk mengatur izin atau membuat node perangkat dalam arsip baru.
(Perhatikan bahwa dua contoh entri "file" berharap menemukan file bernama " init.sh
" dan " busybox
" di direktori yang disebut " initramfs
", di bawah linux
direktori -2.6. *. Lihat Dokumentasi / awal-ruang pengguna / README untuk detail lebih lanjut.)
Kernel tidak tergantung pada cpio
alat eksternal . Jika Anda menentukan direktori alih-alih file konfigurasi, infrastruktur build kernel membuat file konfigurasi dari direktori tersebut ( usr/Makefile
panggilan scripts/gen_initramfs_list.sh
), dan mulai mengemas direktori tersebut menggunakan file konfigurasi (dengan memasukkannya ke usr/gen_init_cpio
, yang dibuat dari usr/gen_init_cpio.c
). cpio
Kode pembuatan waktu pembuatan kernel sepenuhnya mandiri, dan ekstraktor waktu boot kernel juga (jelas) mandiri.