پرش به محتوا

برگشت به وضعیت قبل با Snapper در openSUSE

openSUSE با فایل‌سیستم Btrfs پیش و پس از هر تغییر بسته snapshot می‌گیرد. تغییرات را ببینید، یک فایل را برگردانید یا کل سیستم را به قبل از به‌روزرسانی برگردانید.

openSUSE Leap 16سطح: متوسطبه‌روزرسانی: ۱۶ آبان ۱۴۰۵

اگر ریشه‌ی سیستم روی Btrfs نصب شده باشد (پیش‌فرض openSUSE)، zypper پیش و پس از هر نصب یا به‌روزرسانی، خودکار snapshot می‌گیرد. این یعنی یک به‌روزرسانی خراب، با یک دستور برگشت‌پذیر است.

۱. فهرست snapshotها

bash
sudo snapper list

هر جفت pre و post مربوط به یک عملیات zypper است.

۲. چه چیزی تغییر کرده؟

bash
sudo snapper status 41..42
sudo snapper diff 41..42 /etc/nginx/nginx.conf

۳. برگرداندن یک فایل

bash
sudo snapper undochange 41..42 /etc/nginx/nginx.conf

۴. snapshot دستی پیش از تغییر مهم

bash
sudo snapper create --description "before nginx config rewrite" --cleanup-algorithm number

۵. برگشت کل سیستم

اگر بعد از به‌روزرسانی سیستم درست بالا نیامد:

  1. در منوی بوت (GRUB)، گزینه‌ی Start bootloader from a read-only snapshot را انتخاب کنید و snapshot قبل از به‌روزرسانی را بوت کنید.
  2. پس از بررسی و اطمینان، همان وضعیت را دائمی کنید:
bash
sudo snapper rollback
sudo reboot

۶. فضای دیسک

snapshotها به‌مرور فضا می‌گیرند. سیاست پاک‌سازی در /etc/snapper/configs/root تنظیم می‌شود:

ini
NUMBER_LIMIT="2-10"
NUMBER_LIMIT_IMPORTANT="4-10"
bash
sudo btrfs filesystem usage /
پوشه‌هایی مثل /var که داده‌ی متغیر دارند (لاگ‌ها، پایگاه داده) در subvolume جدا هستند و با rollback برنمی‌گردند. این رفتار عمدی است تا داده‌ها از دست نروند.