Cơn ác mộng đầy ổ cứng lúc 2 giờ sáng
Đúng 2 giờ sáng thứ Ba, điện thoại mình rung liên hồi. Hệ thống giám sát báo động: Ổ backup cho cụm database khách hàng đã chạm ngưỡng 98%. Với tốc độ sinh log hiện tại, chỉ 30 phút nữa là toàn bộ tiến trình ghi sẽ treo cứng. Trong cơn ngái ngủ, mình đứng trước hai lựa chọn: Một là chi tiền mua thêm dung lượng cloud (vừa đắt vừa tốn thời gian chờ duyệt), hai là tìm cách “nén” đống dữ liệu hiện có lại.
Dùng Fedora làm OS chính đã lâu, mình khá tin tưởng vào các công cụ hệ thống của nó. Xóa log là điều không thể vì quy định bảo mật. Nén bằng gzip thì lại khiến việc truy xuất dữ liệu sau này chậm như rùa. Cuối cùng, mình chọn VDO (Virtual Data Optimizer). Đây là công cụ bí mật trong hệ sinh thái Fedora/RHEL, cho phép xử lý dữ liệu cực kỳ thông minh ở mức block.
VDO vs Btrfs vs ZFS: Chọn phe nào để tối ưu Storage?
Trước khi gõ lệnh, mình đã cân nhắc ba phương án phổ biến. Mỗi bên đều có thế mạnh riêng nhưng không phải lúc nào cũng phù hợp với môi trường Production cần sự ổn định.
- Btrfs: Đây là mặc định trên Fedora, hỗ trợ nén khá ổn. Tuy nhiên, tính năng chống trùng lặp (deduplication) của nó vẫn chưa chạy tự động ở mức block. Bạn thường phải chạy tool quét định kỳ, khá phiền phức.
- ZFS: Một gã khổng lồ trong làng storage. ZFS nén và dedupe cực tốt nhưng lại gặp vấn đề về bản quyền kernel trên Linux. Mỗi lần Fedora cập nhật kernel là một lần mình nín thở sợ hãi module ZFS bị lỗi.
- VDO: Hoạt động như một lớp layer nằm dưới file system. Nó nén và khử trùng lặp ngay khi dữ liệu đang được ghi (inline). Vì làm việc ở mức block, bạn có thể thoải mái dùng XFS hoặc Ext4 phía trên mà không lo xung đột.
Cái giá của sự tiết kiệm
VDO không phải là chiếc đũa thần không tốn phí. Qua thực tế triển khai, mình rút ra hai điểm cần lưu ý kỹ:
- Ăn RAM: VDO cần khoảng 1GB RAM cho mỗi 1TB dung lượng vật lý để quản lý chỉ mục (index). Nếu server của bạn chỉ có 2GB RAM cho tất cả dịch vụ thì tốt nhất nên bỏ qua VDO.
- Độ trễ (Latency): Do phải tính toán mã băm (hash) để kiểm tra trùng lặp trước khi ghi, tốc độ ghi sẽ giảm khoảng 10-15% so với ổ cứng thuần.
Tại sao VDO lại là “cứu tinh” cho server log?
Dữ liệu backup thường chứa rất nhiều file giống hệt nhau, chỉ khác vài dòng log. Với VDO, nếu bạn có 10 bản snapshot của một database 10GB, thay vì tốn 100GB, bạn có thể chỉ mất khoảng 12-15GB thực tế. Điều này biến ổ cứng 100GB vật lý của mình thành một không gian ảo lên tới 500GB một cách an toàn.
Quy trình triển khai VDO trên Fedora Server
Các bước dưới đây mình đã thực hiện trực tiếp trên server đang chạy. Hãy nhớ luôn backup dữ liệu quan trọng trước khi can thiệp vào cấu trúc ổ đĩa.
Bước 1: Cài đặt package
Trên các bản Fedora rút gọn, công cụ VDO thường bị lược bỏ. Hãy cài đặt chúng bằng lệnh sau:
sudo dnf install vdo kmod-kvdo -y
Cài xong, bạn cần kích hoạt để dịch vụ tự khởi động cùng hệ thống:
sudo systemctl enable --now vdo
Bước 2: Chuẩn bị ổ đĩa
Giả sử mình có ổ đĩa trống tại /dev/sdb. Dùng lệnh lsblk để kiểm tra lại tên ổ đĩa, tránh format nhầm ổ chứa OS.
lsblk
Bước 3: Tạo Volume ảo
Mình tạo một thiết bị VDO tên là vdo_storage. Ở đây, mình thiết lập dung lượng ảo lên 200GB dù ổ vật lý chỉ có 50GB (tỉ lệ 4:1).
sudo vdo create --name=vdo_storage \
--device=/dev/sdb \
--vdoLogicalSize=200G
Bước 4: Thiết lập File System
Bây giờ, thiết bị mới nằm tại /dev/mapper/vdo_storage. Mình dùng XFS vì khả năng quản lý file lớn rất tốt trên Fedora.
sudo mkfs.xfs -K /dev/mapper/vdo_storage
Cờ -K giúp bỏ qua lệnh discard, tiết kiệm thời gian chờ đợi khi format ổ đĩa lớn.
Bước 5: Cấu hình Mount tự động
Để ổ đĩa tự gắn lại sau khi reboot, hãy thêm dòng này vào /etc/fstab. Lưu ý: Tham số x-systemd.requires=vdo.service là bắt buộc để tránh lỗi treo boot.
/dev/mapper/vdo_storage /mnt/vdo_data xfs defaults,x-systemd.requires=vdo.service 0 0
Nhìn vào kết quả thực tế
Sau khi đẩy 20GB log trùng lặp vào, lệnh df -h vẫn báo chiếm 20GB. Tuy nhiên, khi kiểm tra bằng công cụ chuyên dụng:
sudo vdostats --human-readable
Mình thở phào nhẹ nhõm. Dung lượng thực tế bị chiếm dụng trên ổ vật lý chỉ mất vỏn vẹn 4.2GB. Tiết kiệm được gần 80% không gian lưu trữ!
Ba bài học xương máu khi dùng VDO
- Kiềm chế sự tham lam: Đừng set dung lượng ảo quá lớn (như tỉ lệ 10:1). Nếu ổ vật lý đầy mà dung lượng ảo vẫn báo trống, hệ thống sẽ văng lỗi I/O cực kỳ khó chịu.
- Quên lệnh df đi: Luôn dùng
vdostatsđể biết thực tế bạn còn bao nhiêu dung lượng vật lý.df -hlúc này chỉ mang tính tham khảo. - Backup vẫn là ưu tiên số 1: VDO chỉ giúp tiết kiệm đĩa, không bảo vệ dữ liệu khỏi hỏng hóc vật lý. Hãy luôn có phương án dự phòng bên ngoài.
VDO là giải pháp tuyệt vời để giải quyết bài toán lưu trữ mà không cần nâng cấp phần cứng ngay lập tức. Nếu bạn đang chạy các dịch vụ nhiều log hoặc backup, hãy thử áp dụng ngay để thấy sự khác biệt.

