Neden initramfs için cpio kullanılır?


11

Gentoo wiki'sini izleyerek kendi initramflerimi yapıyorum . Yerine tanıdık tarve gzipsayfa kullanmak beni anlatıyor cpiove gzip. Vikipedi , bunun cpio2.6 çekirdeğin initramfs tarafından kullanıldığını ancak nedenini açıklamadığını söylüyor.

Bu sadece bir sözleşme mi yoksa cpioinitramlar için daha mı iyi? Hala kullanabilir miyim tarve gzip?


IIRC, initramfs olarak tar kullanamazsınız (% 100 emin olmadığım için cevap olarak göndermiyorum). Gentoo kullanarak BTW El yapımı olanlardan daha çok yerleşik initramf'leri yapılandırmak çok daha kolay.
Maciej Piechotka

@Maciej Sadece nasıl yapılacağını bilmek istiyorum :) Ayrıca kendi initramfs kullanarak büyük bir önyükleme süresi iyileştirme görüyorum
phunehehe 12:11

Beni Yanlış Anladın. Bahsettiğim yöntem, yapılandırma sırasında çekirdeğe initrd'e (özel /initvb. Dahil) dahil edilmesi gereken belirli bir dosya vermek ve çekirdek sadece bunu kullanmaktır. Genkernel veya benzeri yöntemlerle initramf üretmeye çalışmıyorum.
Maciej Piechotka

@Maciej Çok eğlenceli görünüyor! Bir ara deneyeceğim.
phunehehe

İyi. IMHO'nun kurulumu daha kolaydır ve çekirdek ile otomatik olarak güncellenir (bu nedenle yeni dosyaları initrd'e kopyalamayı hatırlamam gerekmez).
Maciej Piechotka

Yanıtlar:


9

% 100 emin değilim, ancak ön ramdisk önyükleme sırasında çekirdek tarafından paketinden çıkarılması gerektiğinden, zaten çekirdek kodunda uygulandığı için cpio kullanılır.


6
% 100 emin olun. linux / init / initramfs.c bir cpio -H newcarşivi açar .
ephemient

@ephemient Bu gerçekten bir şey. Birkaç gün içinde cevap gelmezse, cpiokongre olarak kullanıldığını ve kullanmamız gerektiğini kabul edeceğim cpio.
phunehehe

Formatın neden seçildiğine dair bir fikrin var mı?
CMCDragonkai

1
Çekirdek belgelerine göre, cpio sadece initramdisk uğruna uygulandı, böylece başka bir format uygulayabilirlerdi.
lvella

10

Alıntı Documentation/filesystems/ramfs-rootfs-initramfs.txt:

Neden tar yerine cpio?

Bu karar Aralık 2001'de tekrar verildi. Tartışma burada başladı:

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

Ve buradan başlayarak ikinci bir iplik (özellikle tar vs cpio'da) ortaya çıktı:

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

Hızlı ve kirli özet sürümü (yukarıdaki konuları okumak yerine geçmez):

1) cpio bir standarttır. On yıllardır (AT&T günlerinden) ve zaten Linux'ta yaygın olarak kullanılıyor (RPM içinde, Red Hat'ın aygıt sürücüsü diskleri). İşte 1996'dan bir Linux Journal makalesi:

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

Geleneksel cpio komut satırı araçları _truly_hideous_ komut satırı bağımsız değişkenleri gerektirdiğinden tar kadar popüler değildir. Ancak bu, arşiv formatı hakkında hiçbir şekilde bir şey söylemez ve aşağıdaki gibi alternatif araçlar vardır:

http://freecode.com/projects/afio

2) Çekirdek tarafından seçilen cpio arşiv biçimi, çeşitli katran arşiv biçimlerinden (daha düzinelerce) daha basit ve daha temizdir (ve bu nedenle oluşturulması ve ayrıştırılması daha kolaydır). Tam initramfs arşiv formatı buffer-format.txt ile açıklanır, usr / gen_init_cpio.c dosyasında yaratılır ve init / initramfs.c dosyasında çıkarılır. Üçü birlikte, insan tarafından okunabilir toplam 26k metnin altına gelir.

3) Katran üzerinde standardize olan GNU projesi yaklaşık olarak zip üzerinde Windows standardizasyonu ile ilgilidir. Linux her ikisinin de bir parçası değildir ve kendi teknik kararlarını almakta özgürdür.

4) Bu bir çekirdek iç biçimi olduğundan, kolayca
yepyeni bir şey olabilirdi . Çekirdek yine de bu biçimi oluşturmak ve çıkarmak için kendi araçlarını sağlar. Mevcut bir standardın kullanılması tercih edildi, ancak zorunlu değildi.

5) Al Viro kararı verdi (alıntı: "katran cehennem kadar çirkin ve çekirdek tarafında desteklenmeyecek"):

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

gerekçelerini açıkladı:

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

ve en önemlisi initramfs kodunun tasarlanması ve uygulanması.


3

Eski SysV günlerimi hatırladığım kadarıyla, cpio dev dosyalarını işleyebilir, ancak tar yapamadı; Bu, cpio'yu dökümü gelmeden önce 'ham' yedekleme yardımcısı yaptı. Kısmi dosya kümelerini ve sabit bağlantıları işlemek de daha kolaydı, böylece artımlı yedeklemeler daha kolaydı. Bence GNU katran cpio özelliklerini yakaladı, bu yüzden şimdi sadece kullanıcı rahatlığı meselesi. Hem cpio hem de tar varsayılan olarak kurulmalıdır.


1
cpiotar- biçimli arşivleri işleyebilir ve bazı durumlarda tam tersi olabilir, ancak bu önemli değildir. Çekirdek yalnızca bilmediğim newctürden cpiobiçimli arşivleri açabiliyor tar.
ephemient

GNU cpio'nun yanlış çağırdığı biçim newcresmi olarak adlandırılır ascve elbette tarafından desteklenir star.
şükran

1
@schily: Bu, örtük nedenlerden birini oldukça iyi gösteriyor. "Peki, bu bir tür katran arşivi. Ama olası katran formatlarından hangisi ve bu katran çıkarıcı ile uyumlu mu?" OTOH, cpio'nun sürüm geçmişi çok daha az karmaşık.
Piskvor binadan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.