initramfs에 cpio를 사용하는 이유는 무엇입니까?


11

젠투 위키 다음에 나만의 initramfs를 만들고 있습니다. 친숙한 tar및 대신 gzip페이지에서 cpio및 을 사용하도록 지시합니다 gzip. Wikipediacpio2.6 커널의 initramfs에서 사용하지만 그 이유를 설명하지는 않습니다.

이것은 단지 관습 cpio입니까 아니면 initramfs에 더 낫습니까? 나는 아직도 사용할 수 targzip?


IIRC는 tar를 initramfs로 사용할 수 없습니다 (100 % 확실하지 않으므로 답변으로 게시하지 않습니다). 젠투를 사용하는 BTW 내장 initramfs를 구성하는 것보다 수작업으로 만드는 것이 훨씬 쉽습니다.
Maciej Piechotka

@Maciej 난 그냥 방법을 알고 싶어 :) 또한 내 자신의 initramfs를 사용하여 부팅 시간이 크게 향상되고 있습니다
phunehehe

당신은 나를 오해했다. 내가 이야기 한 방법은 구성 중에 커널에 스펙 파일을 제공하여 initrd에 포함 해야하는 파일 (사용자 정의 /init등 포함)을 제공하는 것입니다. 커널은 단순히 그 파일을 사용합니다. genkernel 또는 유사한 방법으로 initramfs를 생성하지는 않습니다.
Maciej Piechotka

@Maciej 재미 있겠다! 언젠가해볼 게요
phunehehe

잘. IMHO를 설정하는 것이 더 쉽고 커널로 자동 업데이트되므로 새 파일을 initrd에 복사하는 것을 기억할 필요가 없습니다.
Maciej Piechotka

답변:


9

100 % 확신 할 수는 없지만 부팅하는 동안 커널에서 초기 램 디스크의 압축을 풀어야하므로 cpio는 커널 코드로 이미 구현되어 있기 때문에 사용됩니다.


6
100 % 확신하십시오. linux / init / initramfs.ccpio -H newc아카이브를 압축 해제합니다 .
ephemient

@ephemient 이것은 정말 뭔가입니다. 며칠 안에 더 이상 답변이 없다면 나는 그 cpio규칙이 관례로 사용되며 우리가 사용해야한다는 것을 받아들 입니다 cpio.
phunehehe 2019

왜 newc가 형식을 선택했는지 아이디어가 있습니까?
CMCDragonkai

1
커널 문서에 따르면, cpio는 initramdisk를 위해서만 구현되었으므로 다른 형식을 구현할 수있었습니다.
lvella

10

인용 Documentation/filesystems/ramfs-rootfs-initramfs.txt:

왜 tar가 아닌 cpio입니까?

이 결정은 2001 년 12 월에 이루어졌습니다. 토론은 여기에서 시작되었습니다.

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 (Red Hat의 장치 드라이버 디스크 인 RPM 내부)에서 이미 널리 사용되고 있습니다. 다음은 1996 년의 Linux Journal 기사입니다.

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

전통적인 cpio 명령 줄 도구에는 _truly_hideous_ 명령 줄 인수가 필요하기 때문에 tar만큼 인기가 없습니다. 그러나 이것은 아카이브 형식에 대해 아무 말도하지 않으며 다음과 같은 대체 도구가 있습니다.

http://freecode.com/projects/afio

2) 커널이 선택한 cpio 아카이브 형식은 다양한 문자 그대로의 tar 아카이브 형식보다 간단하고 깔끔하며 작성 및 구문 분석이 더 쉽습니다. 전체 initramfs 아카이브 형식은 usr / gen_init_cpio.c에 작성되고 init / initramfs.c에 추출 된 buffer-format.txt에 설명되어 있습니다. 이 세 가지가 모두 26k 미만의 사람이 읽을 수있는 텍스트입니다.

3) tar로 표준화 한 GNU 프로젝트는 zip으로 표준화 한 Windows와 거의 관련이 있습니다. Linux도 그 일부가 아니며 자체적으로 기술적 인 결정을 내릴 수 있습니다.

4) 이것은 커널 내부 형식이기 때문에 쉽게
새로운 것일 수 있습니다 . 커널은 어쨌든이 형식을 만들고 추출 할 수있는 자체 도구를 제공합니다. 기존 표준을 사용하는 것이 바람직하지만 필수는 아닙니다.

5) Al Viro가 결정을 내렸다 ( "타르는 못 생겼고 커널 쪽에서는 지원되지 않습니다").

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는 dev 파일을 처리 할 수 ​​있었지만 tar는 수행 할 수 없었습니다. 이로 인해 cpio는 덤프가 발생하기 전에 선택한 '원시'백업 유틸리티가되었습니다. 부분 파일 세트 및 하드 링크를 처리하는 것이 더 쉬워 지므로 증분 백업이 더 쉬워졌습니다. GNU tar가 cpio 기능을 따라 잡았으므로 이제는 사용자 편의성의 문제 일뿐입니다. cpio와 tar는 기본적으로 설치되어야합니다.


1
cpiotar어떤 경우에는 -format 아카이브 를 처리 할 수 ​​있으며 그 반대도 마찬가지입니다. 커널은 내가 알지 못하는 newc-style cpio-format 아카이브 만 압축을 풀 수 있습니다 tar.
: 21 :

GNU cpio가 잘못 호출하는 형식 newc은 공식적으로 명명 asc되며 물론 지원합니다 star.
schily

1
@schily : 이것은 암묵적인 이유 중 하나를 아주 잘 보여줍니다. "이것은 일종의 타르 아카이브입니다. 그러나 가능한 타르 형식 중 어느 것이이 타르 추출기와 호환됩니까?" cpio의 버전 기록 인 OTOH는 훨씬 덜 복잡합니다.
Piskvor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.