त्रुटियों के मामले में mv क्या करता है?


18

मैंने एक बड़े पेड़ को एक डिस्क से दूसरी डिस्क पर ले जाने की कोशिश की है, जो बहुत छोटा था। अब, मैं कुछ ऐसी चीज़ों के साथ रह गया हूँ जिन्हें मैं वास्तव में नहीं समझ सकता हूँ - ऐसा लगता है कि कुछ फाइलें वास्तव में स्रोत के पेड़ से दूर चली गईं, जबकि अन्य की नकल की गई थी। यह सबसे शायद सच नहीं है, और मैं बस कुछ अनदेखी कर रहा हूं, जैसे मैंने तब किया जब मैं लक्ष्य डिस्क पर मुफ्त जगह की जांच करता हूं। : डी

आदेश बस था mv source-dir destination-dir, जहां दोनों डायर अलग-अलग डिस्क पर रहते हैं। मैं उपयोग कर रहा हूं mv (GNU coreutils) 7.4। मैन पेज में कहीं भी मुझे निम्नलिखित सवालों के जवाब नहीं मिले:

  • छंटनी की गई फाइलें बन सकती हैं?
  • त्रुटियों के मामले में, क्या स्रोत वृक्ष में कुछ भी नष्ट हो जाएगा?
  • कैसे पुनर्प्राप्त करें (एक आसान और तेज़ तरीके से)?

जवाबों:


8

मुझे लगता है कि infoपेज का परिचय आपके सभी सवालों का जवाब देता है:

यह पहले कुछ उसी कोड का उपयोग करता है जिसका उपयोग अनुरोधित निर्देशिकाओं और फ़ाइलों को कॉपी करने के लिए `cp -a 'द्वारा किया जाता है, फिर (प्रतिलिपि को सफल मानकर) यह मूल को हटा देता है। यदि प्रतिलिपि विफल हो जाती है, तो गंतव्य विभाजन पर कॉपी किया गया भाग हटा दिया जाता है। यदि आप तीन निर्देशिकाओं को एक विभाजन से दूसरे भाग में कॉपी करना चाहते थे और पहली निर्देशिका की प्रतिलिपि सफल रही, लेकिन दूसरी नहीं, पहली गंतव्य विभाजन पर छोड़ दी जाएगी और दूसरी और तीसरी मूल विभाजन पर छोड़ दी जाएगी।

डेटा के संरक्षित होने के बाद रिकवरी की समस्या नहीं होनी चाहिए। मुझे नहीं पता कि यह परमाणु होने की कितनी कोशिश करता है ( mkdirउदाहरण के लिए; स्रोत निरीक्षण की आवश्यकता है) या यदि यह अपने डोमेन में (बनाम कर्नेल) है, लेकिन भ्रष्टाचार हो सकता है अगर रुकावट तब होती है जब यह पहले से ही हटा रहा है स्रोत। उस बिंदु पर आपके पास पहले से ही लक्ष्य निर्देशिका में एक अच्छी प्रतिलिपि होगी, इसलिए एक साधारण बाइट आकार की जांच चाल कर सकती है।

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


1
जानकारी पृष्ठ के बारे में, क्या मैं इसे सही समझता हूं कि प्रत्येक कमांड लाइन स्रोत निर्देशिका के लिए, यदि संबंधित प्रतिलिपि सफल हुई तो इसे हटा दिया जाता है? मेरा मतलब है कि mv src1 src2 dstइस संबंध में काम करता है mv src1 dst; mv src2 dstऔर हर एक mv src dstकी तरह है cp -a src dst && rm -rf src?
मआर्टिनस

1
यही कारण है कि मैं इसे भी समझता हूं (बस आपके mv mv && mv होंगे)। चूंकि cp -aपहले से ही पुनरावर्ती है, इसलिए मुझे संदेह है कि यह पेड़ पर चढ़ने के दौरान मिली व्यक्तिगत फाइलों और निर्देशिकाओं पर लागू होता है। बाद में कुछ परीक्षण करेंगे।
lynxlynxlynx

12

जब mv एक अलग फाइल सिस्टम में जा रहा होता है, तो यह सबसे पहले सभी डेटा को नए फाइल सिस्टम में कॉपी करता है। नया डेटा कॉपी होने के बाद, यह पुराने डेटा को हटा देता है। इसका मतलब है कि यदि चाल विफल हो जाती है, तो स्रोत स्थान में अभी भी सभी डेटा होना चाहिए।

जहां तक ​​ठीक होने की बात है, केवल गंतव्य डेटा भ्रष्ट होना चाहिए। फिर से mv का उपयोग करने के बजाय, बस rsync का उपयोग करें और फिर मैन्युअल रूप से rm का उपयोग करें

rsync -av source-dir/ dest-dir/
rm -rf source-dir
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.