rsync کے ساتھ بیک اپ
SSH کے ذریعے دوسرے سرور پر فائل کاپی کیسے سیٹ اپ کریں، ہارڈ لنکس سے ورژن ہسٹری بنائیں، اور خطرناک --delete آپشن سے زیادہ کچھ حذف ہونے سے بچیں۔
اپ ڈیٹ 23 اگست، 2026
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۔