क्या प्रतिलिपि के दौरान एससीपी को प्रतीकात्मक लिंक को अनदेखा करना संभव है?


80

मैं हमारे सर्वरों में से एक को पुनर्स्थापित करने की जरूरत है, और एक एहतियात के रूप में, मैं ले जाना चाहते हैं /home, /etc, /opt, और /Servicesबैकअप सर्वर से।

हालाँकि, मुझे एक समस्या है: बहुत सारे प्रतीकात्मक लिंक के कारण कई बार बहुत सारी फाइलें कॉपी हो जाती हैं।

क्या scpप्रतीकात्मक लिंक (या वास्तव में लिंक को एक निर्देशिका या फ़ाइल के रूप में लिंक के रूप में कॉपी करना) को अनदेखा करना संभव है ? यदि नहीं, तो क्या ऐसा करने का एक और तरीका है?

जवाबों:


82

मुझे पता था कि यह संभव था, मैंने सिर्फ गलत टूल लिया। मैंने इसे rsync के साथ किया

rsync --progress -avhe ssh /usr/local/  XXX.XXX.XXX.XXX:/BackUp/usr/local/

1
तो यह क्या आदेश देता है? क्या यह सहानुभूति को अनदेखा करता है या नए बनाता है? -वह?
अर्नेस्टस स्टैंकेविसियस

3
aसंग्रह है (चीजों को संरक्षित करता है), vक्रिया, hमानव पठनीय आउटपुट, eउस सेवा को निर्दिष्ट करें जिसका आप उपयोग करना चाहते हैं (इस मामले में यह ssh)। यहाँ
चुपचाप

धन्यवाद। पुराना सर्वर mothballed किया जा रहा है। नए सर्वर को सामग्री की आवश्यकता है। सभी सॉफ्ट-लिंक खो दिए, लेकिन बहुत से टूट गए थे, इसलिए यह अब नए सर्वर पर धीमा रखरखाव कार्य होगा। एक बार फिर धन्यवाद।
jlettvin

1
- सुरक्षित-लिंक उन लिंक्स को संरक्षित करने की अनुमति देता है जो निर्देशिका के अंदर हैं और उन लोगों की प्रतिलिपि नहीं बनाते हैं जो इसके बाहर इंगित करते हैं।
कॉलिन पित्रत

29

मैंने पाया है कि विधि मेरे लिए काम नहीं किया, लेकिन मैं एक विकल्प है कि इस वेबसाइट (पर काम किया है पाया www.docstore.mik.ua/orelly )।rsync

विशेष रूप से "ओ'रेली: एसएसएच: द सिक्योर शेल। द डेफिनिटिव गाइड" का खंड 7.5.3

7.5.3 है। निर्देशिकाएँ की पुनरावर्ती प्रतिलिपि

...

हालाँकि scp डायरेक्टरीज़ को कॉपी कर सकता है, लेकिन जरूरी नहीं कि यह सबसे अच्छा तरीका हो। यदि आपकी निर्देशिका में हार्ड लिंक या सॉफ्ट लिंक हैं, तो उन्हें डुप्लिकेट नहीं किया जाएगा। लिंक को सादे फ़ाइलों (लिंक लक्ष्य) के रूप में कॉपी किया जाता है, और बदतर, परिपत्र निर्देशिका लिंक scp1 को अनिश्चित काल के लिए लूप के कारण बनाते हैं। (scp2 प्रतीकात्मक लिंक का पता लगाता है और इसके बजाय उनके लक्ष्यों को कॉपी करता है।) अन्य प्रकार की विशेष फाइलें, जैसे नामांकित पाइप, भी सही तरीके से कॉपी नहीं की जाती हैं। बेहतर समाधान टार का उपयोग करना है, जो विशेष फाइलों को सही ढंग से संभालता है, और इसे रिमोट पर भेजता है। SSH के माध्यम से मशीन को अनट्रेड किया जाना है:

$ tar cf - /usr/local/bin | ssh server.example.com tar xf -

