क्या गज़िप परमाणु है?


11

है gzipपरमाणु?

यदि मैं gzipफ़ाइल को gzipping के बीच में रखते हुए प्रक्रिया को रोक देता हूं तो क्या होगा ?

यदि यह परमाणु नहीं है, और अगर मैंने पहले से ही एक gzip *.txtप्रक्रिया पर Ctrl + C दबाया है, तो मैं सुरक्षित रूप से कैसे फिर से शुरू कर सकता हूं?

(मैं बस फिर से शुरू करने के बारे में उत्सुक नहीं हूं, बल्कि इस बारे में भी कि क्या gzipविशेष रूप से परमाणु है।)



4
"कैसे मैं सुरक्षित रूप से फिर से शुरू करते हैं?" _... उपयोग CTRL+Zके बजाय CTRL+C, तो मारने या (बाधित काम फिर से शुरू यह एक संख्या के साथ जवाब देती है n[- [n]+ Stopped-- gzip ...] तो आप के साथ शुरू कर सकते हैं %nया के साथ fg, या के साथ bg... उसी तरह से आप इसे मार सकते हैं kill %n)।
हस्तूर

संपीड़ित करते समय एक बड़ी फ़ाइल, Ctrl-C संपीड़ित करें और देखें कि क्या होता है।
रॉनजॉन

नहीं। केवल एमवी परमाणु है, एक्सट्रा 4 पर छोड़कर ... व्यंग्य टपकता है, लेकिन कम से कम उन्होंने कुछ समय पहले डिफ़ॉल्ट माउंट विकल्प तय किए।
mirabilos

जवाबों:


28

क्या गज़िप परमाणु है?

नहीं, यह एक संपीड़ित फ़ाइल बनाता है और फिर असम्पीडित मूल को निकालता है।

विशेष रूप से, यह एक फ़ाइल को सीटू में संपीड़ित नहीं करता है और समय की अवधि होती है जबकि फ़ाइल को संकुचित किया जा रहा है, जहां,

  • संकुचित लक्ष्य अधूरा है
  • आंशिक रूप से संपीड़ित फ़ाइल और इसका स्रोत दोनों ही फाइल सिस्टम में मौजूद हैं।

यदि मैं gzip प्रक्रिया को रोक देता हूं, तो यह फ़ाइल के gzipping के बीच में क्या होता है?

यदि आप gzipप्रक्रिया को एक बिल्ली के समान संकेत ( उदाहरण के लिए) SIGINTसे रोकते हैं Ctrl C, तो यह आंशिक रूप से बनाई गई फ़ाइलों की सफाई करेगा। अन्यथा, उस बिंदु पर निर्भर करता है जिस पर यह बंद हो गया है, आप अनछुए मूल के साथ आंशिक रूप से संपीड़ित फ़ाइल के साथ समाप्त हो सकते हैं।

यदि यह परमाणु नहीं है, अगर मैं पहले से ही gzip * .txt प्रक्रिया पर Ctrl + C दबाता हूं, तो मैं सुरक्षित रूप से कैसे फिर से शुरू कर सकता हूं?

आप आंशिक रूप से संपीड़ित संस्करण हटाते हैं (यदि यह अभी भी मौजूद है) और फिर से चालू करें gzip


5
2 तब होता है जब प्रक्रिया समाप्त हो जाती है , तब नहीं जब यह बंद हो जाता है , और केवल गैर-संभाले संकेतों के लिए होता है (^ C -> के लिए नहीं होता है SIGINTया SIGTERMजिसके लिए gzipसिग्नल हैंडलर स्थापित करता है जो आउटपुट फ़ाइल को हटाता है)।
मॉसवी

1
@ मोमोसवी तो यह करता है। मैंने पहले कभी नहीं देखा। धन्यवाद
roaima

1
आप यह सुनिश्चित करने के लिए अत्यंत सावधानी बरतते हैं कि मूल को हटा दिया गया है, जिसके लिए आप किसी भी gzipped फ़ाइलों को नहीं हटाते हैं। जब gzip को अनियमित रूप से मार दिया जाता है, तो वह आमतौर पर एक फ़ाइल होती है, आमतौर पर अंतिम एक।
हार्पर - मोनिका

