Cấu hình Btrfs Subvolume trên Fedora: Tối ưu không gian và phục hồi hệ thống nhanh chóng

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

Bối cảnh và lý do cần Btrfs Subvolume

Khi làm việc với Linux, đặc biệt trên các hệ thống phát triển hay server, quản lý ổ đĩa luôn là ưu tiên hàng đầu. Nhiều người đã quen thuộc với filesystem truyền thống như Ext4, nổi bật về sự ổn định và hiệu suất đã được kiểm chứng. Tuy nhiên, khi nhu cầu về tính linh hoạt, khả năng bảo toàn dữ liệu, và đặc biệt là phục hồi nhanh chóng tăng cao, chúng ta cần tìm kiếm các giải pháp hiện đại hơn.

Btrfs (B-tree file system) là một trong những cái tên đáng chú ý. Đây là một filesystem “copy-on-write” (CoW), được phát triển để cung cấp các tính năng tiên tiến mà Ext4 không có. Chẳng hạn như snapshot, checksumming, compression, và đặc biệt quan trọng trong bài viết này là subvolume.

Mình dùng Fedora làm máy phát triển chính đã hai năm. Dù rất hài lòng với tốc độ cập nhật gói phần mềm, đôi khi những bản cập nhật lớn vẫn tiềm ẩn rủi ro. Subvolume và snapshot của Btrfs thực sự là giải pháp cứu cánh, giúp mình yên tâm thử nghiệm mà không sợ làm hỏng hệ thống.

Subvolume là gì và nó giúp ích gì?

Bạn có thể hình dung subvolume như một thư mục đặc biệt trên filesystem Btrfs. Khác với thư mục thông thường, một subvolume có khả năng hoạt động như một hệ thống tệp độc lập. Nó có thể được mount, unmount và quản lý riêng biệt, mang lại nhiều lợi ích đáng kể:

  • Tách biệt dữ liệu: Bạn có thể tạo các subvolume riêng cho hệ điều hành (/) hoặc thư mục người dùng (/home). Thậm chí, bạn có thể dành riêng cho các ứng dụng quan trọng như cơ sở dữ liệu (/var/lib/mysql, /var/lib/postgresql) hay log (/var/log). Việc này giúp cô lập dữ liệu, ngăn chặn tình trạng một phần hệ thống đầy gây ảnh hưởng đến toàn bộ.
  • Quản lý không gian linh hoạt: Các subvolume chia sẻ chung một pool không gian đĩa vật lý. Điều này khác biệt hoàn toàn với phân vùng truyền thống, nơi bạn phải định trước kích thước và rất khó thay đổi. Btrfs subvolume có khả năng tự động co giãn trong không gian chung đó, mang lại sự linh hoạt tối đa.
  • Snapshot mạnh mẽ: Đây là tính năng ‘đắt giá’ nhất của subvolume. Bạn có thể tạo snapshot (ảnh chụp nhanh) trạng thái của một subvolume bất cứ lúc nào. Ban đầu, snapshot không chiếm thêm nhiều không gian đĩa vì nó chia sẻ dữ liệu với subvolume gốc. Chỉ khi có dữ liệu thay đổi, không gian mới được sử dụng để lưu trữ các khối dữ liệu mới đó. Điều này cực kỳ hữu ích để phục hồi hệ thống về trạng thái trước đó khi có sự cố. Chẳng hạn, sau một bản cập nhật phần mềm bị lỗi hoặc cài đặt ứng dụng không tương thích.

Với Fedora, từ phiên bản 33 trở đi, Btrfs đã trở thành filesystem mặc định cho các cài đặt mới. Điều này có nghĩa là khi bạn cài đặt Fedora, hệ thống đã được thiết lập sẵn các subvolume cơ bản như root (cho /) và home (cho /home). Đây là nền tảng vững chắc cho việc quản lý hiệu quả hơn.

Cài đặt và kiểm tra Btrfs trên Fedora

Nếu bạn cài đặt Fedora 33 trở lên, Btrfs đã là hệ thống tệp mặc định nên bạn không cần cài đặt gì thêm. Tuy nhiên, điều quan trọng là phải đảm bảo các công cụ quản lý Btrfs đã có sẵn trong hệ thống.

Kiểm tra trạng thái Btrfs

Để bắt đầu, hãy kiểm tra xem hệ thống của bạn có đang sử dụng Btrfs hay không, cũng như xem các phân vùng Btrfs hiện có:


df -h -t btrfs

Kết quả trả về sẽ tương tự như sau, hiển thị các phân vùng Btrfs cùng với điểm mount của chúng:


Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       475G   15G  459G   4% /var/home
/dev/sda3       475G   15G  459G   4% /

Cần lưu ý rằng cả //var/home (hoặc /home) đều được mount từ cùng một thiết bị /dev/sda3. Tuy nhiên, chúng là các subvolume riêng biệt trên cùng một filesystem Btrfs.

Cài đặt công cụ Btrfs

