Restic: انکرپشن اور ہسٹری کے ساتھ بیک اپ
اینڈ ٹو اینڈ انکرپشن، ڈیڈپلیکیشن، اور تاریخ کے مطابق اسنیپ شاٹس کے ساتھ بیک اپ کیسے سیٹ اپ کریں، انہیں خودکار بنائیں، اور سالمیت کی تصدیق کریں۔
اپ ڈیٹ 23 اگست، 2026
Restic وہ حل کرتا ہے جو rsync نہیں کر سکتا: یہ ڈیٹا بھیجنے سے پہلے اسے انکرپٹ کرتا ہے، اسنیپ شاٹ کی تاریخ محفوظ رکھتا ہے، ایک ہی چنک دو بار کاپی نہیں کرتا، اور بیک اپ کو S3-کمپیٹیبل اسٹوریج میں محفوظ کر سکتا ہے۔ ایک پروگرام، بغیر کسی ڈیپینڈنسی کے۔
انسٹالیشن اور آپ کا پہلا ریپوزٹری
sudo apt install -y restic
restic version
ریپوزٹری وہ جگہ ہے جہاں آپ کے بیک اپ رہتے ہیں۔ یہ ایک ڈائریکٹری، SFTP کے ذریعے کوئی مشین، یا آبجیکٹ اسٹوریج ہو سکتی ہے:
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
head -c 32 /dev/urandom | base64 > /root/.restic-pass
chmod 600 /root/.restic-pass
restic init
ریپوزٹری کا پاس ورڈ بحال نہیں ہو سکتا۔ اگر آپ اسے بھول گئے تو آپ کا ڈیٹا ختم ہو جائے گا — یہاں بذات خود کوئی سپورٹ موجود نہیں۔ اسے مشین سے الگ رکھیں: پاس ورڈ مینیجر میں، کاغذ پر، کہیں بھی — لیکن صرف اسی مشین کی
/root/.restic-passفائل میں نہیں جس کا آپ بیک اپ لے رہے ہیں۔
بیک اپ بنانا
restic backup /var/www /etc/nginx /opt/myapp \
--exclude-file=/root/restic-exclude.txt \
--tag daily
restic snapshots
restic ls latest
restic stats
دوسری اور اس کے بعد کی رنز تیز ہوتی ہیں: صرف ڈیٹا کے نئے چنک منتقل ہوتے ہیں۔
بحالی
restic restore latest --target /restore
restic restore <snapshot-id> --target /restore --include /var/www/uploads
اس سے بھی زیادہ آسان یہ ہے کہ سب کچھ کھولے بغیر مواد دیکھ لیں:
mkdir /mnt/snapshots
restic mount /mnt/snapshots
ڈائریکٹری تمام اسنیپ شاٹس کو تاریخ کے مطابق عام فولڈرز کی طرح دکھاتی ہے۔ غلطی سے ڈیلیٹ ہونے والی ایک فائل نکالنے کا یہ بہترین طریقہ ہے۔
شیڈولنگ اور صفائی
/usr/local/bin/backup.sh اسکرپٹ:
#!/bin/bash
set -euo pipefail
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
docker compose -f /opt/myapp/compose.yaml exec -T db \
pg_dump -U postgres app | gzip > /var/backups/db.sql.gz
restic backup /var/www /etc/nginx /opt/myapp /var/backups --tag daily
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
chmod 700 /usr/local/bin/backup.sh
اس کے بعد systemd ٹائمر آتا ہے، دیکھیں شیڈول شدہ ٹاسکس۔ forget --prune اضافی اسنیپ شاٹس ہٹاتا ہے اور جگہ خالی کرتا ہے؛ --prune کے بغیر اسنیپ شاٹس فہرست سے غائب ہو جاتے ہیں لیکن ڈیٹا باقی رہتا ہے۔
انٹیگریٹی چیکس
restic check
restic check --read-data-subset=5%
پہلا کمانڈ اسٹرکچر چیک کرتا ہے، دوسرا ڈیٹا کا کچھ حصہ پڑھ کر چیک سمز کی تصدیق کرتا ہے۔ دوسرا مہینے میں ایک بار چلائیں: یہ ڈسک اور بینڈوتھ پر بوجھ ڈالتا ہے، لیکن یہی خاموش خرابی کو پکڑتا ہے۔
اسٹرکچر چیک حقیقی بحالی کا متبادل نہیں — دیکھیں ریسٹور ڈرل۔
وسائل
Restic میموری میں ایک انڈیکس رکھتا ہے: بڑے ڈیٹا سیٹس پر یہ سینکڑوں میگابائٹس ہوتا ہے۔ 2 GB RAM والے VDS-1 پر، دسیوں گیگابائٹس کا بیک اپ کم پڑ سکتا ہے — پیرالیلزم محدود کریں یا بھاری بیک اپ ایک ٹیئر اوپر منتقل کریں۔ ڈسک پر بوجھ نمایاں ہوتا ہے، اس لیے رات کے لیے شیڈول کریں: دیکھیں ڈسک اسپیڈ۔
عام غلطیاں
- پاس ورڈ صرف اسی مشین پر محفوظ ہے جس کا بیک اپ لیا جا رہا ہے۔ کلاسک صورت: مشین بیک اپ کی چابی سمیت ضائع ہو جاتی ہے۔
--pruneکے بغیرforget۔ جگہ خالی نہیں ہوتی اور ریپوزٹری بڑھتی رہتی ہے۔- اسی ڈسک کی اسی ڈائریکٹری میں بیک اپ۔ بحالی کے لیے آپ کے پاس کچھ نہیں ہوگا — دیکھیں کسی دوسری جگہ بیک اپ۔
- کیشز اور
/var/lib/dockerخارج نہیں کیے گئے۔ بیک اپ بلا وجہ چار گنا بڑا ہو جاتا ہے؛ کیا شامل کرنا ہے اس کی فہرست مضمون کس چیز کا بیک اپ لینا ہے میں ہے۔ - متوازی رنز۔ دوسری رن ریپوزٹری لاک سے ٹکرائے گی۔ کال کو
flockمیں لپیٹیں۔