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में लपेटें।