एक विशाल फ़ोल्डर का नाम बदलना: क्या यह जोखिम भरा है?


19

क्या mvकमांड के साथ 180GB के साथ फ़ोल्डर का नाम बदलना जोखिम भरा है ?

हमारे पास एक फ़ोल्डर /dataहै जिसमें 180GB है।

हम कमांड के साथ /dataफ़ोल्डर का नाम बदलना चाहते हैं ।/BD_FILESmv

क्या ऐसा करना सुरक्षित है?


14
यह जोखिम भरा क्यों और कैसे होना चाहिए? यदि आप अनिश्चित हैं, mvतो -iविकल्प के साथ कॉल करें ।
मिठाई

5
क्या आपके वातावरण में ऐसा कुछ है जो आपको लगता है कि यह जोखिम भरा हो सकता है?
जेफ स्कालर

2
क्या आपका मतलब है कि क्या कोई जोखिम है जो स्वयं में और समस्या का कारण बन सकता है, या क्या कोई जोखिम है कि समस्याग्रस्त प्रभाव हो सकता है? यदि आपके पास कोई प्रोग्राम है जो वहाँ एक / डेटा फ़ोल्डर होने की उम्मीद कर रहे हैं, तो उसका नाम बदलने से समस्याएं हो सकती हैं।
२३:४

3
साइड-नोट: यदि आपने बैकअप का सत्यापन कर लिया है तो लगभग सब कुछ सुरक्षित है। कुछ भी उतना सुरक्षित नहीं है जितना कि आपको होना चाहिए। दूसरे शब्दों में: "यह सुरक्षित है" पूछते समय, आपका पहला विचार "क्या मैंने अपना बैकअप सत्यापित कर लिया है?"
RedGrittyBrick

2
मेरा मतलब है कि जोखिम, जो इस ओएस द्वारा डेटा के साथ विशाल फ़ोल्डर को स्थानांतरित करने में समस्याग्रस्त हो सकता है, उदाहरण के लिए बीच में चलते हुए या ढीले डेटा को रोक सकता है
येल

जवाबों:


71

किसी फ़ोल्डर पर नाम बदलना सुरक्षित है, अगर वह उसी फ़ाइल सिस्टम में रहता है।


यदि यह एक आरोह बिंदु है ( /dataथोथा ऐसा लग रहा है कि यह मेरे लिए एक आरोह बिंदु हो सकता है, तो इसके साथ जांच करें mount), तो आपको केवल एक सरल के अलावा कुछ करने की आवश्यकता है mvक्योंकि mv /data /BD_FILESडेटा को रूट विभाजन में ले जाया जाएगा (जो नहीं हो सकता है तुम चाहते हो)।

आपको फ़ाइल सिस्टम को अनमाउंट करना चाहिए, अब खाली निर्देशिका का नाम बदलना चाहिए, /etc/fstabइस फाइल सिस्टम के लिए नए स्थान के साथ अपडेट करना चाहिए , और फिर नामांकित स्थान पर फाइल सिस्टम को रिमाउंट करना चाहिए।

दूसरे शब्दों में,

  1. umount /data
  2. mv /data /BD_FILES(यह मानते हुए /BD_FILESकि पहले से मौजूद नहीं है, उस स्थिति में इसे पहले से बाहर ले जाएँ)
  3. अद्यतन /etc/fstab, से माउंट बिंदु को बदलने के /dataलिए/BD_FILES
  4. mount /BD_FILES

इसमें किसी भी फाइल को कॉपी करना शामिल नहीं है, यह सिर्फ उस डायरेक्टरी का नाम बदलता है जो फाइल सिस्टम के लिए आरोह बिंदु के रूप में कार्य करता है।


यदि निर्देशिका का नाम बदलने में इसे एक नई फ़ाइल प्रणाली में स्थानांतरित करना शामिल है (जो /dataएक डिस्क पर है, जबकि /BD_FILESदूसरी डिस्क पर है, तो एक सामान्य बात यह है कि यदि आप चीजों को एक बड़े विभाजन में स्थानांतरित कर रहे हैं, तो उदाहरण के लिए) , जब तक आप जाँच नहीं कर सकते कि मैं कॉपी को ठीक कर रहा हूँ, तब तक मूल बरकरार रखते हुए डेटा कॉपी करने की सलाह दूंगा। आप इसके साथ कर सकते हैं

