เหตุใดจึงต้องใช้ cpio สำหรับ initramfs


11

ฉันทำ initramfs ของตัวเองต่อไปนี้วิกิพีเดีย Gentoo แทนที่จะเป็นที่คุ้นเคยtarและgzipหน้าจะบอกให้ผมใช้และcpio Wikipediaบอกว่ามันถูกใช้โดย initramfs ของเคอร์เนล 2.6 แต่ไม่ได้อธิบายว่าทำไมgzipcpio

นี่เป็นเพียงการประชุมหรือcpioดีกว่าสำหรับผู้เริ่มต้นหรือไม่ ฉันยังสามารถใช้tarและได้gzipหรือไม่?


IIRC คุณไม่สามารถใช้ tar เป็น initramfs (ฉันไม่โพสต์เป็นคำตอบเพราะฉันไม่แน่ใจ 100%) BTW โดยใช้ Gentoo ฉันพบว่าการกำหนดค่า initramfs ในตัวค่อนข้างง่ายกว่าทำด้วยมือ
Maciej Piechotka

@Maciej ฉันแค่อยากรู้ว่าต้องทำยังไง :) นอกจากนี้ฉันยังเห็นการปรับปรุงเวลาบู๊ตครั้งใหญ่ด้วยการใช้ initramfs ของตัวเอง
phunehehe

คุณเข้าใจฉันผิด. วิธีที่ฉันพูดถึงคือการให้เคอร์เนลระหว่างการกำหนดค่าไฟล์สเป็คที่ไฟล์ควรจะรวมอยู่ใน initrd (รวมถึงที่กำหนดเอง/initฯลฯ ) และเคอร์เนลเพียงแค่ใช้มัน ฉันไม่ได้เกี่ยวกับการสร้าง initramfs โดย genkernel หรือวิธีการที่คล้ายกัน
Maciej Piechotka

@Maciej นั่นดูสนุก! ฉันจะลองบางครั้ง
phunehehe

ดี. การตั้งค่า IMHO ง่ายขึ้นและอัปเดตอัตโนมัติด้วยเคอร์เนล (ดังนั้นฉันไม่จำเป็นต้องจำให้คัดลอกไฟล์ใหม่ไปยัง initrd)
Maciej Piechotka

คำตอบ:


9

ฉันไม่แน่ใจ 100% แต่เนื่องจาก ramdisk เริ่มต้นต้องถูกคลายโดยเคอร์เนลในระหว่างการบู๊ต cpio จะถูกใช้เพราะมันถูกนำไปใช้ในเคอร์เนลโค้ดแล้ว


6
มั่นใจ 100% linux / init / initramfs.c ปลดล็อคไฟล์cpio -H newcเก็บถาวร
ephemient

@ephemient นี่เป็นเรื่องจริง ถ้าไม่มีคำตอบอื่น ๆ อีกมากมายที่จะมาในไม่กี่วันผมจะยอมรับว่าจะใช้เป็นที่ประชุมและที่เราจะต้องใช้cpio cpio
phunehehe

แนวคิดใดที่ทำให้ newc เป็นรูปแบบที่เลือก?
CMCDragonkai

1
ตามเอกสารของเคอร์เนล cpio ได้รับการดำเนินการเพียงเพื่อ initramdisk ดังนั้นพวกเขาจึงสามารถใช้รูปแบบอื่นได้
lvella

10

การอ้างอิงDocumentation/filesystems/ramfs-rootfs-initramfs.txt:

ทำไม cpio มากกว่า tar

การตัดสินใจครั้งนี้เกิดขึ้นในเดือนธันวาคม 2544 การสนทนาเริ่มต้นที่นี่:

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

และวางกระทู้ที่สอง (โดยเฉพาะกับ tar vs 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

ไม่เป็นที่นิยมเท่า tar เนื่องจากเครื่องมือบรรทัดคำสั่ง cpio ดั้งเดิมต้องการอาร์กิวเมนต์อาร์กิวเมนต์บรรทัดคำสั่ง _truly_hideous_ แต่นั่นไม่ได้บอกว่าวิธีการเกี่ยวกับรูปแบบการเก็บถาวรและมีเครื่องมือทางเลือกเช่น:

http://freecode.com/projects/afio

2) รูปแบบไฟล์เก็บถาวร cpio ที่เลือกโดยเคอร์เนลนั้นเรียบง่ายกว่าและสะอาดกว่า (และง่ายกว่าในการสร้างและแยกวิเคราะห์) กว่ารูปแบบไฟล์เก็บถาวร tar หลายรูปแบบ รูปแบบไฟล์เก็บถาวร initramfs ที่สมบูรณ์มีการอธิบายใน buffer-format.txt สร้างขึ้นใน usr / gen_init_cpio.c และแยกใน init / initramfs.c ทั้งสามร่วมกันมีข้อความที่มนุษย์อ่านได้ทั้งหมดน้อยกว่า 26k

3) โครงการมาตรฐานของ GNU บน tar นั้นมีความเกี่ยวข้องโดยประมาณเท่ากับมาตรฐาน Windows บน zip Linux ไม่ได้เป็นส่วนหนึ่งของทั้งคู่และมีอิสระในการตัดสินใจทางเทคนิคของตัวเอง

4) เนื่องจากนี่เป็นรูปแบบภายในเคอร์เนลจึงอาจเป็น
เรื่องใหม่ได้อย่างง่ายดาย เคอร์เนลมีเครื่องมือของตัวเองเพื่อสร้างและแยกรูปแบบนี้ต่อไป การใช้มาตรฐานที่มีอยู่นั้นเป็นที่นิยมมากกว่า แต่ไม่จำเป็น

5) Al Viro ได้ทำการตัดสินใจ (อ้างถึง: "tar เป็นที่น่าเกลียดเหมือนนรกและไม่ได้รับการสนับสนุนทางด้านเคอร์เนล"):

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
cpioอาจจะสามารถจัดการกับ - tarจัดรูปแบบเอกสารเก็บถาวรและในทางกลับกันในบางกรณี แต่นั่นไม่สำคัญ เคอร์เนลสามารถแตกไฟล์newcสไตล์ - cpioถาวร- ฟอร์แมตถาวรซึ่งtarฉันไม่รู้ผลิต
ephemient

รูปแบบที่ไม่ถูกต้อง GNU cpio เรียกnewcเป็นชื่ออย่างเป็นทางการและได้รับการสนับสนุนการเรียนการสอนโดยasc star
schily

1
@ schily: นั่นแสดงเหตุผลโดยปริยายอย่างหนึ่ง "มันเป็นไฟล์เก็บถาวร tar บางประเภท แต่รูปแบบ tar ที่เป็นไปได้และมันเข้ากันได้กับ tar extractor นี้หรือไม่?" OTOH ประวัติรุ่นของ cpio นั้นซับซ้อนน้อยกว่ามาก
Piskvor ออกจากอาคาร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.