Initramfs के लिए cpio का उपयोग क्यों करें?


11

मैं जेंटू विकी का अनुसरण करके अपने खुद के इनट्रैमर्फ बना रहा हूं । परिचित tarऔर के बजाय gzip, पेज मुझे उपयोग करने के लिए कह रहा है cpioऔर gzipविकिपीडिया कहता है कि cpioइसका उपयोग 2.6 कर्नेल के इनट्राम्राम्स द्वारा किया जाता है, लेकिन यह क्यों नहीं समझाता है।

क्या यह सिर्फ एक सम्मेलन है या cpioinitramfs के लिए बेहतर है? क्या मैं अभी भी उपयोग कर सकता हूं tarऔर gzip?


IIRC आप initramfs के रूप में टार का उपयोग नहीं कर सकते हैं (मैं इसे उत्तर के रूप में पोस्ट नहीं करता हूं क्योंकि मैं 100% सुनिश्चित नहीं हूं)। BTW Gentoo का उपयोग करते हुए मुझे अंतर्निहित initramfs को कॉन्फ़िगर करने में बहुत आसान लगता है, बल्कि फिर हाथ से बनाया गया है।
मैकीज पीचोटका

@ मैसीज मैं सिर्फ यह जानना चाहता हूं कि यह कैसे करना है :) इसके अलावा मैं अपने खुद के initramfs का उपयोग करके एक बड़े बूट समय में सुधार देख रहा हूं
phunehehe

आपने मुझे गलत समझा। जिस विधि के बारे में मैं बात कर रहा था, वह विन्यास फाइल के दौरान कर्नेल को देकर है जिसमें फाइल को इनिट्रड (कस्टम /initआदि सहित ) में शामिल किया जाना चाहिए और कर्नेल बस उसी का उपयोग करता है। मैं जनकबर्न या इसी तरह के तरीकों से initramfs पैदा करने के बारे में नहीं ले रहा हूं।
Maciej Piechotka

@Maciej जो मज़ेदार लग रहा है! मैं इसे कभी-कभी कोशिश करूँगा।
फिन्हेह

कुंआ। यह IMHO स्थापित करने के लिए आसान है और यह कर्नेल के साथ स्वतःभरण करता है (इसलिए मुझे नई फ़ाइलों को प्रतिलिपि में याद रखने की आवश्यकता नहीं है)।
मैकीज पाइचोटका

जवाबों:


9

मुझे 100% यकीन नहीं है, लेकिन जैसा कि शुरुआती रैमडिस्क को बूट के दौरान कर्नेल द्वारा अनपैक करने की आवश्यकता होती है, cpio का उपयोग किया जाता है क्योंकि यह पहले से ही कर्नेल कोड में लागू है।


6
100% निश्चित हो। linux / init / initramfs.c एक cpio -H newcसंग्रह को खोल देता है ।
अपराह्न

@ephemient यह वास्तव में कुछ है। अगर कुछ दिनों में कोई जवाब नहीं आ रहा है तो मैं स्वीकार करूंगा कि cpioइसे एक सम्मेलन के रूप में उपयोग किया जाता है और हमें इसका उपयोग करना है cpio
फुनेह

किसी भी विचार क्यों newc प्रारूप चुना जाता है?
CMCDragonkai

1
कर्नेल प्रलेखन के अनुसार, cpio को सिर्फ इनट्र्रामडिस्क के लिए लागू किया गया था, इसलिए वे किसी अन्य प्रारूप को लागू कर सकते थे।
लवेला

10

उद्धरण Documentation/filesystems/ramfs-rootfs-initramfs.txt:

टार के बजाय cpio क्यों?

यह निर्णय दिसंबर, 2001 में वापस किया गया था। चर्चा यहाँ शुरू हुई:

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

और दूसरा सूत्र (विशेष रूप से टार बनाम cpio पर) शुरू किया, यहाँ से शुरू होता है:

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

त्वरित और गंदा सारांश संस्करण (जो उपरोक्त सूत्र पढ़ने के लिए कोई विकल्प नहीं है):

1) cpio एक मानक है। यह दशकों पुराना है (एटीएंडटी दिनों से), और पहले से ही व्यापक रूप से लिनक्स पर इस्तेमाल किया जाता है (आरपीएम के अंदर, Red Hat का डिवाइस ड्राइवर डिस्क)। यहाँ 1996 से इसके बारे में लिनक्स जर्नल लेख है:

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

यह टार के रूप में लोकप्रिय नहीं है क्योंकि पारंपरिक cpio कमांड लाइन टूल के लिए _truly_hideous_ कमांड लाइन तर्कों की आवश्यकता होती है। लेकिन यह कहता है कि संग्रह प्रारूप के बारे में कुछ भी नहीं है, और वैकल्पिक उपकरण हैं, जैसे:

http://freecode.com/projects/afio

2) कर्नेल द्वारा चुना गया cpio आर्काइव फॉर्मेट सरल है और क्लीनर (और इस प्रकार बनाना और पार्स करना आसान है) विभिन्न टार आर्काइव फॉर्मेट्स में से किसी भी (शाब्दिक दर्जनों) से अधिक है। संपूर्ण initramfs संग्रह प्रारूप को usr / gen_init_cpio.c में बनाया गया, और init / initramfs.c में निकाला गया बफर-format.txt में समझाया गया है। तीनों एक साथ मानव-पठनीय पाठ के कुल 26k से कम आते हैं।

3) टर्न पर मानकीकरण वाला GNU प्रोजेक्ट लगभग उतना ही प्रासंगिक है जितना कि ज़िप पर विंडोज मानकीकरण। लिनक्स या तो हिस्सा नहीं है, और अपने स्वयं के तकनीकी निर्णय लेने के लिए स्वतंत्र है।

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 देव फाइलों को संभाल सकता था, लेकिन टार नहीं कर सकता था; डंप के आसपास आने से पहले cpio ने चुनाव की 'कच्ची' बैकअप उपयोगिता बनाई। आंशिक फ़ाइलसेट और हार्ड लिंक को संभालना भी आसान था इसलिए वृद्धिशील बैकअप आसान थे। मुझे लगता है कि GNU टार ने cpio फीचर्स के साथ पकड़ लिया है, इसलिए अब यह केवल उपयोगकर्ता के आराम की बात है। Cpio और tar दोनों को डिफ़ॉल्ट रूप से स्थापित किया जाना चाहिए।


1
cpiotarकुछ मामलों में -रूपक अभिलेखागार और इसके विपरीत को संभालने में सक्षम हो सकता है , लेकिन इससे कोई फर्क नहीं पड़ता। कर्नेल केवल newc-स्टाइल cpio-फॉर्मेट अभिलेखागार को अनपैक कर सकता है , जो tarकि मैं नहीं जानता कि उत्पादन होता है।
अवधि

जीएनयू cpio को गलत तरीके से कॉल करने वाला प्रारूप newcआधिकारिक रूप से नामित है ascऔर निश्चित रूप से समर्थित है star
शास्त्री

1
@ शिल्पी: यह निहित कारणों में से एक को काफी अच्छी तरह से दिखाता है। "ठीक है, यह टार संग्रह का कुछ प्रकार है। लेकिन संभव टार प्रारूपों में से कौन सा है, और क्या यह इस टार एक्सट्रैक्टर के साथ संगत है?" OTOH, cpio का संस्करण इतिहास कहीं कम जटिल है।
पिस्कोर ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.