Mengapa menggunakan cpio untuk initramfs?


11

Saya membuat initramf saya sendiri mengikuti wiki Gentoo . Alih-alih yang akrab tardan gzip, halaman itu memberitahu saya untuk menggunakan cpiodan gzip. Wikipedia mengatakan itu cpiodigunakan oleh initramfs kernel 2.6, tetapi tidak menjelaskan alasannya.

Apakah ini hanya konvensi atau cpiolebih baik untuk initramfs? Masih bisakah saya menggunakan tardan gzip?


IIRC Anda tidak dapat menggunakan tar sebagai initramfs (saya tidak mempostingnya sebagai jawaban karena saya tidak 100% yakin). BTW menggunakan Gentoo Saya merasa lebih mudah untuk mengkonfigurasi initramfs bawaan daripada buatan tangan.
Maciej Piechotka

@ Maciej Saya hanya ingin tahu bagaimana melakukannya :) Selain itu saya melihat peningkatan waktu boot yang besar dengan menggunakan initramfs saya sendiri
phunehehe

Anda salah paham dengan saya. Metode yang saya bicarakan adalah dengan memberikan kernel selama konfigurasi file spesifikasi file mana yang harus dimasukkan dalam initrd (termasuk custom /initdll.) Dan kernel hanya menggunakan yang itu. Saya tidak ingin membuat initramfs dengan genkernel atau metode serupa.
Maciej Piechotka

@ Maciej Itu terlihat menyenangkan! Saya akan mencobanya kapan-kapan.
phunehehe

Baik. Ini IMHO lebih mudah untuk diatur dan autoupdate dengan kernel (jadi saya tidak perlu ingat untuk menyalin file baru ke initrd).
Maciej Piechotka

Jawaban:


9

Saya tidak 100% yakin, tetapi karena ramdisk awal perlu dibuka oleh kernel saat boot, cpio digunakan karena sudah diimplementasikan dalam kode kernel.


6
Pastikan 100%. linux / init / initramfs.c membuka cpio -H newcarsip.
ephemient

@ephemient Ini benar-benar sesuatu. Jika tidak ada jawaban lagi dalam beberapa hari, saya akan menerimanya yang cpiodigunakan sebagai konvensi dan yang harus kita gunakan cpio.
phunehehe

Adakah ide mengapa newc adalah format yang dipilih?
CMCDragonkai

1
Menurut dokumentasi kernel, cpio diimplementasikan hanya untuk initramdisk, sehingga mereka dapat mengimplementasikan format lain.
lvella

10

Mengutip Documentation/filesystems/ramfs-rootfs-initramfs.txt:

Kenapa cpio daripada tar?

Keputusan ini dibuat kembali pada bulan Desember 2001. Diskusi dimulai di sini:

http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1538.html

Dan menelurkan utas kedua (khusus pada tar vs cpio), mulai di sini:

http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1587.html

Versi ringkasan cepat dan kotor (yang bukan pengganti untuk membaca utas di atas) adalah:

1) cpio adalah standar. Sudah puluhan tahun (dari masa AT&T), dan sudah banyak digunakan di Linux (di dalam RPM, disk driver perangkat Red Hat). Ini artikel Linux Journal tentang hal itu mulai tahun 1996:

http://www.linuxjournal.com/article/1213

Ini tidak sepopuler tar karena alat baris perintah cpio tradisional memerlukan argumen baris perintah _truly_hideous_. Tapi itu tidak mengatakan apa-apa tentang format arsip, dan ada alat alternatif, seperti:

http://freecode.com/projects/afio

2) Format arsip cpio yang dipilih oleh kernel lebih sederhana dan lebih bersih (dan dengan demikian lebih mudah untuk dibuat dan diurai) dibandingkan dengan salah satu dari berbagai format arsip tar. Format arsip initramfs lengkap dijelaskan dalam buffer-format.txt, dibuat di usr / gen_init_cpio.c, dan diekstraksi di init / initramfs.c. Ketiganya memiliki total kurang dari 26 ribu teks yang dapat dibaca manusia.

3) Proyek GNU standardisasi pada tar kira-kira sama relevannya dengan standardisasi Windows pada zip. Linux juga bukan bagian dari keduanya, dan bebas untuk membuat keputusan teknis sendiri.

4) Karena ini adalah format internal kernel, itu bisa dengan mudah menjadi
sesuatu yang baru. Kernel menyediakan alatnya sendiri untuk membuat dan mengekstrak format ini. Menggunakan standar yang ada lebih disukai, tetapi tidak penting.

5) Al Viro membuat keputusan (kutipan: "tar jelek sekali dan tidak akan didukung di sisi kernel"):

http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1540.html

menjelaskan alasannya:

http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1550.html http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1638.html

dan, yang paling penting, merancang dan mengimplementasikan kode initramfs.


3

Dari apa yang saya ingat tentang masa SysV lama saya, cpio dapat menangani file dev, tetapi tar tidak bisa; ini menjadikan cpio utilitas cadangan 'mentah' pilihan sebelum dump muncul. Juga lebih mudah untuk menangani sebagian file dan tautan keras sehingga cadangan tambahan lebih mudah. Saya pikir GNU tar telah menangkap fitur cpio jadi sekarang ini hanya masalah kenyamanan pengguna. Baik cpio dan tar harus diinstal secara default.


1
cpiomungkin dapat menangani tararsip -format, dan sebaliknya dalam beberapa kasus, tetapi itu tidak masalah. Kernel hanya membongkar newc-gaya cpioarsip-format, yang tidak tarsaya tahu menghasilkan.
ephemient

Format yang salah panggil GNU secara newcresmi dinamai ascdan tentu saja didukung oleh star.
schily

1
@ Schily: Itu menunjukkan salah satu alasan tersirat dengan cukup baik. "Yah, ini semacam arsip tar. Tapi format tar yang mana, dan apakah itu kompatibel dengan ekstraktor tar ini?" OTOH, sejarah versi cpio jauh lebih mudah.
Piskvor meninggalkan gedung
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.