Để quản lý Btrfs subvolume và snapshot, bạn cần gói btrfs-progs. Fedora thường cài đặt sẵn gói này. Tuy nhiên, nếu vì lý do nào đó gói này bị thiếu, bạn có thể dễ dàng cài đặt nó như sau:


sudo dnf install btrfs-progs

Khi đã cài đặt xong, bạn hoàn toàn sẵn sàng để bắt đầu làm việc với các subvolume.

Cấu hình chi tiết Btrfs Subvolume

Liệt kê các Subvolume hiện có

Để xem các subvolume hiện có trên filesystem Btrfs, hãy sử dụng lệnh btrfs subvolume list. Bạn cần chỉ định đường dẫn của filesystem Btrfs gốc. Nếu không chắc chắn, bạn có thể dùng / hoặc điểm mount của phân vùng Btrfs.


sudo btrfs subvolume list /

Kết quả sẽ hiển thị ID, generation và đường dẫn của từng subvolume:


ID 256 gen 2102 top level 5 path root
ID 257 gen 2102 top level 5 path home

Trong ví dụ này, root là subvolume cho hệ thống gốc (/), còn home là subvolume dành cho thư mục người dùng (/home hoặc /var/home, tùy thuộc vào cách Fedora được cài đặt).

Tạo Subvolume mới

Bạn có thể tạo subvolume cho nhiều mục đích khác nhau. Chẳng hạn, bạn có thể tạo một subvolume riêng cho các dự án phát triển, hoặc cho các thư mục quan trọng khác như /var/log. Điều này giúp dễ dàng quản lý snapshot và phục hồi một cách riêng biệt.

Cú pháp cơ bản là:


sudo btrfs subvolume create /path/to/parent/directory/new_subvolume_name

Ví dụ, để tạo một subvolume cho log:


sudo btrfs subvolume create /var/log_btrfs

Sau khi tạo subvolume, bạn có thể di chuyển nội dung hiện có vào đó (nếu cần) và mount tại vị trí mong muốn. Ví dụ, để chuyển các file log hiện có vào subvolume mới và mount tại /var/log:


