Vì sao server production nên dùng LVM thay vì phân vùng cứng?
Hệ thống giám sát gửi cảnh báo: phân vùng /data chứa database MySQL 150GB vừa chạm ngưỡng 95% disk usage. Nếu dùng phân vùng tĩnh kiểu GPT hay MBR truyền thống, bạn sẽ đối mặt với bài toán đau đầu. Bạn phải xin downtime, unmount ổ đĩa và resize qua GParted. Dịch vụ ngưng trệ, rủi ro lỗi dữ liệu rất cao.
LVM (Logical Volume Manager) xử lý gọn gàng tình huống này. Công nghệ này đóng vai trò lớp trừu tượng trung gian giữa ổ cứng vật lý và filesystem. Thay vì gắn cứng thư mục vào từng phân vùng, LVM gom nhiều đĩa cứng thành một kho tài nguyên chung (Storage Pool). Từ kho này, bạn cấp phát dung lượng theo nhu cầu thực tế.
Hệ thống mở rộng linh hoạt mà không cần reboot. Dịch vụ chạy liên tục, đảm bảo zero-downtime.
Trước khi cấu hình, bạn cần nắm rõ 3 tầng kiến trúc cốt lõi:
- Physical Volume (PV): Thiết bị lưu trữ vật lý hoặc phân vùng raw (như
/dev/sdb,/dev/nvme1n1). LVM ghi metadata lên đầu đĩa để quản lý. - Volume Group (VG): Nhóm gom một hoặc nhiều PV thành bể chứa dung lượng. Bạn có thể gắn thêm ổ đĩa mới vào VG bất kỳ lúc nào mà không làm gián đoạn pool.
- Logical Volume (LV): Phân vùng logic được cấp phát từ VG. Bạn format filesystem (ext4, xfs) trên LV này rồi mount vào hệ điều hành như ổ đĩa tiêu chuẩn.
Chuẩn bị môi trường trên Ubuntu Server
Các bản Ubuntu Server 20.04/22.04/24.04 tiêu chuẩn đều cài sẵn bộ công cụ LVM. Tuy nhiên, nếu dùng image Minimal từ AWS, Linode hay Hetzner, bạn nên kiểm tra và cài bổ sung package lvm2:
sudo apt update && sudo apt install -y lvm2
Kiểm tra danh sách block device hiện có:
lsblk
Giả sử server vừa gắn thêm một ổ đĩa trống /dev/sdb dung lượng 50GB. Chúng ta sẽ dùng ổ đĩa này để thiết lập hoàn chỉnh một cụm LVM cho production.
Thực hành: Tạo và cấu hình LVM từng bước
1. Khởi tạo Physical Volume (PV)
Chuyển đổi block device /dev/sdb sang trạng thái PV chịu sự quản lý của LVM:
sudo pvcreate /dev/sdb
Màn hình xuất thông báo xác nhận: Physical volume "/dev/sdb" successfully created.
2. Gom ổ đĩa vào Volume Group (VG)
Tạo Volume Group có tên vg_data từ ổ /dev/sdb vừa khởi tạo:
sudo vgcreate vg_data /dev/sdb
Kho chứa vg_data hiện có trọn vẹn 50GB. Sau này, nếu gắn thêm ổ cứng 100GB /dev/sdc, bạn chỉ cần gõ lệnh sudo vgextend vg_data /dev/sdc. Pool tự động mở rộng lên 150GB ngay lập tức.
3. Cắt Logical Volume (LV) và format Filesystem
Đừng vội cấp phát toàn bộ dung lượng. Hãy trích trước 20GB từ vg_data để làm phân vùng chứa ứng dụng (lv_app), giữ lại 30GB dự phòng:
sudo lvcreate -L 20G -n lv_app vg_data
Khởi tạo filesystem ext4 trên phân vùng vừa cắt:
sudo mkfs.ext4 /dev/vg_data/lv_app
Tạo mount point và gắn ổ vào cây thư mục:
sudo mkdir -p /mnt/data
sudo mount /dev/vg_data/lv_app /mnt/data
Cấu hình mount tự động sau mỗi lần khởi động lại server. Lấy UUID của LV bằng lệnh blkid /dev/vg_data/lv_app, sau đó ghi vào file /etc/fstab:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data ext4 defaults 0 2
4. Mở rộng Logical Volume online khi đầy ổ
Giả sử sau 3 tháng vận hành, ứng dụng phình to và /mnt/data sắp cạn dung lượng. Bạn cần nới rộng thêm 15GB từ phần còn dư trong vg_data.
Sử dụng lệnh lvextend kèm tham số -r (resizefs):
sudo lvextend -L +15G /dev/vg_data/lv_app -r
Cờ -r giữ vai trò then chốt. Nó chỉ thị LVM kéo giãn phân vùng logic, đồng thời tự động kích hoạt resize filesystem (hỗ trợ cả ext4 lẫn XFS) trên ổ đang mount. Bạn không cần gõ thêm lệnh resize2fs hay xfs_growfs.
Trường hợp muốn dồn toàn bộ 100% dung lượng trống còn lại của VG vào phân vùng này, dùng cú pháp sau:
sudo lvextend -l +100%FREE /dev/vg_data/lv_app -r
Tiến trình đọc ghi của database hay web server vẫn diễn ra liên tục. Hệ thống không ngắt kết nối và không gián đoạn dịch vụ.
Vận hành và giám sát LVM hiệu quả
Quản trị viên cần nhớ 3 cặp lệnh cốt lõi để kiểm tra nhanh và chi tiết theo từng tầng:
- Physical Volume: Gõ
pvsđể xem nhanh; dùngpvdisplayđể kiểm tra chỉ số Physical Extent (PE). - Volume Group: Gõ
vgsxem dung lượng rảnh (VFree); dùngvgdisplayđể xem kích thước PE chunk (mặc định 4MB). - Logical Volume: Gõ
lvskiểm tra thông số từng volume; dùnglvdisplayđể lấy đường dẫn mapper chi tiết.
sudo vgs
sudo lvs
Xác nhận kích thước hiển thị trên OS:
df -hT /mnt/data
Ổ đĩa tăng ngay lên 35GB mà không cần thao tác unmount.
Kinh nghiệm thiết lập alerting: Đừng chỉ giám sát % dung lượng qua df -h. Với kiến trúc LVM, bạn nên tạo metric theo dõi trường VFree của Volume Group trên Prometheus Node Exporter. Khi dung lượng dự phòng của VG giảm xuống dưới 15%, hệ thống cảnh báo sớm giúp team SysAdmin kịp bổ sung đĩa cứng trước khi phân vùng sản phẩm rơi vào tình trạng báo động.