1
यह एक अच्छा सुझाव है अगर rsync को दूरस्थ छोर पर स्थापित नहीं किया गया है, या (थोड़े संशोधन के साथ) यदि आप स्रोत निर्देशिका के पहले से ही एक टैरबॉल है।
ट्रेबोर रूड

1
गंतव्य पर अनुमतियों को संरक्षित करने के लिए इसे "पी" (टार xpf) की आवश्यकता होती है।
पॉल लिंच

एक नोट, इस आदेश को स्रोत कंप्यूटर से चलाया जाना चाहिए , लक्ष्य कंप्यूटर में फ़ाइलों को धकेलना । मेरे मामले के लिए (कई छोटी, असम्पीडित फ़ाइलें), इसने बेहतर और तेजी से काम किया या । scprsync
गेरार्डो लीमा

एक अनुवर्ती प्रश्न: स्रोत की ओर, क्या टार कमांड दूरस्थ रूप से स्थानांतरित होने से पहले, टारबॉल डेटा को स्थानीय रूप से संग्रहीत करता है? [स्रोत डिस्क लगभग पूर्ण होने पर यह एक समस्या होगी - 98% पूर्ण कहो]
जंगल संपादक

18

प्रेषक और रिसीवर दोनों का उपयोग करने के tarसाथ- sshसाथ चाल भी होती है:

cd $DEST_DIR
ssh user@remote-host 'cd $REMOTE_SRC_DIR; tar cf - ./' | tar xvf -

मैंने अनुमतियाँ संरक्षित करने के लिए स्रोत की ओर --one-file-systemऔर गंतव्य पक्ष में जोड़ा p
9

टार के लिए मैन पेज कहता है; -ऑन-फाइल-सिस्टम = माउंट पॉइंट्स को पार न करें
ऐनी

2

एक समाधान एक शेल पाइप का उपयोग करना है। मेरे पास एक ऐसी स्थिति है जहां मुझे कुछ * .gz फाइलें और कुछ सॉफ्टवेयर द्वारा उत्पन्न प्रतीकात्मक लिंक समान * .zz फाइलों के लिए थोड़े छोटे नाम से लिंक करने के लिए मिलते हैं। अगर मैं बस एससीपी का उपयोग करता हूं, तो प्रतीकात्मक लिंक को नियमित फ़ाइलों के रूप में कॉपी किया जाएगा और जिसके परिणामस्वरूप डुप्लिकेट होंगे। मुझे पता है कि rsync प्रतीकात्मक लिंक को अनदेखा कर सकता है, लेकिन मेरी gz फाइलें सिंक करने योग्य विकल्पों के साथ संपीड़ित नहीं होती हैं, और इन gz फ़ाइलों को कॉपी करने में सिंक बहुत धीमा होता है। इसलिए मैं फ़ाइलों पर प्रतिलिपि बनाने के लिए बस निम्न स्क्रिप्ट का उपयोग करता हूं:

find . -type f -exec scp {} target_host:/directory/name/data \;

-F विकल्प केवल नियमित फ़ाइलों को मिलेगा और प्रतीकात्मक लिंक को अनदेखा करेगा। आपको यह आदेश स्रोत होस्ट पर देने की आवश्यकता है। आशा है कि यह मेरी स्थिति में कुछ उपयोगकर्ता की मदद कर सकता है। मुझे कुछ भी याद हो तो बताएं।


0

एक लाइनर समाधान जिसे टार + ssh कमांड का उपयोग करके सर्वर से फ़ोल्डर की प्रतिलिपि बनाने के लिए क्लाइंट पर निष्पादित किया जा सकता है।

ssh user@<Server IP/link> 'mkdir -p <Remote destination directory;cd <Remote destination directory>; tar cf - ./' | tar xf - C <Source destination directory>

नोट: mkdir होना चाहिए, यदि दूरस्थ गंतव्य निर्देशिका मौजूद नहीं है, तो कमांड केवल दूरस्थ सर्वर के पूरे घर को संपीड़ित करेगा और इसे ग्राहक को देगा।

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