sudo mv /var/log/* /var/log_btrfs/
sudo rmdir /var/log # Đảm bảo thư mục trống
# Có thể cần tạo lại thư mục trống nếu rmdir báo lỗi vì có file ẩn hoặc permission
sudo mkdir /var/log

Sau đó, cập nhật /etc/fstab để mount subvolume này:


# Thêm dòng này vào /etc/fstab. Thay /dev/sda3 bằng thiết bị Btrfs của bạn
UUID=<UUID_CUA_BAN>  /var/log  btrfs  subvol=log_btrfs,compress=zstd:3,defaults  0 0

Để tìm UUID của phân vùng Btrfs, dùng lệnh:


lsblk -f

Sau khi chỉnh sửa /etc/fstab, hãy thử mount để kiểm tra:


sudo mount -a
df -h /var/log

Tạo và quản lý Snapshots

Snapshot là một trong những tính năng mạnh mẽ nhất của Btrfs subvolume. Chúng cho phép bạn tạo ‘ảnh chụp nhanh’ trạng thái của filesystem tại một thời điểm cụ thể. Ban đầu, snapshot không chiếm thêm nhiều không gian đĩa vì nó chia sẻ dữ liệu với subvolume gốc. Chỉ khi có dữ liệu thay đổi, không gian mới được sử dụng để lưu trữ các khối dữ liệu mới đó.

Tạo Snapshot

Cú pháp để tạo snapshot:


sudo btrfs subvolume snapshot <source_subvolume_path> <destination_snapshot_path>

Ví dụ, để tạo một snapshot của subvolume root trước khi thực hiện một bản cập nhật hệ thống lớn:


sudo btrfs subvolume snapshot / /.snapshots/root_before_update_$(date +%F_%H-%M)

Trong ví dụ này, .snapshots là một thư mục được tạo để chứa các snapshot. Bạn nên đặt tên snapshot theo ngày giờ để dễ quản lý và nhận diện.

Mặc định, snapshot có thể ghi (writable). Nếu bạn muốn tạo một snapshot chỉ đọc (read-only), hãy thêm tùy chọn -r:


sudo btrfs subvolume snapshot -r /home /.snapshots/home_ro_backup

Liệt kê Snapshots

Vì snapshot cũng là một dạng subvolume, bạn có thể liệt kê chúng tương tự như các subvolume khác:


sudo btrfs subvolume list /

Phục hồi từ Snapshot

Đây là lúc snapshot thể hiện rõ sức mạnh của nó. Nếu một bản cập nhật khiến hệ thống không ổn định, bạn có thể dễ dàng phục hồi về trạng thái của snapshot trước đó.

Quy trình phục hồi thường bao gồm các bước sau:

  1. Khởi động vào môi trường recovery (ví dụ: live USB của Fedora). Hoặc nếu bạn đã cấu hình GRUB để boot vào một snapshot cũ còn hoạt động thì có thể dùng cách đó.
  2. Tìm ID của subvolume root hiện tại và snapshot bạn muốn phục hồi.
  3. Xóa subvolume root hiện tại.
  4. Tạo một writable snapshot từ snapshot bạn muốn phục hồi.
  5. Đặt snapshot mới này làm subvolume mặc định (default subvolume).
  6. Khởi động lại hệ thống.

Ví dụ, giả sử bạn muốn phục hồi về snapshot root_before_update_2026-03-11_10-00:


# 1. Mount phân vùng Btrfs của bạn (ví dụ: /dev/sda3) vào một điểm tạm thời
sudo mount /dev/sda3 /mnt

# 2. Liệt kê subvolume để xác định tên của snapshot và subvolume gốc
sudo btrfs subvolume list /mnt
# Giả sử snapshot của bạn là .snapshots/root_before_update_2026-03-11_10-00

# 3. Xóa subvolume gốc hiện tại (rất cẩn thận với bước này!)
sudo btrfs subvolume delete /mnt/root

# 4. Tạo một writable snapshot từ snapshot bạn muốn phục hồi
sudo btrfs subvolume snapshot /mnt/.snapshots/root_before_update_2026-03-11_10-00 /mnt/root

# 5. Đặt snapshot mới này làm subvolume mặc định
sudo btrfs subvolume set-default $(btrfs subvolume show /mnt/root | awk '/Subvolume ID:/ {print $NF}') /mnt/

# 6. Unmount và khởi động lại
sudo umount /mnt
sudo reboot

Lưu ý: Việc phục hồi này cần được thực hiện cẩn thận và bạn nên có kinh nghiệm với môi trường recovery. Luôn sao lưu dữ liệu quan trọng trước khi thực hiện các thao tác lớn.

Xóa Subvolume/Snapshot

Khi một subvolume hoặc snapshot không còn cần thiết, bạn có thể xóa nó để giải phóng không gian:


sudo btrfs subvolume delete /path/to/subvolume_or_snapshot

Ví dụ:


sudo btrfs subvolume delete /.snapshots/root_old_snapshot

Kiểm tra và giám sát

Sau khi cấu hình, việc kiểm tra và theo dõi tình trạng của filesystem Btrfs và các subvolume là rất quan trọng để đảm bảo mọi thứ hoạt động trơn tru.

Kiểm tra không gian sử dụng

Lệnh df -h sẽ cung cấp cái nhìn tổng quan về không gian đĩa. Tuy nhiên, để xem không gian sử dụng chi tiết hơn theo từng subvolume, bạn có thể dùng btrfs filesystem du:


sudo btrfs filesystem du -s /path/to/subvolume

Hoặc để xem toàn bộ filesystem:


sudo btrfs filesystem du /

Kiểm tra lỗi Btrfs Filesystem

Btrfs có các tính năng kiểm tra tính toàn vẹn dữ liệu (checksumming). Bạn có thể kiểm tra filesystem để tìm lỗi tiềm ẩn:


sudo btrfs scrub start /

Lệnh này sẽ quét toàn bộ filesystem để kiểm tra dữ liệu và metadata xem có bị hỏng không. Bạn có thể kiểm tra trạng thái của quá trình scrub với:


sudo btrfs scrub status /

Tối ưu hóa không gian (Chống phân mảnh và Nén dữ liệu)

Btrfs hỗ trợ nén dữ liệu để tiết kiệm không gian lưu trữ. Bạn có thể kích hoạt nén ở cấp subvolume hoặc ở cấp file. Ví dụ, để nén một subvolume:


# Cần mount lại với tùy chọn nén, ví dụ compress=zstd:3 trong /etc/fstab
# Hoặc nén thủ công một thư mục:
sudo btrfs filesystem defragment -r -v -c zstd /path/to/directory

Chống phân mảnh (defragmentation) cũng có thể được thực hiện. Mặc dù với filesystem CoW, nó ít cần thiết hơn so với Ext4. Tuy nhiên, nếu bạn có các file lớn thay đổi thường xuyên, chống phân mảnh có thể giúp cải thiện hiệu suất:


sudo btrfs filesystem defragment -r /path/to/directory

Kết luận

Btrfs subvolume và các tính năng liên quan như snapshot mang lại cấp độ quản lý và bảo vệ dữ liệu mạnh mẽ mà các filesystem truyền thống khó có thể sánh được. Với Fedora, điều này càng trở nên dễ tiếp cận hơn khi Btrfs đã là lựa chọn mặc định.

Việc hiểu và làm chủ Btrfs subvolume giúp bạn không chỉ tối ưu không gian lưu trữ mà còn có một ‘lưới an toàn’ vững chắc cho các bản cập nhật hay thử nghiệm hệ thống. Đối với một kỹ sư IT như mình, khả năng phục hồi nhanh chóng là vô giá, giúp mình tự tin hơn khi khám phá và áp dụng các công nghệ mới trên máy phát triển của mình.

Hãy dành thời gian thử nghiệm và tích hợp Btrfs subvolume vào quy trình làm việc của bạn. Bạn sẽ thấy nó là một công cụ cực kỳ hữu ích để duy trì một hệ thống Linux ổn định và hiệu quả.

Share: