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ả / và /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:
- 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 đó.
- Tìm ID của subvolume
roothiện tại và snapshot bạn muốn phục hồi. - Xóa subvolume
roothiện tại. - Tạo một writable snapshot từ snapshot bạn muốn phục hồi.
- Đặt snapshot mới này làm subvolume mặc định (default subvolume).
- 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ả.