@ हैपर हाँ। यदि आप gzipमध्य प्रवाह को रोकते हैं तो वहां हमेशा एक छोटी दौड़ की स्थिति होती है। वैकल्पिक रूप से आप gzipहमेशा लक्ष्य फ़ाइलों को अधिलेखित करने के लिए कह सकते हैं , जो अधिकांश सफाई मुद्दों को दरकिनार कर देता है।
रोइमा

15

यह परमाणु (यूनिक्स फाइल सिस्टम एपीआई वास्तव में परमाणु कार्य है कि एक से अधिक फ़ाइलों को प्रभावित प्रदर्शन करने के लिए किसी भी तरह से प्रदान नहीं करता है) नहीं है, लेकिन यह है असफल-सुरक्षित। संपीड़ित फ़ाइल एक नई फ़ाइल है, यह मूल को अधिलेखित नहीं करती है, और यह मूल फ़ाइल को तब तक नहीं हटाती है जब तक कि उसने संपीड़ित फ़ाइल को पूरा नहीं किया है (यह वास्तव में एक समस्या पैदा कर सकता है यदि आपके पास पर्याप्त डिस्क स्थान नहीं है दोनों फाइलें)।

यदि इसे कोई त्रुटि मिलती है या आप संपीड़न को बाधित करते हैं, तो मूल फ़ाइल अपरिवर्तित रहेगी। आंशिक संपीड़ित फ़ाइल आमतौर पर निकाल दी जाएगी।

बीच में इसे फिर से शुरू करने का कोई तरीका नहीं है, आप इसे शुरू से ही शुरू कर दें।


यह मुझे इस बारे में सोचने के लिए प्रेरित करता है कि संभवतः परमाणु बहुक्रियाशील संचालन को कैसे लागू किया जा सकता है। SQL ट्रांजेक्शन जैसा कुछ?
वैल

1
@val लगभग 30 साल पहले मैं एक ऐसी टीम पर था जो एक नए ओएस को मल्टिक्स / जीसीओएस फॉलोऑन के रूप में डिजाइन कर रही थी, और डेटाबेस जैसा फाइलसिस्टम विचार का हिस्सा था। हालांकि यह परियोजना कभी बहुत दूर नहीं रही।
बमर

उन्होंने एनटीएफएस लेनदेन को हटा दिया, लगता है कि जटिलता के लायक नहीं है। नाम बदलना सबसे अधिक परमाणु ऑपरेशन है (जब तक आप एक ही फाइल सिस्टम पर होते हैं और इसमें पॉज़िक्स शब्दार्थ होता है), इसलिए अस्थायी नाम से अंतिम नाम के करीब (नाम / fsync के बाद) होने से यह सुनिश्चित होगा कि असम्पीडित फ़ाइल कम से कम पूर्ण हो। आप पाइप उपयोग करने के साथ उन समस्याओं (जो अपने ही आंशिक विफलता मोड है) के आसपास काम कर सकते हैं
Eckes

@eeses जब तक यह संपीड़ित फ़ाइल को बंद करने के बाद मूल को हटा देता है, आपको परमाणु नाम बदलने की आवश्यकता नहीं है। यदि मूल चला गया है, तो आप सुनिश्चित कर सकते हैं कि संपीड़ित फ़ाइल पूरी हो गई है। आपको उन ऑपरेशनों के लिए परमाणु नाम बदलने की आवश्यकता है जो मूल फ़ाइल (जैसे sed -i) को प्रतिस्थापित करते हैं ।
बरमार

@ बरमार अगर आप केवल लक्ष्य फ़ाइल के अस्तित्व को ट्रिगर करना चाहते हैं (जो कई निर्देशिका मतदान वर्कफ़्लो करते हैं) तो आपको बेहतर होगा सुनिश्चित करें कि फ़ाइल पूरी हो गई है। यदि आप उस पर ट्रिगर नहीं करते हैं या स्रोत के अस्तित्व की जांच करके अपूर्ण फ़ाइलों का पता लगा सकते हैं, तो आप अंतिम नाम के बिना ठीक हैं।
ग्रहण