rsync -a /data/ /BD_FILES/

उदाहरण के लिए, लेकिन rsyncयह क्या करता है और क्या नहीं करता है इसके लिए मैनुअल देखें (उदाहरण के लिए, यह हार्ड लिंक को संरक्षित नहीं करता है)।


एक बार जब फ़ोल्डर का नाम बदल दिया जाता है, तो आपको यह भी सुनिश्चित करना होगा कि मौजूदा प्रक्रियाएं (प्रोग्राम और उपयोगकर्ता फ़ोल्डर, बैकअप आदि का उपयोग कर रहे हैं) नाम परिवर्तन के बारे में जानते हैं।


9
जोखिम है कि एक को सिस्टम कॉल mvकरने की उम्मीद है rename, लेकिन परिस्थितियों के कारण किसी को एहसास नहीं हुआ कि यह फाइलों को कॉपी करने और मूल को हटाने की कोशिश कर रहा है। अगर मुझे पूरी तरह से निश्चित होने की जरूरत है तो एक renameसिस्टम कॉल किया जाता है और mvमेरी पीठ के पीछे "चतुर" कुछ करने की ज़रूरत नहीं है, मैं पायथन खोल और उपयोग करता हूं os.rename
कैसपर्ड

3
अपेक्षाकृत हाल ही में लिनक्स कर्नेल के बजाय आप आरोह बिंदु को स्थानांतरित कर सकते हैं:mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
डेविड फोस्टरस्टर

2
@ मिचेल जॉनसन शायद लिनक्स सिस्टम पर काम करेंगे, हां। के साथ साफ बात rsyncयह है कि यह पुनरारंभ करने योग्य है।
Kusalananda

3
@ मिचेल जॉनसन एक उपकरण का उपयोग करता है जो एक सबसे आरामदायक है, जाहिर है। हां, rsync -aलगभग सभी मेटाडेटा को संरक्षित करता है, लेकिन कड़ी नहीं, एसीएल या विस्तारित विशेषताएँ ( -HAXउस के लिए जोड़ें )।
Kusalananda

3
@ मैक्स विभिन्न वितरणों में अलग- renameअलग व्यवहार के साथ अलग- अलग कमांड होते हैं। मुझे लगता है कि renameजब आप कुछ करने जा रहे हैं तो आप निश्चित होना चाहते हैं कि कमांड का उपयोग न करने के लिए पर्याप्त कारण है ।
कास्परड सिप

16

आप निर्देशिका में प्रत्येक फ़ाइल का नाम नहीं बदल रहे हैं, आप एक फ़ाइल को / में बदल रहे हैं । ऐसा इसलिए है क्योंकि:

  1. निर्देशिका फ़ाइलें हैं, और
  2. फ़ाइल सिस्टम वास्तव में इनकोड की परवाह करता है, वास्तविक टेक्स्ट की नहीं।

इस प्रकार, एक निर्देशिका का नाम बदलना, चाहे कितनी भी फाइलें हों या उसमें कितना भी डेटा हो, तुच्छ है।


14

यदि आप सिर्फ नाम बदलते हैं ( समान फ़ाइल सिस्टम में स्रोत और लक्ष्य ), तो यह बस एक निर्देशिका प्रविष्टि का नाम है। यह या तो सफल होता है और निर्देशिका का नया नाम होता है, या विफल रहता है जिस स्थिति में कुछ भी नहीं बदलता है *

