rsync মানে remote sync।
rsync UNIX/Linux-এ ব্যাকআপ অপারেশন পারফর্ম করতে ব্যবহৃত হয়।
rsync ইউটিলিটি ফাইল এবং ডিরেক্টরি এক লোকেশন থেকে অন্য লোকেশনে কার্যকরভাবে সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয়। ব্যাকআপ লোকেশন লোকাল সার্ভারে বা রিমোট সার্ভারে থাকতে পারে।
rsync-এর গুরুত্বপূর্ণ ফিচার
- স্পিড: প্রথমবার, rsync সোর্স এবং ডেস্টিনেশন ডিরেক্টরির মাঝে পুরো কন্টেন্ট রেপ্লিকেট করে। এরপর, rsync শুধু চেঞ্জড ব্লক বা বাইট ডেস্টিনেশনে ট্রান্সফার করে, যা ট্রান্সফারকে খুব দ্রুত করে।
- সিকিউরিটি: rsync ডেটা এনক্রিপশন অলো করে ssh প্রোটোকল ব্যবহার করে ট্রান্সফারের সময়।
- কম ব্যান্ডউইথ: rsync ডেটা ব্লক বাই ব্লক কমপ্রেশন এবং ডিকমপ্রেশন ব্যবহার করে সেন্ডিং এবং রিসিভিং এন্ডে যথাক্রমে। তাই rsync দ্বারা ব্যবহৃত ব্যান্ডউইথ অন্যান্য ফাইল ট্রান্সফার প্রোটোকলের চেয়ে সবসময় কম।
- প্রিভিলেজ: rsync ইনস্টল এবং এক্সিকিউট করার জন্য কোনো স্পেশাল প্রিভিলেজ দরকার নেই
সিন্ট্যাক্স
$ rsync options source destination
সোর্স এবং ডেস্টিনেশন যেকোনো একটি লোকাল বা রিমোট হতে পারে। রিমোটের কেসে, লগইন নাম, রিমোট সার্ভার নাম এবং লোকেশন স্পেসিফাই করুন।
উদাহরণ ১. লোকাল সার্ভারে দুটি ডিরেক্টরি সিঙ্ক্রোনাইজ করুন
লোকাল কম্পিউটারে দুটি ডিরেক্টরি সিঙ্ক করতে, নিচের 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
উদাহরণ ২. rsync -a ব্যবহার করে সিঙ্ক করার সময় টাইমস্ট্যাম্প প্রিজার্ভ করুন
rsync অপশন -a আর্কাইভ মোড ইন্ডিকেট করে। -a অপশন নিচের কাজগুলো করে,
- রিকার্সিভ মোড
- সিম্বলিক লিংক প্রিজার্ভ করে
- পারমিশন প্রিজার্ভ করে
- টাইমস্ট্যাম্প প্রিজার্ভ করে
- ওনার এবং গ্রুপ প্রিজার্ভ করে
এখন, উদাহরণ ১-এ দেওয়া কমান্ডটি একইভাবে এক্সিকিউট করুন (আরও 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
উদাহরণ ৩. শুধু একটি ফাইল সিঙ্ক্রোনাইজ করুন
শুধু একটি ফাইল কপি করতে, 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
উদাহরণ ৪. লোকাল থেকে রিমোটে ফাইল সিঙ্ক্রোনাইজ করুন
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
রিমোট সার্ভারের সাথে সিঙ্ক্রোনাইজেশনের সময়, আপনাকে ইউজারনেম এবং রিমোট সার্ভারের IP ঠিকানা স্পেসিফাই করতে হবে। আপনাকে রিমোট সার্ভারের ডেস্টিনেশন ডিরেক্টরিও স্পেসিফাই করতে হবে। ফরম্যাট হলো username@machinename:path
উপরে দেখানো পদ্ধতিতে, লোকাল থেকে রিমোট সার্ভারে rsync করার সময় পাসওয়ার্ড চাইছে।
কখনো কখনো আপনি লোকাল থেকে রিমোট সার্ভারে ফাইল ব্যাকআপ করার সময় পাসওয়ার্ড এন্টার করতে চান না। উদাহরণস্বরূপ, আপনার একটি ব্যাকআপ শেল স্ক্রিপ্ট আছে, যা rsync ব্যবহার করে লোকাল থেকে রিমোট সার্ভারে ফাইল কপি করে, আপনাকে পাসওয়ার্ড এন্টার না করে rsync করার ক্ষমতা দরকার।
এটি করার জন্য, ssh পাসওয়ার্ড-লেস লগইন সেটআপ করুন যেমন আমরা আগে ব্যাখ্যা করেছি।
উদাহরণ ৫. রিমোট থেকে লোকালে ফাইল সিঙ্ক্রোনাইজ করুন
যখন আপনি রিমোট থেকে লোকালে ফাইল সিঙ্ক্রোনাইজ করতে চান, রিমোট পাথ সোর্সে এবং লোকাল পাথ টার্গেটে স্পেসিফাই করুন নিচে দেখানো পদ্ধতিতে।
$ 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
উদাহরণ ৬. সিঙ্ক্রোনাইজেশনের জন্য রিমোট শেল
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
উদাহরণ ৭. ডেস্টিনেশনে মডিফাইড ফাইল ওভাররাইট করবেন না
একটি টিপিক্যাল সিঙ্ক সিচুয়েশনে, যদি ডেস্টিনেশনে একটি ফাইল মডিফাইড থাকে, তবে আমরা সোর্স থেকে পুরনো ফাইল দিয়ে সেটা ওভাররাইট করতে চাই না।
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
উদাহরণ ৮. শুধু ডিরেক্টরি ট্রি স্ট্রাকচার সিঙ্ক্রোনাইজ করুন (ফাইলগুলো না)
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
উদাহরণ ৯. ট্রান্সফারের সময় 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 ব্যবহার করে) লোকাল লিনাক্স সার্ভার বা রিমোট লিনাক্স সার্ভার ব্যাকআপ করার জন্য।
উদাহরণ ১০. টার্গেটে তৈরি ফাইলগুলো ডিলিট করুন
যদি কোনো ফাইল সোর্সে না থাকে, কিন্তু টার্গেটে থাকে, তবে আপনি rsync-এর সময় টার্গেটে সেই ফাইল ডিলিট করতে চাইতে পারেন।
সেক্ষেত্রে, –delete অপশন ব্যবহার করুন নিচে দেখানো পদ্ধতিতে। rsync delete অপশন সোর্স ডিরেক্টরিতে নাও থাকা ফাইলগুলো ডিলিট করে।
# Source and target are in sync. Now creating new file at the target. $ > 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 ফাইলটি রিমুভ করে দিয়েছে।
উদাহরণ ১১. টার্গেটে নতুন ফাইল তৈরি করবেন না
আপনি চাইলে শুধু টার্গেটে ইতিমধ্যে থাকা ফাইলগুলো আপডেট (সিঙ্ক) করতে পারেন। কেসে সোর্সে নতুন ফাইল থাকে, যা টার্গেটে নেই, আপনি টার্গেটে এই নতুন ফাইলগুলো তৈরি হওয়া থেকে বাধা দিতে পারেন। আপনি এই ফিচার চাইলে, 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 রিসিভ করেনি।
উদাহরণ ১২. সোর্স এবং ডেস্টিনেশনের মাঝে পরিবর্তন দেখুন
এই অপশন সোর্স এবং ডেস্টিনেশনের মাঝে ফাইল বা ডিরেক্টরির ডিফারেন্স দেখতে উপকারী।
সোর্সে:
$ 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
আউটপুটে ফাইল বা ডিরেক্টরি নামের সামনে কিছু ৯টি লেটার দেখাচ্ছে যা চেঞ্জস ইন্ডিকেট করে।
আমাদের উদাহরণে, Basenames (এবং Dirnames)-এর সামনে থাকা লেটারগুলো নিচের কথা বলছে:
> স্পেসিফাই করে যে ফাইলটি লোকাল হোস্টে ট্রান্সফার হচ্ছে। f রিপ্রেজেন্ট করে যে এটি একটি ফাইল। s রিপ্রেজেন্ট করে যে সাইজ চেঞ্জ আছে। t রিপ্রেজেন্ট করে যে টাইমস্ট্যাম্প চেঞ্জ আছে। o ওনার চেঞ্জড g গ্রুপ চেঞ্জড।
উদাহরণ ১৩. ফাইল ট্রান্সফারের সময় Include এবং Exclude প্যাটার্ন
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 ‘*’ ব্যবহার করে)।
উদাহরণ ১৪. বড় ফাইল ট্রান্সফার করবেন না
আপনি rsync কে বলতে পারেন নির্দিষ্ট আকারের চেয়ে বড় ফাইল ট্রান্সফার না করতে rsync –max-size অপশন ব্যবহার করে।
$ 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 কে শুধু ১০০K বা তার চেয়ে ছোট ফাইল ট্রান্সফার করতে বাধ্য করে। আপনি M ব্যবহার করতে পারেন মেগাবাইটের জন্য এবং G গিগাবাইটের জন্য।
উদাহরণ ১৫. পুরো ফাইল ট্রান্সফার করুন
rsync-এর একটি প্রধান ফিচার হলো এটি শুধু চেঞ্জড ব্লক ডেস্টিনেশনে ট্রান্সফার করে, পুরো ফাইল না পাঠিয়ে।
নেটওয়ার্ক ব্যান্ডউইথ আপনার জন্য ইস্যু না হলে (কিন্তু CPU হলে), আপনি পুরো ফাইল ট্রান্সফার করতে পারেন rsync -W অপশন ব্যবহার করে। এটি rsync প্রসেসকে স্পিড আপ করবে, কারণ এখন সোর্স এবং ডেস্টিনেশনে চেকসাম পারফর্ম করতে হবena।
# 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/Linux-এ Rsync SSH সেটআপ করা (rsync পাসওয়ার্ড ছাড়া)
- exclude-from ব্যবহার করে একাধিক ফাইল এবং ডিরেক্টরি এক্সক্লুড করার ৬টি rsync উদাহরণ