VPS ব্যাকআপ ও রিস্টোর হাতে-কলমে যাচাই করুন
Backup file আছে দেখেই ভরসা করবেন না। দুটি ছোট file-এর archive তৈরি, server-এর বাইরে copy এবং checksum মিলিয়ে restore অনুশীলন করুন। এটি পুরো server বা database recovery-এর বিকল্প নয়।
VPSuntu · হালনাগাদ · পড়তে প্রায় 4 মিনিট
এই নির্দেশনায়
অনুশীলনের সীমানা নির্ধারণ করুন
Server-এ Bash, GNU tar ও sha256sum এবং client-এ Bash/OpenSSH লাগবে। Linux বা WSL ব্যবহার করতে পারেন। Server-এর জন্য এক terminal ও client-এর জন্য অন্য terminal খোলা রাখুন—পরবর্তী ধাপে একই variables লাগবে। Error হলে থামুন।
এই অনুশীলন home-এর ভেতরে disposable file ব্যবহার করে। Root-এ archive extract বা live site overwrite হবে না। চাইলে setup guide-এর দুইটি readable file-এর copy নিতে পারেন, কিন্তু database, upload, DNS, certificate ও অন্যান্য dependency আলাদা inventory-তে রাখুন।
নিরাপদ sample তৈরি করুন
umask 077
backup_lab=$(mktemp -d "$HOME/ubuntu-vps-backup.XXXXXX")
mkdir -p "$backup_lab/payload/site" "$backup_lab/payload/nginx" "$backup_lab/export"
printf '%s\n' '<!doctype html><html lang="en"><title>Restore drill</title><h1>Recovered static page</h1></html>' > "$backup_lab/payload/site/index.html"
printf '%s\n' 'server {' ' listen 8080;' ' server_name example.test;' ' root /var/www/first-site;' '}' > "$backup_lab/payload/nginx/first-site.conf"
printf 'Practice directory: %s\n' "$backup_lab"এখানকার Nginx configuration নিষ্ক্রিয় sample। Live site-এর দুটি file নিতে চাইলে কেবল practice copy বদলান। Content-এ secret আছে কি দেখুন এবং consistent copy-এর সময় deploy থামান। Sample দিয়েই শিখলে পরের block বাদ দিন।
install -m 600 /var/www/first-site/index.html "$backup_lab/payload/site/index.html"
install -m 600 /etc/nginx/sites-available/first-site "$backup_lab/payload/nginx/first-site.conf"Certificate private key বা পুরো filesystem এই ছোট archive-এর অংশ নয়। অতিরিক্ত file দরকার হলে manifest-এ স্পষ্টভাবে যোগ করুন।
File এবং archive checksum তৈরি করুন
(
cd "$backup_lab/payload" &&
sha256sum site/index.html nginx/first-site.conf > SHA256SUMS
)
tar -czf "$backup_lab/export/static-site.tar.gz" -C "$backup_lab/payload" site nginx SHA256SUMS
(
cd "$backup_lab/export" &&
sha256sum static-site.tar.gz > static-site.tar.gz.sha256
)
tar -tzf "$backup_lab/export/static-site.tar.gz"
printf 'Server export directory: %s\n' "$backup_lab/export"Payload অপরিবর্তিত রাখুন। Archive-এ relative path-এ site ও nginx-এর দুই file এবং SHA256SUMS থাকে। Checksum অনিচ্ছাকৃত পরিবর্তন ধরতে পারে; attacker archive ও checksum দুটোই বদলালে তা authenticity প্রমাণ করে না।
নিজের computer-এ স্বাধীন copy নিন
Server-এ দেখানো exact path remote_backup-এ বসান। REPLACE placeholder, IP, user ও key নিজের তথ্য দিয়ে বদলান।
umask 077
recovery_dir=$(mktemp -d "$HOME/ubuntu-vps-restore.XXXXXX")
remote_backup=/home/deploy/ubuntu-vps-backup.REPLACE/export
scp -i ~/.ssh/ubuntu_vps "deploy@203.0.113.10:$remote_backup/static-site.tar.gz" "$recovery_dir/"
scp -i ~/.ssh/ubuntu_vps "deploy@203.0.113.10:$remote_backup/static-site.tar.gz.sha256" "$recovery_dir/"Host fingerprint সন্দেহ হলে বিশ্বস্তভাবে SSH পরিচয় যাচাই করুন, verification bypass করবেন না। SSH পরিবহন encrypt করে; tar.gz compression নিজে encryption নয়। সংরক্ষিত copy-এর access ও encryption পরিকল্পনা করুন। একই VPS-এর অন্য folder স্বাধীন backup নয়।
নতুন খালি directory-তে restore করুন
(
cd "$recovery_dir" &&
sha256sum -c static-site.tar.gz.sha256
)
tar -tzf "$recovery_dir/static-site.tar.gz"Archive checksum OK হতে হবে। ব্যর্থ হলে checksum file বদলে মিলাবেন না; transfer বা source পরীক্ষা করুন। নিজের তৈরি trusted archive নতুন খালি directory-তে extract করুন, পুরোনো file রেখে। Root হিসেবে extract বা archived owner পুনরায় চাপানো এড়ান।
restore_dir=$(mktemp -d "$recovery_dir/restored.XXXXXX")
tar -xzf "$recovery_dir/static-site.tar.gz" -C "$restore_dir" --keep-old-files --no-same-owner
(
cd "$restore_dir" &&
sha256sum -c SHA256SUMS
)
cat "$restore_dir/site/index.html"দুটি file-এর checksum OK এবং নিজের page heading মিলতে হবে। এতে file content পরীক্ষা হয়; original owner, ACL অথবা চলমান service-এর পূর্ণ recovery নিশ্চিত হয় না।
Production recovery-তে যা যোগ হবে
Replacement Nginx environment-এ include, module, permission ও certificate path মিলিয়ে assembled configuration পরীক্ষা করুন। অপরিবর্তিত live Nginx-এ syntax test চালানো restore-এর পরীক্ষা নয়। বাদ পড়া TLS key/certificate নিরাপদ copy থেকে আনুন অথবা certificate নতুন করে নিন।
Active database-এর file সাধারণ tar copy-তে inconsistent হতে পারে; database-সমর্থিত dump বা consistent backup পদ্ধতি দরকার। Snapshot-এর retention, একই provider-এর failure domain এবং restore path যাচাই করুন। Snapshot থাকা নিজে recovery-এর প্রমাণ নয়।
সময়, দায়িত্ব ও ব্যর্থতার সতর্কতা রাখুন
RPO হলো কতটা সাম্প্রতিক data হারানো গ্রহণযোগ্য, RTO হলো recovery সময়ের লক্ষ্য। 24 ঘণ্টা ও 60 মিনিট উদাহরণ, এখানে মাপা ফল নয়। Daily job নিয়মিত সফল হলেই daily protection দেয়।
ছোট পর্দায় সব কলাম দেখতে টেবিলটি পাশে স্ক্রল করুন।
| রেকর্ড | যা লিখবেন |
|---|---|
| Copy | Version, destination ও retention |
| Integrity | Archive ও restored file checksum |
| সময় | শুরু, শেষ এবং সম্পূর্ণ সেবা ফেরার সময় |
| Dependency | অনুপস্থিত package, secret, DNS ও certificate |
| বাহ্যিক পরীক্ষা | নতুন পরিবেশে public HTTPS ও app workflow |
পুরো recovery মাপুন: access, provision, config, certificate, DNS ও application test। শুধু local extraction-এর সময় নয়। একাধিক recovery point এবং failed-job alert রাখুন। Backup storage-এর খরচ VPS budget-এ ধরুন।
প্রশ্ন ও উত্তর
Checksum মিলে গেলে মূল data মুছে দেব?
না। Retention ও পূর্ণ recovery test অনুযায়ী সিদ্ধান্ত নিন। একমাত্র ভালো copy তাড়াহুড়ো করে মুছবেন না।
Checksum কি বাদ পড়া database ধরবে?
Manifest-এ না থাকা data, secret বা DNS checksum পরীক্ষা আবিষ্কার করতে পারে না। সম্পূর্ণ inventory ও app recovery test দরকার।