Restic: এনক্রিপশন ও হিস্ট্রিসহ ব্যাকআপ
কীভাবে এন্ড-টু-এন্ড এনক্রিপশন, ডিডুপ্লিকেশন ও তারিখভিত্তিক স্ন্যাপশটসহ ব্যাকআপ সেট আপ করবেন, অটোমেট করবেন, এবং অখণ্ডতা যাচাই করবেন।
আপডেট: ২৩ আগস্ট, ২০২৬
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-এ মুড়ে দিন।