rsync का अर्थ है रिमोट सिंक।
rsync का उपयोग UNIX / लिनक्स में बैकअप ऑपरेशन करने के लिए किया जाता है।
rsync उपयोगिता का उपयोग एक स्थान से दूसरे स्थान पर फ़ाइलों और निर्देशिकाओं को प्रभावी तरीके से सिंक्रनाइज़ करने के लिए किया जाता है। बैकअप स्थान स्थानीय सर्वर या रिमोट सर्वर पर हो सकता है।
rsync की महत्वपूर्ण विशेषताएं
- गति: पहली बार, rsync स्रोत और गंतव्य निर्देशिकाओं के बीच पूरी सामग्री को दोहराता है। अगली बार, rsync केवल बदले हुए ब्लॉक या बाइट्स को गंतव्य स्थान पर स्थानांतरित करता है, जो स्थानांतरण को वास्तव में तेज़ बनाता है।
- सुरक्षा: rsync स्थानांतरण के दौरान ssh प्रोटोकॉल का उपयोग करके डेटा के एन्क्रिप्शन की अनुमति देता है।
- कम बैंडविड्थ: rsync भेजने और प्राप्त करने वाले सिरे पर क्रमशः डेटा ब्लॉक द्वारा ब्लॉक के संपीड़न और असंपीड़न का उपयोग करता है। इसलिए rsync द्वारा उपयोग किया जाने वाला बैंडविड्थ अन्य फ़ाइल स्थानांतरण प्रोटोकॉल की तुलना में हमेशा कम होगा।
- विशेषाधिकार: rsync स्थापित और निष्पादित करने के लिए किसी विशेष विशेषाधिकार की आवश्यकता नहीं है
सिंटैक्स
$ rsync options source destination
स्रोत और गंतव्य या तो स्थानीय या रिमोट हो सकते हैं। रिमोट के मामले में, लॉगिन नाम, रिमोट सर्वर नाम और स्थान निर्दिष्ट करें।
उदाहरण 1. स्थानीय सर्वर में दो निर्देशिकाओं को सिंक्रनाइज़ करें
स्थानीय कंप्यूटर में दो निर्देशिकाओं को सिंक करने के लिए, निम्न rsync -zvr कमांड का उपयोग करें।
$ rsync -zvr /var/opt/installation/inventory/ /root/temp building file list ... done sva.xml svB.xml . sent 26385 bytes received 1098 bytes 54966.00 bytes/sec total size is 44867 speedup is 1.63 $
उपरोक्त rsync उदाहरण में:
- -z संपीड़न सक्षम करने के लिए
- -v वर्बोज़
- -r पुनरावर्ती को इंगित करता है
अब आइए उन फ़ाइलों में से एक पर टाइमस्टैम्प देखें जिसे स्रोत से गंतव्य पर कॉपी किया गया था। जैसा कि आप नीचे देख सकते हैं, rsync ने सिंक के दौरान टाइमस्टैम्प को संरक्षित नहीं किया।
$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml -r--r--r-- 1 bin bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml -r--r--r-- 1 root bin 949 Sep 2 2009 /root/temp/sva.xml
उदाहरण 2. rsync -a का उपयोग करके सिंक के दौरान टाइमस्टैम्प संरक्षित करें
rsync विकल्प -a आर्काइव मोड को इंगित करता है। -a विकल्प निम्न करता है,
- पुनरावर्ती मोड
- प्रतीकात्मक लिंक संरक्षित करता है
- अनुमतियाँ संरक्षित करता है
- टाइमस्टैम्प संरक्षित करता है
- स्वामी और समूह संरक्षित करता है
अब, उदाहरण 1 में प्रदान की गई समान कमांड निष्पादित करना (लेकिन rsync विकल्प -a के साथ) जैसा कि नीचे दिखाया गया है:
$ rsync -azv /var/opt/installation/inventory/ /root/temp/ building file list ... done ./ sva.xml svB.xml . sent 26499 bytes received 1104 bytes 55206.00 bytes/sec total size is 44867 speedup is 1.63 $
जैसा कि आप नीचे देख सकते हैं, rsync ने सिंक के दौरान टाइमस्टैम्प को संरक्षित किया।
$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml -r--r--r-- 1 root bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml -r--r--r-- 1 root bin 949 Jun 18 2009 /root/temp/sva.xml
उदाहरण 3. केवल एक फ़ाइल सिंक्रनाइज़ करें
केवल एक फ़ाइल कॉपी करने के लिए, rsync कमांड में फ़ाइल नाम निर्दिष्ट करें, जैसा कि नीचे दिखाया गया है।
$ rsync -v /var/lib/rpm/Pubkeys /root/temp/ Pubkeys sent 42 bytes received 12380 bytes 3549.14 bytes/sec total size is 12288 speedup is 0.99
उदाहरण 4. स्थानीय से रिमोट फ़ाइलें सिंक्रनाइज़ करें
rsync आपको स्थानीय और रिमोट सिस्टम के बीच फ़ाइलों/निर्देशिकाओं को सिंक्रनाइज़ करने की अनुमति देता है।
$ rsync -avz /root/temp/ thegeekstuff@192.168.200.10:/home/thegeekstuff/temp/ Password: building file list ... done ./ rpm/ rpm/Basenames rpm/Conflictname sent 15810261 bytes received 412 bytes 2432411.23 bytes/sec total size is 45305958 speedup is 2.87
रिमोट सर्वर के साथ सिंक्रनाइज़ेशन करते समय, आपको रिमोट सर्वर का उपयोगकर्ता नाम और आईपी-एड्रेस निर्दिष्ट करना होगा। आपको रिमोट सर्वर पर गंतव्य निर्देशिका भी निर्दिष्ट करनी चाहिए। प्रारूप है username@machinename:path
जैसा कि आप ऊपर देख सकते हैं, स्थानीय से रिमोट सर्वर पर rsync करते समय यह पासवर्ड मांगता है।
कभी-कभी आप स्थानीय से रिमोट सर्वर पर फ़ाइलों का बैकअप लेते समय पासवर्ड दर्ज नहीं करना चाहते। उदाहरण के लिए, यदि आपके पास एक बैकअप शेल स्क्रिप्ट है, जो rsync का उपयोग करके स्थानीय से रिमोट सर्वर पर फ़ाइलें कॉपी करती है, तो आपको पासवर्ड दर्ज किए बिना rsync करने की क्षमता की आवश्यकता होती है।
ऐसा करने के लिए, ssh पासवर्ड रहित लॉगिन सेटअप करें जैसा कि हमने पहले समझाया था।
उदाहरण 5. रिमोट से स्थानीय फ़ाइलें सिंक्रनाइज़ करें
जब आप रिमोट से स्थानीय फ़ाइलें सिंक्रनाइज़ करना चाहते हैं, तो स्रोत में रिमोट पथ और लक्ष्य में स्थानीय पथ निर्दिष्ट करें जैसा कि नीचे दिखाया गया है।
$ rsync -avz thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp Password: receiving file list ... done rpm/ rpm/Basenames . sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec total size is 45305958 speedup is 2.87
उदाहरण 6. सिंक्रनाइज़ेशन के लिए रिमोट शेल
rsync आपको उस रिमोट शेल को निर्दिष्ट करने की अनुमति देता है जिसका आप उपयोग करना चाहते हैं। आप सुरक्षित रिमोट कनेक्शन सक्षम करने के लिए rsync ssh का उपयोग कर सकते हैं।
कौन सा रिमोट शेल उपयोग करना है यह निर्दिष्ट करने के लिए rsync -e ssh का उपयोग करें। इस मामले में, rsync ssh का उपयोग करेगा।
$ rsync -avz -e ssh thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp Password: receiving file list ... done rpm/ rpm/Basenames sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec total size is 45305958 speedup is 2.87
उदाहरण 7. गंतव्य पर संशोधित फ़ाइलों को ओवरराइट न करें
एक सामान्य सिंक स्थिति में, यदि कोई फ़ाइल गंतव्य पर संशोधित है, तो हम उसे स्रोत से पुरानी फ़ाइल से ओवरराइट नहीं करना चाह सकते हैं।
ऐसा करने के लिए rsync -u विकल्प का उपयोग करें। (यानी गंतव्य पर फ़ाइल को ओवरराइट न करें, यदि यह संशोधित है)। निम्न उदाहरण में, Basenames नामक फ़ाइल पहले से ही गंतव्य पर संशोधित है। इसलिए, rsync -u के साथ इसे ओवरराइट नहीं किया जाएगा।
$ ls -l /root/temp/Basenames total 39088 -rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames $ rsync -avzu thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp Password: receiving file list ... done rpm/ sent 122 bytes received 505 bytes 114.00 bytes/sec total size is 45305958 speedup is 72258.31 $ ls -lrt total 39088 -rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames
उदाहरण 8. केवल निर्देशिका ट्री संरचना सिंक्रनाइज़ करें (फ़ाइलें नहीं)
स्रोत से गंतव्य तक केवल निर्देशिका ट्री को सिंक्रनाइज़ करने के लिए rsync -d विकल्प का उपयोग करें। नीचे दिया गया उदाहरण, केवल निर्देशिका ट्री को पुनरावर्ती तरीके से सिंक्रनाइज़ करता है, निर्देशिकाओं में फ़ाइलें नहीं।
$ rsync -v -d thegeekstuff@192.168.200.10:/var/lib/ . Password: receiving file list ... done logrotate.status CAM/ YaST2/ acpi/ sent 240 bytes received 1830 bytes 318.46 bytes/sec total size is 956 speedup is 0.46
उदाहरण 9. स्थानांतरण के दौरान rsync प्रगति देखें
जब आप बैकअप के लिए rsync का उपयोग करते हैं, तो आप बैकअप की प्रगति जानना चाह सकते हैं। यानी कितनी फ़ाइलें कॉपी की गईं, किस दर से फ़ाइल कॉपी हो रही है, आदि।
rsync –progress विकल्प rsync निष्पादन की विस्तृत प्रगति प्रदर्शित करता है जैसा कि नीचे दिखाया गया है।
$ rsync -avz --progress thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/ Password: receiving file list ... 19 files to consider ./ Basenames 5357568 100% 14.98MB/s 0:00:00 (xfer#1, to-check=17/19) Conflictname 12288 100% 35.09kB/s 0:00:00 (xfer#2, to-check=16/19) . . . sent 406 bytes received 15810211 bytes 2108082.27 bytes/sec total size is 45305958 speedup is 2.87
आप rsnapshot उपयोगिता (जो rsync का उपयोग करती है) का उपयोग स्थानीय लिनक्स सर्वर का बैकअप लेने के लिए, या रिमोट लिनक्स सर्वर का बैकअप लेने के लिए भी कर सकते हैं।
उदाहरण 10. गंतव्य पर बनी फ़ाइलों को हटाएं
यदि कोई फ़ाइल स्रोत पर मौजूद नहीं है, लेकिन गंतव्य पर मौजूद है, तो आप rsync के दौरान गंतव्य पर फ़ाइल को हटाना चाह सकते हैं।
उस स्थिति में, नीचे दिखाए अनुसार –delete विकल्प का उपयोग करें। rsync delete विकल्प उन फ़ाइलों को हटा देता है जो स्रोत निर्देशिका में नहीं हैं।
# स्रोत और लक्ष्य सिंक में हैं। अब लक्ष्य पर नई फ़ाइल बना रहे हैं। $ > new-file.txt $ rsync -avz --delete thegeekstuff@192.168.200.10:/var/lib/rpm/ . Password: receiving file list ... done deleting new-file.txt ./ sent 26 bytes received 390 bytes 48.94 bytes/sec total size is 45305958 speedup is 108908.55
लक्ष्य में new-file.txt नामक नई फ़ाइल है, जब –delete विकल्प के साथ स्रोत के साथ सिंक्रनाइज़ करते हैं, तो इसने new-file.txt फ़ाइल को हटा दिया
उदाहरण 11. लक्ष्य पर नई फ़ाइल न बनाएं
यदि आप चाहें, तो आप केवल लक्ष्य पर मौजूदा फ़ाइलों को अपडेट (सिंक) कर सकते हैं। यदि स्रोत में नई फ़ाइलें हैं, जो लक्ष्य पर नहीं हैं, तो आप इन नई फ़ाइलों को लक्ष्य पर बनने से रोक सकते हैं। यदि आप यह सुविधा चाहते हैं, तो rsync कमांड के साथ –existing विकल्प का उपयोग करें।
पहले, स्रोत पर new-file.txt जोड़ें।
[/var/lib/rpm ]$ > new-file.txt
अगला, लक्ष्य से rsync निष्पादित करें।
$ rsync -avz --existing root@192.168.1.2:/var/lib/rpm/ . root@192.168.1.2's password: receiving file list ... done ./ sent 26 bytes received 419 bytes 46.84 bytes/sec total size is 88551424 speedup is 198991.96
यदि आप उपरोक्त आउटपुट देखते हैं, तो इसने नई फ़ाइल new-file.txt प्राप्त नहीं की
उदाहरण 12. स्रोत और गंतव्य के बीच परिवर्तन देखें
यह विकल्प स्रोत और गंतव्य के बीच फ़ाइलों या निर्देशिकाओं में अंतर देखने के लिए उपयोगी है।
स्रोत पर:
$ ls -l /var/lib/rpm -rw-r--r-- 1 root root 5357568 2010-06-24 08:57 Basenames -rw-r--r-- 1 root root 12288 2008-05-28 22:03 Conflictname -rw-r--r-- 1 root root 1179648 2010-06-24 08:57 Dirnames
गंतव्य पर:
$ ls -l /root/temp -rw-r--r-- 1 root root 12288 May 28 2008 Conflictname -rw-r--r-- 1 bin bin 1179648 Jun 24 05:27 Dirnames -rw-r--r-- 1 root root 0 Sep 3 06:39 Basenames
उपरोक्त उदाहरण में, स्रोत और गंतव्य के बीच दो अंतर हैं। पहला, Dirname फ़ाइल का स्वामी और समूह भिन्न है। अगला, Basenames फ़ाइल के लिए आकार भिन्न है।
अब आइए देखें कि rsync इस अंतर को कैसे प्रदर्शित करता है। -i विकल्प आइटम परिवर्तन प्रदर्शित करता है।
$ rsync -avzi thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/ Password: receiving file list ... done >f.st.... Basenames .f....og. Dirnames sent 48 bytes received 2182544 bytes 291012.27 bytes/sec total size is 45305958 speedup is 20.76
आउटपुट में यह फ़ाइल नाम या निर्देशिका नाम के सामने कुछ 9 अक्षर प्रदर्शित करता है जो परिवर्तनों को इंगित करता है।
हमारे उदाहरण में, Basenames (और Dirnames) के सामने के अक्षर निम्नलिखित कहते हैं:
> निर्दिष्ट करता है कि फ़ाइल को स्थानीय होस्ट पर स्थानांतरित किया जा रहा है। f दर्शाता है कि यह एक फ़ाइल है। s आकार परिवर्तन दर्शाता है। t टाइमस्टैम्प परिवर्तन दर्शाता है। o स्वामी बदला गया g समूह बदला गया।
उदाहरण 13. फ़ाइल स्थानांतरण के दौरान शामिल और बाहर करने का पैटर्न
rsync आपको सिंक्रनाइज़ेशन करते समय शामिल करने और बाहर करने के लिए फ़ाइलों या निर्देशिकाओं का पैटर्न देने की अनुमति देता है।
$ rsync -avz --include 'P*' --exclude '*' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/ Password: receiving file list ... done ./ Packages Providename Provideversion Pubkeys sent 129 bytes received 10286798 bytes 2285983.78 bytes/sec total size is 32768000 speedup is 3.19
उपरोक्त उदाहरण में, यह केवल 'P' से शुरू होने वाली फ़ाइलों या निर्देशिकाओं को शामिल करता है (rsync include का उपयोग करके) और अन्य सभी फ़ाइलों को बाहर करता है। (rsync exclude '*' का उपयोग करके)
उदाहरण 14. बड़ी फ़ाइलें स्थानांतरित न करें
आप rsync –max-size विकल्प का उपयोग करके rsync को विशिष्ट आकार से बड़ी फ़ाइलों को स्थानांतरित न करने के लिए कह सकते हैं।
$ rsync -avz --max-size='100K' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/ Password: receiving file list ... done ./ Conflictname Group Installtid Name Sha1header Sigmd5 Triggername sent 252 bytes received 123081 bytes 18974.31 bytes/sec total size is 45305958 speedup is 367.35
max-size=100K rsync को केवल उन फ़ाइलों को स्थानांतरित करने के लिए बनाता है जो 100K से कम या बराबर हैं। आप M का उपयोग मेगाबाइट्स के लिए और G का उपयोग गीगाबाइट्स के लिए कर सकते हैं।
उदाहरण 15. पूरी फ़ाइल स्थानांतरित करें
rsync की मुख्य विशेषताओं में से एक यह है कि यह पूरी फ़ाइल भेजने के बजाय केवल बदले हुए ब्लॉक को गंतव्य पर स्थानांतरित करता है।
यदि नेटवर्क बैंडविड्थ आपके लिए कोई समस्या नहीं है (लेकिन CPU है), तो आप rsync -W विकल्प का उपयोग करके पूरी फ़ाइल स्थानांतरित कर सकते हैं। यह rsync प्रक्रिया को गति देगा, क्योंकि इसे स्रोत और गंतव्य पर चेकसम करने की आवश्यकता नहीं है।
# rsync -avzW thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp Password: receiving file list ... done ./ Basenames Conflictname Dirnames Filemd5s Group Installtid Name sent 406 bytes received 15810211 bytes 2874657.64 bytes/sec total size is 45305958 speedup is 2.87
अतिरिक्त rsync ट्यूटोरियल
- UNIX / लिनक्स पर SSH के साथ Rsync कैसे सेटअप करें (बिना पासवर्ड के rsync)
- exclude-from का उपयोग करके कई फ़ाइलों और निर्देशिकाओं को बाहर करने के लिए 6 rsync उदाहरण