rsync और प्रतीकात्मक लिंक


69

मैं अपने घर की निर्देशिका को बैकअप cronकरने के लिए नौकरी का उपयोग करके रात में एक बाहरी ड्राइव पर बैकअप करना चाहता हूं rsync। मैं rsyncप्रतीकात्मक लिंक झंडे के सटीक व्यवहार के बारे में अनिश्चित हूं ।

  1. rsyncके -aझंडे में झंडा भी शामिल है -l(यानी "सहानुभूति के रूप में प्रतिलिपि बनाएँ")। क्या इसका मतलब यह है कि यह लिंक की नकल करेगा या यह लिंक का अनुसरण करेगा और लिंक-इन डायरेक्टरी में सब कुछ कॉपी करेगा? मैं इससे बचना चाहता हूं क्योंकि मेरे पास मीडिया फ़ाइलों से भरी निर्देशिकाओं के लिंक हैं जिनमें सैकड़ों गीगाबाइट की नकल शामिल होगी जिन्हें मुझे बैकअप लेने की आवश्यकता नहीं है।
  2. डरना (लेकिन कुछ निश्चित नहीं) जो rsync -aउन सभी मीडिया फ़ाइलों को कॉपी कर लेगा जिनके बजाय मैंने --no-linksध्वज जोड़ा था । मुझे वह व्यवहार नहीं लगता जो मैं चाहता हूं। यह सिर्फ किसी भी लिंक की नकल करने पर ध्यान नहीं देता है जो कि समस्याग्रस्त है क्योंकि मेरे पास ऐसे लिंक हैं जिन्हें मैं कॉपी करना चाहता हूं (जैसे विभिन्न प्रोजेक्ट निर्देशिकाओं से आम हेडर फ़ाइलों के लिंक)।
  3. # 1 ऊपर ( --no-linksध्वज के बिना ) यह मान लेना कि मैं वास्तव में क्या चाहता हूं और यह लिंक से जुड़ी फाइलों को कॉपी किए बिना लिंक को कॉपी करता है, क्या वे बैकअप लेने पर टूट जाएंगे? उदाहरण के लिए, मैं rsyncनिर्देशिका /home/me/projects/miscको स्रोत कर सकता हूं /media/extdrive/backup/home/me/projects/misc। इस मामले में मुझे लगता rsyncहै कि यह बहुत स्मार्ट नहीं है और न ही यह सापेक्ष निर्देशिका परिवर्तनों के लिए सहानुभूति की सामग्री को सही करने का प्रयास करता है। क्या ये सही है? यह ठीक है, इससे कोई फर्क नहीं पड़ता कि लिंक बैकअप निर्देशिका में टूटे हुए हैं जब तक कि वे ठीक हो जाएंगे और काम करेंगे यदि ऐसा समय आता है तो उन्हें पुनर्स्थापित करने की आवश्यकता होती है।

3
-L झंडा शायद आप चाहते हैं। Centos Linux पर rsync मैन पेज से: "-L, --copy- लिंक सीलिंक को रेफ़रेंट फ़ाइल /ir में बदल देते हैं।" मैं यह सुनिश्चित करने के लिए कुछ नमूना निर्देशिकाओं और लिंक के साथ परीक्षण करने की सलाह देता हूं कि आप किसी भी डेटा को अधिलेखित नहीं करते हैं जिसे आप करना नहीं चाहते हैं। संभव डेटा हानि के बारे में चेतावनी शामिल करने के लिए संपादित। ;)
मिक टी

जवाबों:


90
  1. "सहानुभूति के रूप में सहानुभूति की नकल करें" का अर्थ है कि वास्तव में यह क्या कहता है: यदि rsync स्रोत निर्देशिका में एक सिमलिंक देखता है, तो यह गंतव्य में एक समान सिम्लिंक पैदा करेगा। और कुछ नहीं।

    (मैनुअल पेज में कुछ लाइनें नीचे, एक अलग विकल्प, --copy-linksविपरीत व्यवहार (हमेशा डेटा की नकल करना) का वर्णन करता है जिसे आपने अवांछनीय बताया था।)

    अनुभाग भी देखें "प्रतीकात्मक लिंक":

    यदि --linksनिर्दिष्ट किया गया है, तो गंतव्य पर समान लक्ष्य के साथ सीमलिंक को फिर से बनाया गया है।

  2. यह वह व्यवहार नहीं है जो आप चाहते हैं क्योंकि आप --linksगलत व्यवहार कर रहे हैं और इसलिए गलत व्यवहार पूछ रहे हैं (उत्तर # 1 देखें)।

  3. डिफ़ॉल्ट रूप से, यह गंतव्य को बिल्कुल कॉपी करता है।

    यदि लिंक एक निरपेक्ष पथ (जैसे /home/me/projects) को इंगित करता है, तो यह उसी पथ की ओर इशारा करता रहेगा; यह नहीं टूटेगा , यह आपके बैकअप में एक के बजाय आपके होम डायरेक्टरी में एक फ़ाइल की ओर इशारा करता रहेगा।

    इस बीच, यदि लिंक एक रिश्तेदार पथ (उदाहरण के लिए की ओर इशारा किया ../../projectsहै), यह करेंगे भी उसी रास्ते की ओर इशारा करते जारी है, लेकिन क्योंकि यह सिमलिंक के स्थान के सापेक्ष है, अपने बैकअप में सिमलिंक भी अपने बैकअप में एक फ़ाइल की ओर इशारा करते हो जाएगा।

    दुर्भाग्य से उनके नए आधार के लिए पूर्ण सिम्बलिंक का अनुवाद करने का कोई विकल्प प्रतीत नहीं होता (केवल उन्हें पूरी तरह से तोड़ने का विकल्प)। समस्याओं से बचने के लिए, आपको मौजूदा सिम्बलिंक को सापेक्ष लोगों में बदलना चाहिए (जो आमतौर पर एक अच्छा विचार है, $ HOME के ​​लिंक के लिए)।


2
ummm तो क्या अंतर है --copy-linksऔर --links?
अलेक्जेंडर मिल्स

--copy-links= -L, और --links= -l। मेरे उत्तर में प्रलेखन से विवरण देखें: superuser.com/a/1388910/425838
गेब्रियल स्टेपल्स

12

@grawity का शानदार उत्तर है, लेकिन यहां दस्तावेज़ीकरण से संबंधित कुछ प्रासंगिक जानकारी का स्क्रीनशॉट है। उदाहरण के लिए, विकल्पों -lऔर -Lविकल्पों का सटीक क्रम यहां दिया जा रहा है, जो प्रश्न में सबसे अधिक प्रासंगिक प्रतीत होते हैं:

यहाँ छवि विवरण दर्ज करें

स्रोत: https://linux.die.net/man/1/rsync , या man rsyncलिनक्स पर मैनुअल पेज।

यह भी ध्यान दें कि -a( --archive) विकल्प में इसके -lभीतर का विकल्प भी शामिल है, जो कि बहुत बढ़िया है, क्योंकि मैं वास्तव -lमें गंतव्य पर सहानुभूति के रूप में स्रोत से अपनी सहानुभूति को संरक्षित करने के विकल्प का उपयोग करना पसंद करता हूं। आदमी पृष्ठों से:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

ध्यान दें, मेरे पसंदीदा rsyncआदेशों और निर्देशों के लिए, जिसमें कॉपी करना, मिरर करना, कुल प्रगति दिखाना शामिल है ...

... सूखी रनिंग करना, स्टाडर और स्टडआउट को (अलग) फ़ाइलों को लॉग करना, आंकड़े दिखाना, एक शामिल पथ फ़ाइल और एक बहिष्कृत फ़ाइल आदि का उपयोग करके, 2 खंड के तहत यहां मेरा पूरा उत्तर देखें, जिसका शीर्षक है " 2. rsync कमांड-लाइन उपकरण (लिनक्स, सिगविन के साथ विंडोज) ": https://superuser.com/a/1464264/425838

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