4

आपको इसके बारे में चिंता करने की आवश्यकता नहीं है क्योंकि gzipएक नई .gzफ़ाइल बनाता है , इसे संपीड़ित सामग्री के साथ पॉप्युलेट करता है, फिर मूल फ़ाइल को हटा देता है। इसलिए यदि आप प्रक्रिया को बीच में ही रोक देते हैं, तो यह आपकी मूल फ़ाइल को प्रभावित नहीं करेगा।


3

.txtपहले से सफलतापूर्वक संसाधित की गई फ़ाइलों gzipको .txt.gzसंपीड़ित फ़ाइलों के साथ बदल दिया जाएगा , ताकि आप सुरक्षित रूप से gzip *.txtफिर से चला सकें - केवल उन फ़ाइलों को संसाधित नहीं किया गया है जो अभी तक संपीड़ित होंगी।

जिस फ़ाइल को Ctrl-C दबाए जाने के समय gzip द्वारा संसाधित किया जा रहा था, वह अनमॉडिफाइड होगी - सफलतापूर्वक इसे कंप्रेस करने के बाद तक gzip इसे प्रतिस्थापित नहीं करेगा ।


0

नहीं, यह बहुत अपरंपरागत है। यह आपको बड़ी मुसीबत में डाल सकता है यदि आप एक ऐसी फ़ाइल को गिपिप करते हैं जिसे वेब लॉग की तरह कभी-कभार जोड़ा जा रहा है।

Gzip पढ़ता है, .gz फ़ाइल बनाता है (वर्तमान टाइमस्टैम्प के साथ), मूल फ़ाइल के टाइमस्टैम्प की प्रतिलिपि बनाता है, फिर मूल को हटाता है।

कुछ व्यवधान .txt.gzफ़ाइल के ठीक बगल में एक भटका हुआ, अधूरा फ़ाइल छोड़ सकते हैं .txt। यह तब डेटा अखंडता मुद्दा बनाता है: असली फ़ाइल कौन सी है? क्या इस

  • एक गज़िप जो विफल रही, एक अपूर्ण / भ्रष्ट को छोड़कर .txt.gz? या
  • एक बंदूक की नोक जो एक अपूर्ण / छंटनी की गई .txtफ़ाइल को छोड़ने में विफल रही ? या
  • एक फ़ाइल सफलतापूर्वक gzipped txt.gz, और एक नई बनाई गई .txt फ़ाइल?

(यह तब होता है जब आप अपने HTTP लॉग डायरेक्टरी में जाते हैं और जाते हैं gzip *)।

मैं आमतौर पर इसे हाथ से हल करने के लिए समझदार हूं, जब तक कि आपको पता नहीं है कि वास्तव में क्या हुआ क्योंकि आपने ऐसा किया था।

सौभाग्य से गज़िप आमतौर पर क्रमिक रूप से संचालित होती है, इसलिए आपको केवल एक फ़ाइल के साथ यह समस्या होनी चाहिए। पैरेल्लिंग गज़िप एक अच्छा विचार नहीं है - भले ही यह सीपीयू का पूरी तरह से उपयोग करेगा, यह डिस्क को एक बार में कई फाइलों को पढ़ने के लिए मजबूर कर देगा, सभी गज़िप को धीमा कर देगा। दूसरी ओर एसएसडी या रैमडिस्क ...


1
@roaima। हम वास्तव में करते हैं, मैं एक स्लैंग पर भरोसा कर रहा था जिसका अर्थ था कि हम बहुत समय पहले एक जगह पर काम करते थे जो मैंने काम किया था। आम परिभाषा में सुधार।
हार्पर - मोनिका

1
यदि आप नीचे जा रहे हैं तो कृपया यह समझाते हुए एक टिप्पणी छोड़ दें।
JBentley
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.