यदि स्रोत और लक्ष्य अलग-अलग फ़ाइल सिस्टम पर हैं, तो डेटा को कॉपी करने की आवश्यकता है mv। फ़ाइल सिस्टम सुविधाओं में अंतर, जैसे अधिकतम फ़ाइल आकार, फ़ाइल नाम में सीमाएं, आदि, समस्याएं पैदा कर सकते हैं। समस्याओं से बचने के लिए, पहले फ़ाइलों की प्रतिलिपि बनाएँ ( cp, rsync…,) और प्रतिलिपि सफलतापूर्वक पूर्ण होने के बाद, मूल स्थान में फ़ाइलों को हटा दें।

* हालांकि कुछ कोने के मामले हैं, उदाहरण के लिए आदमी 2 नाम में BUGS अनुभाग में उल्लेख किया गया है


> "यह या तो सफल होता है और निर्देशिका का नया नाम होता है, या विफल रहता है जिस स्थिति में कुछ भी नहीं बदलता है"। इसकी गारंटी कैसे है? क्या यह सभी फाइल सिस्टम के लिए सही है? क्या इसके बारे में कोई दस्तावेज हैं?
पगड़ी बांधकर

नाम बदलना एक एकल syscall है, हालांकि आदमी के नाम के BUGS अनुभाग में NFS के बारे में एक नोट है : NFS का उपयोग करते समय त्रुटि वापस आने पर भी नाम बदल सकता है (मैन पेज में विवरण देखें)। मैंने जवाब में एक नोट भी जोड़ा। मैं कर्नेल में किसी भी फाइल सिस्टम से यह उम्मीद नहीं करता कि वह एक निर्देशिका प्रविष्टि के लिए स्वीकार्य है, जो गायब हो जाना चाहिए।
सीबस्थ

8

जैसा कि दूसरों ने कहा है, एक फ़ोल्डर का नाम बदलने से सामग्री के लिए कोई अंतर्निहित जोखिम नहीं होता है। लेकिन एक अलग तरह का जोखिम है जिस पर आप विचार कर सकते हैं।

मौजूदा प्रक्रियाओं, लिपियों, उपयोगकर्ता-परिभाषित शॉर्टकट, और कॉन्फ़िगरेशन जो मूल स्थान को संदर्भित करते हैं, इस परिवर्तन से टूट सकते हैं, और यदि पथ डेटाबेस में संग्रहीत किए जाते हैं, उदाहरण के लिए, उन्हें अपडेट करना एक बड़ा काम हो सकता है।

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

एक कमांड कुछ इस तरह से करना चाहिए: ln -s /data /BD_FILES


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

मुझे कुछ पसंद है mv thing1 thing2 ; ln --symbolic ./thing2 thing1। इस तरह से मुझे नया नाम मिल गया है और आसानी से पुराने की अनुपस्थिति को सिमलिंक हटाकर परीक्षण कर सकते हैं।
कैन-नेड_फूड

3

नाम परमाणु है। एकमात्र उचित जोखिम यह है कि mvकिसी कारण के लिए सब कुछ कॉपी करने का फैसला करता है और आधे रास्ते से दुर्घटनाग्रस्त हो जाता है। यदि आपके पास जीएनयू है mv, तो mv -Tइस जोखिम को हटा देगा।

mv -Tबताता है mvकि यह एक गैर-फ़ोल्डर में जा रहा है; जिसके कारण इसे करने से मना कर दिया mkdir()जाएगा जो बदले में एक फ़ोल्डर ले जाने पर विफल हो जाएगा और इसने किसी कारण से कॉपी करने का निर्णय लिया।

मैं mv -Tसालों पहले अपने गुरु की थीसिस पर काम करने के दौरान बग को हिलाने में शामिल था। यह बहुत सारे किनारे के मामलों पर गलत काम करता था।

दूसरी ओर, आपके पास रूट विभाजन पर 180GB उपयोगकर्ता डेटा है। आप शायद इसे रूट विभाजन से दूर करना चाहते हैं।


आप संभवतः अकेले नाम से नहीं बता सकते हैं कि कुछ "रूट विभाजन" में है या नहीं।
पीटर

@ पेटर: यदि यह रूट विभाजन पर नहीं है तो यह एक माउंटपॉइंट है। आप माउंट कमांड को mv कमांड से नाम नहीं दे सकते।
जोशुआ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.