क्या mv
कमांड के साथ 180GB के साथ फ़ोल्डर का नाम बदलना जोखिम भरा है ?
हमारे पास एक फ़ोल्डर /data
है जिसमें 180GB है।
हम कमांड के साथ /data
फ़ोल्डर का नाम बदलना चाहते हैं ।/BD_FILES
mv
क्या ऐसा करना सुरक्षित है?
क्या mv
कमांड के साथ 180GB के साथ फ़ोल्डर का नाम बदलना जोखिम भरा है ?
हमारे पास एक फ़ोल्डर /data
है जिसमें 180GB है।
हम कमांड के साथ /data
फ़ोल्डर का नाम बदलना चाहते हैं ।/BD_FILES
mv
क्या ऐसा करना सुरक्षित है?
जवाबों:
किसी फ़ोल्डर पर नाम बदलना सुरक्षित है, अगर वह उसी फ़ाइल सिस्टम में रहता है।
यदि यह एक आरोह बिंदु है ( /data
थोथा ऐसा लग रहा है कि यह मेरे लिए एक आरोह बिंदु हो सकता है, तो इसके साथ जांच करें mount
), तो आपको केवल एक सरल के अलावा कुछ करने की आवश्यकता है mv
क्योंकि mv /data /BD_FILES
डेटा को रूट विभाजन में ले जाया जाएगा (जो नहीं हो सकता है तुम चाहते हो)।
आपको फ़ाइल सिस्टम को अनमाउंट करना चाहिए, अब खाली निर्देशिका का नाम बदलना चाहिए, /etc/fstab
इस फाइल सिस्टम के लिए नए स्थान के साथ अपडेट करना चाहिए , और फिर नामांकित स्थान पर फाइल सिस्टम को रिमाउंट करना चाहिए।
दूसरे शब्दों में,
umount /data
mv /data /BD_FILES
(यह मानते हुए /BD_FILES
कि पहले से मौजूद नहीं है, उस स्थिति में इसे पहले से बाहर ले जाएँ)/etc/fstab
, से माउंट बिंदु को बदलने के /data
लिए/BD_FILES
mount /BD_FILES
इसमें किसी भी फाइल को कॉपी करना शामिल नहीं है, यह सिर्फ उस डायरेक्टरी का नाम बदलता है जो फाइल सिस्टम के लिए आरोह बिंदु के रूप में कार्य करता है।
यदि निर्देशिका का नाम बदलने में इसे एक नई फ़ाइल प्रणाली में स्थानांतरित करना शामिल है (जो /data
एक डिस्क पर है, जबकि /BD_FILES
दूसरी डिस्क पर है, तो एक सामान्य बात यह है कि यदि आप चीजों को एक बड़े विभाजन में स्थानांतरित कर रहे हैं, तो उदाहरण के लिए) , जब तक आप जाँच नहीं कर सकते कि मैं कॉपी को ठीक कर रहा हूँ, तब तक मूल बरकरार रखते हुए डेटा कॉपी करने की सलाह दूंगा। आप इसके साथ कर सकते हैं
rsync -a /data/ /BD_FILES/
उदाहरण के लिए, लेकिन rsync
यह क्या करता है और क्या नहीं करता है इसके लिए मैनुअल देखें (उदाहरण के लिए, यह हार्ड लिंक को संरक्षित नहीं करता है)।
एक बार जब फ़ोल्डर का नाम बदल दिया जाता है, तो आपको यह भी सुनिश्चित करना होगा कि मौजूदा प्रक्रियाएं (प्रोग्राम और उपयोगकर्ता फ़ोल्डर, बैकअप आदि का उपयोग कर रहे हैं) नाम परिवर्तन के बारे में जानते हैं।
mv
करने की उम्मीद है rename
, लेकिन परिस्थितियों के कारण किसी को एहसास नहीं हुआ कि यह फाइलों को कॉपी करने और मूल को हटाने की कोशिश कर रहा है। अगर मुझे पूरी तरह से निश्चित होने की जरूरत है तो एक rename
सिस्टम कॉल किया जाता है और mv
मेरी पीठ के पीछे "चतुर" कुछ करने की ज़रूरत नहीं है, मैं पायथन खोल और उपयोग करता हूं os.rename
।
mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
rsync
यह है कि यह पुनरारंभ करने योग्य है।
rsync -a
लगभग सभी मेटाडेटा को संरक्षित करता है, लेकिन कड़ी नहीं, एसीएल या विस्तारित विशेषताएँ ( -HAX
उस के लिए जोड़ें )।
rename
अलग व्यवहार के साथ अलग- अलग कमांड होते हैं। मुझे लगता है कि rename
जब आप कुछ करने जा रहे हैं तो आप निश्चित होना चाहते हैं कि कमांड का उपयोग न करने के लिए पर्याप्त कारण है ।
आप निर्देशिका में प्रत्येक फ़ाइल का नाम नहीं बदल रहे हैं, आप एक फ़ाइल को / में बदल रहे हैं । ऐसा इसलिए है क्योंकि:
इस प्रकार, एक निर्देशिका का नाम बदलना, चाहे कितनी भी फाइलें हों या उसमें कितना भी डेटा हो, तुच्छ है।
यदि आप सिर्फ नाम बदलते हैं ( समान फ़ाइल सिस्टम में स्रोत और लक्ष्य ), तो यह बस एक निर्देशिका प्रविष्टि का नाम है। यह या तो सफल होता है और निर्देशिका का नया नाम होता है, या विफल रहता है जिस स्थिति में कुछ भी नहीं बदलता है * ।
यदि स्रोत और लक्ष्य अलग-अलग फ़ाइल सिस्टम पर हैं, तो डेटा को कॉपी करने की आवश्यकता है mv
। फ़ाइल सिस्टम सुविधाओं में अंतर, जैसे अधिकतम फ़ाइल आकार, फ़ाइल नाम में सीमाएं, आदि, समस्याएं पैदा कर सकते हैं। समस्याओं से बचने के लिए, पहले फ़ाइलों की प्रतिलिपि बनाएँ ( cp
, rsync
…,) और प्रतिलिपि सफलतापूर्वक पूर्ण होने के बाद, मूल स्थान में फ़ाइलों को हटा दें।
* हालांकि कुछ कोने के मामले हैं, उदाहरण के लिए आदमी 2 नाम में BUGS अनुभाग में उल्लेख किया गया है
जैसा कि दूसरों ने कहा है, एक फ़ोल्डर का नाम बदलने से सामग्री के लिए कोई अंतर्निहित जोखिम नहीं होता है। लेकिन एक अलग तरह का जोखिम है जिस पर आप विचार कर सकते हैं।
मौजूदा प्रक्रियाओं, लिपियों, उपयोगकर्ता-परिभाषित शॉर्टकट, और कॉन्फ़िगरेशन जो मूल स्थान को संदर्भित करते हैं, इस परिवर्तन से टूट सकते हैं, और यदि पथ डेटाबेस में संग्रहीत किए जाते हैं, उदाहरण के लिए, उन्हें अपडेट करना एक बड़ा काम हो सकता है।
एक चीज जो आप कर सकते हैं, वह नई निर्देशिका नाम के लिए एक प्रतीकात्मक लिंक है, लेकिन पुराने नाम को थोड़ी देर के लिए छोड़ दें। इस बदलाव के प्रभाव का मूल्यांकन करने के लिए आपको समय मिलेगा। आप पुराने नाम को अस्थायी रूप से हटा सकते हैं, देख सकते हैं कि क्या कोई समस्या है, और यदि हैं, तो बस पुराने नाम को फिर से बनाएँ ताकि लोग काम करना जारी रख सकें, जब आपको पता चल जाए कि क्या अद्यतन करने की आवश्यकता है।
एक कमांड कुछ इस तरह से करना चाहिए:
ln -s /data /BD_FILES
mv thing1 thing2 ; ln --symbolic ./thing2 thing1
। इस तरह से मुझे नया नाम मिल गया है और आसानी से पुराने की अनुपस्थिति को सिमलिंक हटाकर परीक्षण कर सकते हैं।
नाम परमाणु है। एकमात्र उचित जोखिम यह है कि mv
किसी कारण के लिए सब कुछ कॉपी करने का फैसला करता है और आधे रास्ते से दुर्घटनाग्रस्त हो जाता है। यदि आपके पास जीएनयू है mv
, तो mv -T
इस जोखिम को हटा देगा।
mv -T
बताता है mv
कि यह एक गैर-फ़ोल्डर में जा रहा है; जिसके कारण इसे करने से मना कर दिया mkdir()
जाएगा जो बदले में एक फ़ोल्डर ले जाने पर विफल हो जाएगा और इसने किसी कारण से कॉपी करने का निर्णय लिया।
मैं mv -T
सालों पहले अपने गुरु की थीसिस पर काम करने के दौरान बग को हिलाने में शामिल था। यह बहुत सारे किनारे के मामलों पर गलत काम करता था।
दूसरी ओर, आपके पास रूट विभाजन पर 180GB उपयोगकर्ता डेटा है। आप शायद इसे रूट विभाजन से दूर करना चाहते हैं।
mv
तो-i
विकल्प के साथ कॉल करें ।