The initial ramdisk (initrd) biasanya versi dilucuti-down dari filesystem root yang berisi hanya itu yang diperlukan untuk me-mount filesystem root yang sebenarnya dan tangan off boot untuk itu.
Initrd ada karena dalam sistem modern, boot loader tidak dapat dibuat cukup pintar untuk menemukan sistem file root dengan andal. Ada terlalu banyak kemungkinan untuk program sekecil itu untuk boot loader. Pertimbangkan NFS root, kartu RAID yang tidak standar, dll. Pemuat boot harus melakukan tugasnya hanya menggunakan BIOS plus kode apa pun yang dapat dijejalkan ke dalam sektor boot.
Initrd disimpan di suatu tempat yang dapat ditemukan oleh boot loader , dan itu cukup kecil sehingga sedikit ruang ekstra yang diperlukan biasanya tidak mengganggu siapa pun. (Dalam sistem tertanam kecil, biasanya tidak ada root "nyata", hanya initrd.)
Initrd sangat berharga: isinya harus dipertahankan dalam semua kondisi, karena jika initrd rusak, sistem tidak dapat boot. Salah satu pilihan desain yang dibuat oleh perancang untuk memastikan ini adalah membuat boot loader memuat read-only initrd. Ada prinsip-prinsip lain yang bekerja untuk ini, juga, seperti dalam kasus sistem kecil di mana tidak ada root "nyata", Anda masih me-mount terpisah /tmp
, /var/cache
dan seperti itu untuk menyimpan sesuatu. Mengubah initrd jarang dilakukan, dan kemudian harus dilakukan dengan sangat hati-hati.
Mendapatkan kembali ke kasus normal di mana ada adalah akar filesystem nyata, itu awalnya dipasang read-only karena initrd adalah. Itu kemudian disimpan hanya-baca selama mungkin untuk alasan yang sama. Tulisan apa pun ke root sebenarnya yang perlu dilakukan ditunda sampai sistem di-boot, dengan preferensi, atau setidaknya sampai akhir dalam proses boot ketika preferensi itu tidak dapat dipenuhi.
Hal paling penting yang terjadi selama fase read-only ini adalah bahwa sistem file root diperiksa untuk melihat apakah itu di-mount dengan bersih. Itu adalah sesuatu yang bisa dilakukan oleh boot loader alih-alih menyerahkannya ke initrd, tetapi apa yang terjadi jika sistem file root tidak di- unmount dengan bersih? Maka harus menelepon fsck
untuk memeriksa dan mungkin memperbaikinya. Jadi, dari mana initrd
mendapatkan fsck
, jika itu bertanggung jawab untuk langkah ini alih-alih menunggu sampai handoff ke akar "nyata"? Anda bisa mengatakan bahwa Anda perlu menyalin fsck
ke initrd
saat membangunnya, tetapi sekarang lebih besar. Dan di atas itu, mana yang fsck
akan Anda salin? Sistem Linux secara teratur menggunakan selusin atau lebih filesystem yang berbeda. Apakah Anda menyalin hanya yang diperlukan untuk root asli pada saat itu?initrd
dibuat? Apakah Anda membesar-besarkan ukuran initrd
dengan menyalin semua fsck.foo
program yang tersedia ke dalamnya, jika sistem file root kemudian dimigrasi ke beberapa jenis sistem file lain, dan seseorang lupa untuk membangun kembali initrd?
Arsitek sistem boot Linux dengan bijak memilih untuk tidak membebani initrd dengan masalah-masalah ini. Mereka mendelegasikan pengecekan filesystem root yang sebenarnya ke filesystem root yang sebenarnya, karena ia berada dalam posisi yang lebih baik untuk melakukan itu daripada initrd.
Setelah proses boot berjalan cukup jauh sehingga aman untuk melakukannya, initrd akan ditukar dengan root sebenarnya pivot_root(8)
, dan sistem file di-remount dalam mode baca-tulis.
Karena selama bootup, sistem file root pada awalnya selalu dipasang hanya-baca. Setelah berbagai tes mandiri selesai, remount sistem file root sebagai baca / tulis dan mulai memasang sistem file lain.
sumber
Salah satu alasan yang dapat saya pikirkan adalah untuk mencegah beberapa jenis korupsi. Misalnya, Anda dapat me-mount filesystem ext4 sebagai ext2 (atau sebaliknya) dan ini aman dalam mode-ro, tetapi dapat menyebabkan perubahan format yang tidak kompatibel jika dipasang rw dari initram.
Oh, dan ada satu alasan lagi: initramfs mungkin tidak memiliki fsck, tetapi Anda mungkin perlu memeriksa sistem file sebelum memasangnya.
sumber