Навіщо використовувати cpio для initramfs?


11

Я роблю власні initramfs, слідуючи за вікі Gentoo . Замість знайомих tarі gzip, сторінка підказує мені використовувати cpioі gzip. Вікіпедія говорить, що cpioвикористовується initramfs ядра 2.6, але не пояснює, чому.

Це просто умова чи cpioкраще для initramfs? Чи можу я все-таки використовувати tarі gzip?


IIRC ви не можете використовувати tar як initramfs (я не розміщую його як відповідь, оскільки я не впевнений на 100%). BTW за допомогою Gentoo мені набагато простіше налаштувати вбудовані initramfs, а не ручний.
Maciej Piechotka

@Maciej Мені просто хочеться знати, як це зробити :) Крім того, я бачу значне покращення часу завантаження, використовуючи власні initramfs
phunehehe

Ти неправильно мене зрозумів. Метод, про який я говорив, - це надання ядра під час конфігурації файлу специфікації, файли якого повинні бути включені до initrd (включаючи власні /initтощо), а ядро ​​просто використовує цей. Я не берусь про створення initramfs генкернелем чи подібними методами.
Maciej Piechotka

@Maciej Це виглядає весело! Я спробую колись.
phunehehe

Ну. Налаштувати IMHO простіше, і він автоматично оновлюється ядром (тому мені не потрібно пам'ятати, щоб копіювати нові файли в initrd).
Maciej Piechotka

Відповіді:


9

Я не на 100% впевнений, але оскільки початковий ramdisk повинен бути розпакований ядром під час завантаження, використовується cpio, оскільки він уже реалізований у коді ядра.


6
Будьте на 100% впевнені. linux / init / initramfs.c розпаковує cpio -H newcархів.
ефеміент

@ephemient Це справді щось. Якщо через кілька днів не буде відповіді більше, я прийму, що cpioвона використовується як умова і яку ми повинні використовувати cpio.
phunehehe

Будь-які ідеї, чому Newc обраний формат?
CMCDragonkai

1
Згідно з документацією на ядро, cpio був реалізований саме заради initramdisk, щоб вони могли реалізувати будь-який інший формат.
lvella

10

Цитування Documentation/filesystems/ramfs-rootfs-initramfs.txt:

Чому cpio, а не дьоготь?

Це рішення було прийнято ще в грудні 2001 року. Дискусія розпочалася тут:

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

І породив другу нитку (конкретно на tar-cpio), починаючи тут:

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

Швидка та брудна підсумкова версія (яка не замінює читання вищевказаних тем):

1) cpio - це стандарт. Це десятиліття (з AT&T днів) і вже широко використовується в Linux (всередині RPM, диски драйверів пристроїв Red Hat). Ось стаття щодо журналу Linux з 1996 року:

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

Це не так популярно, як смола, оскільки для традиційних інструментів командного рядка cpio потрібні аргументи командного рядка _truly_hideous_. Але це нічого не говорить про формат архіву, і є альтернативні інструменти, такі як:

http://freecode.com/projects/afio

2) Формат архіву cpio, обраний ядром, простіший і чистіший (і, таким чином, простіший у створенні та розборі), ніж будь-який із (буквально десятки) різних форматів архіву tar. Повний архівний формат initramfs пояснюється в buffer-format.txt, створеному в usr / gen_init_cpio.c, і витягується в init / initramfs.c. Усі троє разом складають менш ніж 26 тис. Текстів, що читаються людиною.

3) Стандартизація проекту GNU на дьогті приблизно настільки ж актуальна, як стандартизація Windows на zip. Linux також не є частиною, і вільний приймати власні технічні рішення.

4) Оскільки це внутрішній формат ядра, він може бути легко
новим. Ядро надає власні інструменти для створення та вилучення цього формату в будь-якому випадку. Використання існуючого стандарту було кращим, але не суттєвим.

5) Аль-Віро прийняв рішення (цитата: "дьоготь некрасивий як пекло і його не підтримуватимуть на стороні ядра"):

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

пояснив свої міркування:

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

і, найголовніше, розробили і реалізували код initramfs.


3

З того, що я пам'ятаю про свої старі дні SysV, cpio міг обробляти файли розробників, але tar не міг; це зробило cpio "сирою" утилітою резервного копіювання, перш ніж дамп з'явився. Також було простіше обробляти часткові набори файлів і жорсткі посилання, тому додаткові резервні копії були легшими. Я думаю, що гугл GNU наздогнав функції cpio, тому зараз це лише питання зручності користувача. І cpio, і tar повинні бути встановлені за замовчуванням.


1
cpiotarв деяких випадках може працювати з форматом архівів, і навпаки, але це не має значення. Ядро може розпаковувати лише архіви формату newc-style cpio-формату, про які tarя не знаю.
ефеміент

Формат, який неправильно викликає cpio GNU newc, офіційно названий ascі, звичайно, підтримується star.
schily

1
@schily: Це досить добре показує одну з неявних причин. "Ну, це якийсь архів дьогтю. Але який із можливих форматів дьогтю, і чи сумісний він з цим витяжкою дьогтю?" OTOH, історія версій cpio набагато менш складна.
Пісквор вийшов з будівлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.