راهبرد پشتیبان و بازیابی آزموده
در این درس ۴ بخش
در دورهٔ مقدماتی آرشیو ساختیم؛ اینجا موفقیت را با بازگرداندن داده تعریف میکنیم. فایل پشتیبانی که هرگز بازیابی نشده، تنها یک امید است. پیش از انتخاب ابزار، مشخص کن چه چیزی حیاتی است، چه کسی مالک آن است و چه مدت میتوان بدون آن کار کرد. پیکربندی، دادهٔ برنامه، شیوهٔ نصب، وابستگیها و دسترسی به کلیدها همگی ممکن است برای راهاندازی دوباره لازم باشند. تمرین فقط دو فایل کوچک ساختگی دارد و به حساب معمولی نیاز دارد. بخش manifest با ابزارهای GNU اجرا میشود؛ بخش مخزن رمزگذاریشده فقط وقتی اجرا میشود که restic از قبل نصب باشد.
هدف بازیابی و دامنهٔ شکست
RPO نقطهٔ زمانی مورد نیاز برای بازیابی را مشخص میکند؛ در برنامهریزی معمول آن را به حداکثر فاصلهٔ قابل تحمل دادهٔ ازدسترفته تبدیل میکنیم. RTO زمان قابل تحمل برای بازگرداندن خدمت است. اگر RPO چهار ساعت باشد، پشتیبان شبانه بهتنهایی کافی نیست. اگر RTO پانزده دقیقه باشد، دانلود چندساعته از محل دور هم کافی نیست. این هدفها را با مالک خدمت تعیین و با اندازهگیری بازیابی ارزیابی کن. زمان یافتن نسخه، دریافت کلید، انتقال و بررسی را نیز حساب کن؛ سرعت ساخت آرشیو معادل زمان بازیابی نیست.
قاعدهٔ ۳–۲–۱ یعنی سه نسخه شامل اصل داده، روی دو نوع رسانه و دستکم یک نسخه خارج از محل. جداسازی دسترسی و یک نسخهٔ آفلاین یا تغییرناپذیر نیز دامنهٔ خرابی را کم میکند. snapshot محلی برای برگشت سریع مفید است، اما اگر به همان دیسک، حساب مدیریتی یا سامانه وابسته باشد، خرابی مشترک میتواند هر دو را از بین ببرد. واژهٔ snapshot در restic به نسخهٔ نقطهای داخل مخزن اشاره دارد و الزاماً snapshot فایلسیستم نیست. مخزن محلی این آزمایش، الگوی ۳–۲–۱ را پیاده نمیکند؛ فقط چرخهٔ پشتیبان و بازیابی را بهصورت کوچک نشان میدهد.
manifest و مرز اعتماد
umask 077
LAB15=$(mktemp -d "$HOME/linux2-backup.XXXXXX") || exit 1
export LAB15
mkdir -- "$LAB15/source"
printf 'port=8080\nmode=training\n' > "$LAB15/source/config.ini"
printf 'Recovery drill, no personal data.\n' > "$LAB15/source/notes.txt"
(cd "$LAB15/source" && sha256sum -- config.ini notes.txt > SHA256SUMS)
(cd "$LAB15/source" && sha256sum -c SHA256SUMS)SHA256SUMS نام فایلها و چکیدهٔ محتوای آنها را ثبت میکند. sha256sum -c تغییر بایتها را نسبت به همین فهرست بررسی میکند؛ مجوز، مالکیت، قابلیت بوت یا سلامت معنایی پایگاه داده را ثابت نمیکند. اگر مهاجم هم فایل و هم manifest را عوض کند، این بررسی بهتنهایی اصالت را اثبات نمیکند. برای اصالت باید مرجع مورد اعتماد جداگانه، مانند امضای معتبر و کلید تأیید حفاظتشده، داشته باشی. نامهای تمرین ثابتاند؛ برای نامهای دلخواه، قالب و پردازش نام فایل نیز باید طراحی شود.
مخزن رمزگذاریشده و بازگردانی جداگانه
تابع تمرین، رمزهای محیطی را برای هر فرایند کنار میگذارد و cache را محلی نگه میدارد. گذرواژهٔ init را تعاملی و دوبار وارد کن؛ در فرمان، history یا خروجی ننویس. از گذرواژهٔ واقعی حسابها برای این آزمایش استفاده نکن و برای مخزن واقعی، نسخهٔ بازیابیِ حفاظتشدهٔ راز را جدا از دستگاه اصلی نگه دار. فراموشی گذرواژه میتواند بازیابی را ناممکن کند. برای زمانبندی، نگهداری راز و دسترسی سرویس را جدا طراحی کن؛ فایل متنی ساده گاوصندوق نیست. پیش از اجرا، restic version را ثبت و روش نصب رسمی را با سیستم خود تطبیق بده.
command -v restic || exit 1
linux2_restic15() {
env -u RESTIC_PASSWORD -u RESTIC_PASSWORD_FILE -u RESTIC_PASSWORD_COMMAND \
restic -r "$LAB15/repo" --cache-dir "$LAB15/cache" "$@"
}
linux2_restic15 init
(cd "$LAB15/source" && linux2_restic15 backup --tag linux2-lab .)
linux2_restic15 snapshots
linux2_restic15 ls latest
linux2_restic15 check --read-data
RESTORE15=$(mktemp -d "$LAB15/restore.XXXXXX") || exit 1
export RESTORE15
linux2_restic15 restore latest --target "$RESTORE15"
(cd "$RESTORE15" && sha256sum -c SHA256SUMS)
cmp -- "$LAB15/source/config.ini" "$RESTORE15/config.ini"backup از داخل source و با مسیر نسبی نقطه اجرا میشود تا فایلهای نمونه در ریشهٔ نسخه قرار بگیرند؛ ls این ساختار را قابل مشاهده میکند. latest فقط در این مخزن تازه و تکتمرین انتخاب روشنی است. در مخزن مشترک، شناسهٔ نسخه و مسیر یا میزبان درست را صریح انتخاب کن. check معمولی عمدتاً ساختار مخزن را بررسی میکند؛ --read-data دادهٔ بستهها را نیز میخواند و برای مخزن بزرگ هزینهٔ زمان و انتقال دارد. بازیابی را در پوشهٔ تازه انجام میدهیم تا فایل زنده بازنویسی نشود. سپس هم manifest و هم مقایسهٔ مستقیم یک فایل را میسنجیم.
printf 'changed after backup\n' >> "$LAB15/source/notes.txt"
if (cd "$LAB15/source" && sha256sum -c SHA256SUMS); then
printf 'unexpected success\n'; exit 1
else
printf 'source modification detected\n'
fi
(cd "$RESTORE15" && sha256sum -c SHA256SUMS)اکنون نسخهٔ زنده باید در بررسی manifest شکست بخورد، ولی فایل بازگرداندهشده همچنان سالم بماند. شکستِ مورد انتظار را با حذف manifest یا تولید دوبارهٔ آن پنهان نکن. در گزارش، زمان آغاز تا پایان بازیابی، شناسهٔ snapshot، تعداد فایلها، نتیجهٔ بررسی و محدودیت تمرین را بنویس. هیچ فرمان forget یا prune در این آزمایش وجود ندارد. سیاست حذف به نسخههای لازم، فضا و نسخهٔ مستقل وابسته است؛ پاکسازی خودکار را به نخستین تمرین اضافه نکن. دربارهٔ دادهٔ در حال تغییر، سازگاری برنامه و روش dump یا توقف هماهنگ نیز باید بررسی شود.
تمرین و پاسخ
تمرین: اگر manifest سالم باشد اما گذرواژهٔ مخزن از دست برود، کدام بخش طرح شکست خورده است؟ پاسخ: مدیریت کلید و دسترسپذیری بازیابی؛ صحت چکیده جای راز لازم برای رمزگشایی را نمیگیرد. اگر آرشیو و اصل فایل روی یک دیسک باشند، چه چیزی کم است؟ پاسخ: استقلال دامنهٔ شکست و نسخهٔ خارج از محل. تحویل درس باید یک جدول کوچک از داده، RPO، RTO، محل نسخهها، مسئول کلید و تاریخ آزمون بعدی داشته باشد؛ مقادیر را پیشنهادی و مربوط به سناریوی خودت معرفی کن.
منابع رسمی انگلیسی:
NIST SP 800-34 Rev. 1: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-34r1.pdf
Canadian Centre for Cyber Security — Tips for backing up your information: https://www.cyber.gc.ca/en/guidance/tips-backing-your-information-itsap40002
GNU Coreutils — SHA-2 utilities: https://www.gnu.org/software/coreutils/manual/coreutils.html#sha2-utilities
restic — Preparing a new repository: https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html
restic — Backing up: https://restic.readthedocs.io/en/stable/040_backup.html
restic — Working with repositories: https://restic.readthedocs.io/en/stable/045_working_with_repos.html
restic — Restoring from backup: https://restic.readthedocs.io/en/stable/050_restore.html
تألیف و مثالهای اختصاصی: تحریریه درسآوند. منابع رسمی انگلیسی برای مطالعهٔ تکمیلی معرفی شدهاند.
متن درسهای عمومی را بدون ورود بخوانید.