Cấu hình Snapper trên Fedora: “Nút Undo” thần thánh trước khi DNF Update

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Tại sao Btrfs trên Fedora vẫn cần thêm Snapper?

Sau hơn 2 năm dùng Fedora làm máy code chính, mình cực kỳ thích tốc độ cập nhật package tại đây. Tuy nhiên, cái gì cũng có giá của nó. Đã có lần mình “ăn hành” vì bản cập nhật Kernel 6.x xung đột với driver NVIDIA khiến máy treo cứng ngay trước giờ demo. Dù Fedora dùng Btrfs làm mặc định, nhưng nó lại thiếu một cơ chế tự động bảo vệ người dùng.

Btrfs rất mạnh ở khả năng tạo snapshot (ảnh chụp trạng thái) trong tích tắc. Đáng tiếc là Fedora không tự động chụp ảnh hệ thống trước khi bạn gõ dnf update. Snapper sinh ra để giải quyết đúng lỗ hổng này.

Hãy coi Snapper như một chiếc máy ảnh tự động. Mỗi khi bạn cài phần mềm hay nâng cấp OS, nó sẽ lưu lại trạng thái hệ thống. Nếu bản update làm lỗi Wifi hoặc mất âm thanh, bạn chỉ cần một lệnh để “quay ngược thời gian” về lúc máy còn chạy ngon lành.

Bước 1: Cài đặt Snapper và Plugin DNF

Đầu tiên, chúng ta cần cài Snapper cùng một plugin để nó tự động kích hoạt mỗi khi DNF làm việc.

sudo dnf install snapper python3-dnf-plugin-snapper

Gói python3-dnf-plugin-snapper chính là linh hồn của combo này. Nó giúp hệ thống tự tạo một snapshot “Pre” (trước) và một snapshot “Post” (sau) mỗi khi bạn cài đặt bất kỳ thứ gì.

Bước 2: Cấu hình Snapper cho phân vùng Root

Mặc định Snapper chưa theo dõi phân vùng nào cả. Bạn cần chỉ định nó bảo vệ phân vùng root (/) – nơi chứa toàn bộ linh hồn của hệ điều hành.

Chạy lệnh sau để khởi tạo:

sudo snapper -c root create-config /

Lệnh này sẽ tạo file cấu hình tại /etc/snapper/configs/root. Đồng thời, một subvolume ẩn tại /.snapshots cũng được tạo ra để lưu trữ các bản chụp sau này.

Cấp quyền cho User thường

Thông thường chỉ root mới xem được snapshot. Để tiện sử dụng, bạn nên thêm user của mình vào file cấu hình:

sudo vi /etc/snapper/configs/root

Tìm dòng ALLOW_USERS="" và điền username của bạn vào, ví dụ: ALLOW_USERS="haoit".

Bước 3: Tối ưu dung lượng (Cleanup)

Snapshot Btrfs không tốn dung lượng ngay lập tức. Tuy nhiên, nếu bạn sửa đổi 10GB dữ liệu, bản snapshot cũ sẽ giữ lại 10GB đó để dự phòng. Nếu không dọn dẹp, ổ cứng của bạn sẽ đầy rất nhanh.

Hãy điều chỉnh các thông số trong file /etc/snapper/configs/root để cân bằng giữa an toàn và không gian lưu trữ:

# Chỉ giữ lại 5 snapshot theo giờ và 7 snapshot theo ngày
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"

# Giữ tối đa 10 snapshot do DNF tạo ra
NUMBER_LIMIT="10"
NUMBER_LIMIT_IMPORTANT="5"

Đừng quên kích hoạt service tự động dọn dẹp của hệ thống:

sudo systemctl enable --now snapper-cleanup.timer

Bước 4: Kiểm tra thành quả

Thử cài một gói nhẹ nhàng như htop để xem Snapper hoạt động ra sao:

sudo dnf install htop

Sau đó, kiểm tra danh sách snapshot:

snapper list

Bạn sẽ thấy hai dòng mới xuất hiện với mô tả “number”. Đây là bảo hiểm giúp bạn an tâm hơn trước mỗi lần vọc vạch hệ thống.

Bước 5: Cách Rollback khi gặp sự cố

Đây là lúc Snapper tỏa sáng. Giả sử driver mới làm máy bạn không vào được giao diện đồ họa.

Trường hợp 1: Vẫn vào được Terminal

Xác định ID của snapshot ổn định nhất (thường là cái “Pre” gần nhất) bằng lệnh snapper list. Nếu ID đó là 15, hãy gõ:

sudo snapper rollback 15

Lúc này, Snapper sẽ đặt snapshot 15 làm phân vùng root mặc định. Bạn chỉ cần reboot là máy sẽ quay về đúng trạng thái tại thời điểm đó.

Trường hợp 2: Máy không boot được

Nếu đen đủi đến mức không thấy màn hình đăng nhập, bạn nên cài thêm grub-btrfs. Công cụ này sẽ thêm danh sách snapshot vào ngay menu khởi động của GRUB.

sudo dnf install grub-btrfs
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Từ giờ, nếu máy lỗi, bạn chỉ cần chọn một bản snapshot cũ ngay từ lúc bật máy để cứu hộ.

Mẹo nhỏ khi quản lý Btrfs

  • Đo dung lượng thực tế: Lệnh df -h thường báo sai dung lượng Btrfs. Hãy dùng sudo btrfs filesystem du -s / để biết chính xác snapshot đang chiếm bao nhiêu GB.
  • Loại trừ thư mục: Đừng snapshot các thư mục như /var/cache hay /var/tmp. Chúng thay đổi liên tục nhưng không có giá trị khi phục hồi hệ điều hành.
  • Xóa thủ công: Nếu vừa nâng cấp phiên bản Fedora (ví dụ từ 39 lên 40) và thấy ổn định, hãy dùng snapper delete [ID] để giải phóng vài GB dung lượng cũ.

Thiết lập Snapper chỉ mất 5 phút nhưng giúp bạn tiết kiệm hàng giờ cài lại win (hoặc Linux). Từ nay, mỗi lần gõ sudo dnf upgrade, bạn có thể tự tin nhấn Enter mà không cần lo lắng về rủi ro hỏng hóc.

Share: