initramfs에 cpio를 사용하는 이유는 무엇입니까? 친숙한 tar및 대신

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

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



답변

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


답변

인용 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 코드를 디자인하고 구현 한 것입니다.


답변

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