rsync দিয়ে ব্যাকআপ
কীভাবে SSH-এর মাধ্যমে অন্য সার্ভারে ফাইল কপি সেট আপ করবেন, হার্ড লিংক দিয়ে ভার্সন হিস্ট্রি তৈরি করবেন, এবং বিপজ্জনক --delete অপশনে বেশি কিছু মুছে ফেলা এড়াবেন।
আপডেট: ২৩ আগস্ট, ২০২৬
কপি তৈরির সবচেয়ে সহজ কার্যকর উপায় হলো rsync: এটি সর্বত্রই পাওয়া যায়, শুধু ফাইলের পরিবর্তিত অংশগুলো স্থানান্তর করে এবং SSH-এর মাধ্যমে কাজ করে। ছোট ডেটাসেটের জন্য এটি যথেষ্ট।
মৌলিক কমান্ড
rsync -avz --delete \
-e "ssh -i /root/.ssh/backup_key -p 22" \
/var/www/ backup@backup.example.com:/srv/backup/vds/www/
ফ্ল্যাগের ব্যাখ্যা:
-a— পারমিশন, মালিকানা, সময় ও লিংক সংরক্ষণ করে;-v— কী হচ্ছে তা দেখায়;-z— স্থানান্তরের সময় কম্প্রেস করে (প্রচুর ডেটা থাকলে 500 Mbps পর্যন্ত ব্যান্ডউইথে উপকারী);--delete— রিসিভারে যা আর সোর্সে নেই তা মুছে ফেলে।
সোর্স পাথের শেষে স্ল্যাশ থাকলে বোঝায় “ডিরেক্টরির ভেতরের বিষয়বস্তু”; স্ল্যাশ ছাড়া ডিরেক্টরিটাই কপি হয়।
/var/www/এবং/var/wwwভিন্ন ফলাফল দেয়, আর--delete-এর সাথে মিলে এই পার্থক্যই ভুল জিনিস মুছে ফেলে। সবসময় প্রথমে--dry-runদিয়ে চালান।
rsync -avzn --delete /var/www/ backup@backup.example.com:/srv/backup/vds/www/
-n ফ্ল্যাগটি হলো ড্রাই রান।
পাসওয়ার্ডবিহীন অ্যাক্সেস কী
নির্ধারিত সময়ে কপি করার জন্য পাসওয়ার্ড না দিয়ে লগইন করা প্রয়োজন:
ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""
ssh-copy-id -i /root/.ssh/backup_key.pub backup@backup.example.com
রিসিভারে এই কী-টি একটি নির্দিষ্ট কমান্ডে সীমাবদ্ধ করুন — তাহলে চুরি হওয়া কী দিয়ে শেল পাওয়া যাবে না। রিসিভারের ~/.ssh/authorized_keys-এ:
command="rrsync -wo /srv/backup",restrict ssh-ed25519 AAAA... backup
হার্ড লিংক দিয়ে ভার্সন হিস্ট্রি
সাধারণ rsync শুধু বর্তমান অবস্থা রাখে: গতকাল কোনো ফাইল মুছে ফেলে আজ খেয়াল করলে তা ফেরানোর কোনো জায়গা নেই। --link-dest আপনাকে হিস্ট্রি দেয়: অপরিবর্তিত ফাইল আবার কপি হয় না, বরং লিংক করা হয়, তাই ত্রিশটি কপি একটির চেয়ে সামান্য বেশি জায়গা নেয়।
#!/bin/bash
set -euo pipefail
DEST=/srv/backup/vds
TODAY=$(date +%F)
rsync -a --delete \
--link-dest="$DEST/latest" \
/var/www/ "$DEST/$TODAY/"
ln -sfn "$DEST/$TODAY" "$DEST/latest"
find "$DEST" -maxdepth 1 -type d -mtime +30 -name "20*" -exec rm -rf {} +
স্ক্রিপ্টটি রাতে নির্ধারিত সময়ে চালান, এবং সবসময় লগিংসহ।
বাদ দেওয়া
rsync -avz --exclude-from=/root/backup-exclude.txt / backup@host:/srv/backup/vds/root/
/proc/
/sys/
/dev/
/run/
/tmp/
/var/lib/docker/
/var/cache/
*.log
পুরো রুট কপি করা খুব কমই প্রয়োজন: কী কী ব্যাক আপ করবেন নিবন্ধ থেকে একটি নির্দিষ্ট তালিকা তৈরি করা বেশি উপকারী।
কখন rsync উপযুক্ত নয়
- স্টোরেজ এনক্রিপশন ও ডিডুপ্লিকেশন দরকার হলে Restic ব্যবহার করুন।
- ডেটা যদি ক্রমাগত পরিবর্তিত হয় এবং ইন্টিগ্রিটি গুরুত্বপূর্ণ হয়, প্রথমে ডেটাবেস ডাম্প করুন, তারপর ফলাফল ফাইলটি rsync করুন।
- রিসিভার যদি অন্যের স্টোরেজ হয় যা আপনি বিশ্বাস করেন না: rsync ফাইল যেমন আছে তেমনই লেখে, কোনো ক্লায়েন্ট-সাইড এনক্রিপশন ছাড়া।
সাধারণ ভুল
- ভুল সোর্স পাথে
--delete। খালি সোর্স ডিরেক্টরি রিসিভার মুছে ফেলে। ড্রাই রান বাধ্যতামূলক। - একই ডিস্কে কপি। এটি ব্যাকআপ নয়, একই বিপর্যয়ের জন্য দ্বিতীয় লক্ষ্য। দেখুন অফসাইট কপি।
- আগেই কম্প্রেস করা ডেটার জন্য কম্প্রেশন।
-zশুধু আর্কাইভ ও ছবি ধীর করে দেয়। - রাতের রান ডিস্ক বটলনেকে আটকে যায়। রাইট থ্রুপুটের সীমা টিয়ারের উপর নির্ভর করে: দেখুন ডিস্কের গতি।
--bwlimit=20000এবং অফ-পিক আওয়ারে চালানো সাহায্য করে। - কেউ ফলাফল যাচাই করে না। রিটার্ন কোড লগ করুন এবং মনিটর করুন:
rsync ... || echo "backup failed" | mail -s alert you@example.com।