Skip to content
VDS · ব্যাকআপ ও ডিস্ক

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-এ মুড়ে দিন।