Apa pun yang Anda lakukan, Anda punya initramfs
. Tidak ada gunanya tanpa itu - itu adalah satu-satunya sistem file yang dikenakan pada Anda. Dari kernel.org :
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 berformatgzip, yang diekstraksi menjadi rootfs
ketika kernel dinyalakan. 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 menyerahkan 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).
Opsi konfigurasi CONFIG_INITRAMFS_SOURCE (dalam Pengaturan Umum di menuconfig, dan tinggal di usr / Kconfig) dapat digunakan untuk menentukan sumber untuk arsip initramfs, yang secara otomatis akan dimasukkan ke dalam biner yang dihasilkan. Opsi ini dapat mengarah ke arsip cpio yang di-gzip, 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.
Salah satu keuntungan dari file konfigurasi adalah akses root tidak diperlukan untuk mengatur izin atau membuat node perangkat dalam arsip baru. (Perhatikan bahwa dua contoh entri "file" tersebut mengharapkan menemukan file bernama "init.sh" dan "busybox" dalam direktori yang disebut "initramfs", di bawah direktori linux-2.6. *. Lihat Dokumentasi / awal-ruang pengguna / README untuk keterangan lebih lanjut.)
Kernel tidak tergantung pada alat cpio eksternal. Jika Anda menentukan direktori alih-alih file konfigurasi, infrastruktur build kernel membuat file konfigurasi dari direktori tersebut (usr / Makefile memanggil skrip / 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). Kode pembuatan cpio kernel waktu-bangun sepenuhnya mandiri, dan ekstraktor waktu-boot kernel juga (jelas) mandiri.