Şimdi, yukarıda ne koyduğumun ayrıntılı açıklamasına.
Hem initramfs hem de initrd aynı amaca hizmet ederken, 2 fark vardır. En belirgin fark, bir initrd'in ramdisk'e yüklenmesi. Bir ramdiske monte edilmiş gerçek bir dosya sisteminden (genellikle ext2) oluşur. Öte yandan, bir initramfs bir dosya sistemi değildir. Bir tmpfs içine paketlenmiş (sıkıştırılmış) bir cpio arşivi (newc türünde). Bunun, initramfs'i çekirdek önyükleme işleminde bir initrd'den biraz daha optimize ve yükleme yapabilme yan etkisi vardır. Ayrıca, bellekteki initramflerin boyutu daha küçüktür, çünkü çekirdek, önceden tanımlanmış ramdisk boyutlarına güvenmek yerine, tmpfs'nin boyutunu gerçekte yüklü olana uyarlayabilir,
Başka bir yan etki farkı da var: kök cihazın (ve ona geçişin) nasıl ele alındığı. Bir initrd, ram olarak paketlenmiş gerçek bir dosya sistemi olduğundan, kök aygıtın aslında ramdisk olması gerekir. Bir initramfs için, initramfs'nin paketlenmediği tmpfs haline gelen bir çekirdek "rootfs" vardır (eğer çekirdek bir initramfs yüklerse; eğer değilse, rootfs sadece root = kernel boot parametresi ile belirtilen dosya sistemidir), ancak bu geçici rootfs root = boot parametresi olarak belirtilmemelidir (ve eklenmiş bir cihaz olmadığı için bunu yapmanın bir yolu olmaz). Bu, initramfs kullanırken gerçek kök aygıtınızı çekirdeğe geçirebileceğiniz anlamına gelir. Bir initrd ile, gerçek kök cihazın kendinizin ne olduğunu işlemelisiniz. Ayrıca, "gerçek" bir initrd ile kök cihaz ramdisk, çekirdek gerçekten bir gerçek cihazdan (ramdisk) diğerine (gerçek kökünüz) kök cihazları swith gerekir. Bir initramfs durumunda, initramfs alanı (tmpfs) gerçek bir cihaz değildir, bu nedenle çekirdek gerçek cihazları değiştirmez. Bu nedenle, pivot_root komutu bir initrd ile kullanılırken, bir initramfs için farklı bir komut kullanılmalıdır. Buslib, bunu gerçekleştirmek için switch_root sağlarken, klibc new_root sunar. initramfs için farklı bir komut kullanılmalıdır. Buslib, bunu gerçekleştirmek için switch_root sağlarken, klibc new_root sunar. initramfs için farklı bir komut kullanılmalıdır. Buslib, bunu gerçekleştirmek için switch_root sağlarken, klibc new_root sunar.
pivot_root
Geçmişte initramfs için kullandımswitch_root
, o zaman yoktu. sadece daha fazla temizlik yapan ve aynı zamanda hamle ve benzeri yapanswitch_root
kolaylık yöntemi gibi görünüyor - sadece kökün kendisi değilpivot_root
/proc
/sys
/dev