Vấn Đề Dung Lượng Đĩa Cứ Quay Đi Quay Lại
Bạn cấp phát một VPS, phân bổ 20GB cho /var, rồi sáu tháng sau log và database đã lấp đầy hoàn toàn. Cách xử lý truyền thống? Boot vào rescue mode, resize phân vùng bằng fdisk, rồi cầu nguyện không có gì hỏng. Tôi đã trải qua vòng lặp đó hai lần trong năm đầu quản lý server — và qua hơn 10 server trong ba năm, nó chưa bao giờ hết làm tôi bực bội.
Điều tôi cuối cùng nhận ra: quyết định phân vùng đĩa lúc cài đặt ban đầu rồi sẽ sai vào một thời điểm nào đó. Hoặc bạn phân bổ quá nhiều và lãng phí dung lượng, hoặc phân bổ quá ít rồi phải chạy vạy sau này. LVM (Logical Volume Manager) sinh ra để phá vỡ vòng lặp đó. Nó tách biệt cấu trúc đĩa vật lý khỏi các phân vùng logic mà hệ điều hành nhìn thấy, và chính khoảng cách đó mang lại cho bạn sự linh hoạt thực sự sau khi đã triển khai xong.
Các Khái Niệm Cốt Lõi: LVM Hoạt Động Như Thế Nào
LVM thêm một lớp trừu tượng mỏng giữa các đĩa vật lý và các mount point. Ba khái niệm bao quát toàn bộ mô hình:
Physical Volume (PV)
PV là một đĩa thô hoặc phân vùng được giao cho LVM quản lý. Có thể là /dev/sdb, /dev/sdc1, hay thậm chí một mảng RAID. LVM ghi metadata của riêng nó lên PV để theo dõi dung lượng khả dụng.
Volume Group (VG)
Hãy coi VG như một kho lưu trữ tổng hợp. Bạn thêm nhiều PV vào một VG, và LVM xem không gian kết hợp đó như một bucket lớn, linh hoạt. Cần thêm dung lượng cho kho sau này? Thêm ổ đĩa mới — không cần reboot, không cần di chuyển dữ liệu, không có rắc rối gì.
Logical Volume (LV)
LV là thứ mà hệ điều hành của bạn thực sự mount. Nó được cắt ra từ kho VG. Cần 10GB cho /var? Tạo một LV 10GB, format nó, mount nó. Cần 15GB vào tháng tới? Mở rộng bằng một lệnh. Filesystem nằm trên LV và không quan tâm đến các đĩa vật lý bên dưới.
Về mặt trực quan, stack trông như thế này:
Đĩa Vật Lý → Physical Volumes → Volume Group → Logical Volumes → Filesystems
/dev/sdb → PV → pool_vg → lv_var (10G) → ext4 tại /var
/dev/sdc → PV → → lv_home (20G) → xfs tại /home
Thực Hành: Thiết Lập LVM Từ Đầu
Bước 1: Cài Đặt Công Cụ LVM
Trên Debian/Ubuntu:
sudo apt update && sudo apt install lvm2 -y
Trên RHEL/AlmaLinux/Rocky:
sudo dnf install lvm2 -y
Bước 2: Tạo Physical Volumes
Giả sử bạn đã thêm hai ổ đĩa mới (/dev/sdb và /dev/sdc):
sudo pvcreate /dev/sdb /dev/sdc
sudo pvs # xác minh
Kết quả pvs sẽ hiển thị cả hai ổ đĩa, dung lượng của chúng và VG mà chúng thuộc về (để trống vì chưa có).
Bước 3: Tạo Volume Group
sudo vgcreate data_vg /dev/sdb /dev/sdc
sudo vgs # xác minh
Xong. data_vg bây giờ chứa dung lượng kết hợp của cả hai ổ đĩa thành một kho duy nhất.
Bước 4: Tạo Logical Volumes
# Tạo LV 15GB cho /var
sudo lvcreate -L 15G -n lv_var data_vg
# Tạo LV 25GB cho /home
sudo lvcreate -L 25G -n lv_home data_vg
# Dùng toàn bộ dung lượng còn lại cho data volume
sudo lvcreate -l 100%FREE -n lv_data data_vg
sudo lvs # xác minh cả ba
Bước 5: Format và Mount
sudo mkfs.ext4 /dev/data_vg/lv_var
sudo mkfs.ext4 /dev/data_vg/lv_home
sudo mkfs.xfs /dev/data_vg/lv_data
sudo mkdir -p /var/lvm_var /home/lvm_home /data
sudo mount /dev/data_vg/lv_var /var/lvm_var
sudo mount /dev/data_vg/lv_home /home/lvm_home
sudo mount /dev/data_vg/lv_data /data
Để mount tự động sau mỗi lần reboot, thêm các dòng này vào /etc/fstab:
/dev/data_vg/lv_var /var/lvm_var ext4 defaults 0 2
/dev/data_vg/lv_home /home/lvm_home ext4 defaults 0 2
/dev/data_vg/lv_data /data xfs defaults 0 2
Các Thao Tác Thực Sự Cứu Bạn
Mở Rộng Logical Volume (Trực Tiếp)
Lệnh này chính là lý do cốt lõi để dùng LVM. Mở rộng lv_var thêm 5GB trong khi đang được mount và sử dụng:
# Mở rộng LV
sudo lvextend -L +5G /dev/data_vg/lv_var
# Resize filesystem để sử dụng dung lượng mới (ext4)
sudo resize2fs /dev/data_vg/lv_var
# Với XFS (chỉ có thể tăng, không thể thu nhỏ)
sudo xfs_growfs /var/lvm_var
Không cần downtime. Không cần reboot. Filesystem vẫn hoạt động bình thường trong suốt quá trình.
Thêm Ổ Đĩa Mới vào VG Hiện Có
Kho của bạn sắp hết và bạn vừa gắn thêm ổ đĩa mới (/dev/sdd):
sudo pvcreate /dev/sdd
sudo vgextend data_vg /dev/sdd
sudo vgs # xác nhận tổng dung lượng mới
Dung lượng đó lập tức có sẵn để mở rộng LV. Trên một server production tôi từng bấm giờ thao tác này — từ đầu đến cuối, chưa đến 30 giây.
Thu Nhỏ Logical Volume
Thu nhỏ rủi ro hơn và cần thận trọng hơn. Luôn unmount trước, luôn backup dữ liệu. XFS không thể thu nhỏ — thao tác này chỉ áp dụng cho ext4.
# Unmount trước
sudo umount /var/lvm_var
# Kiểm tra filesystem
sudo e2fsck -f /dev/data_vg/lv_var
# Thu nhỏ filesystem TRƯỚC KHI thu nhỏ LV
sudo resize2fs /dev/data_vg/lv_var 10G
# Sau đó mới thu nhỏ LV
sudo lvreduce -L 10G /dev/data_vg/lv_var
# Mount lại
sudo mount /dev/data_vg/lv_var /var/lvm_var
Nguyên tắc bắt buộc: resize filesystem xuống kích thước nhỏ hơn kích thước LV mục tiêu, sau đó mới thu nhỏ LV. Làm ngược lại là mất dữ liệu. Hãy thực hành trên một VM thử nghiệm trước khi đụng vào production — tôi đã mắc sai lầm đó trên một dev server lúc 2 giờ sáng, đau lắm.
LVM Snapshot để Backup
Snapshot chụp lại trạng thái của LV tại một thời điểm nhất định. Hữu ích nhất ngay trước một thao tác rủi ro — nâng cấp package lớn, thay đổi cấu hình toàn bộ, bất cứ thứ gì bạn có thể muốn rollback:
# Tạo snapshot 2GB của lv_var
sudo lvcreate -L 2G -s -n lv_var_snap /dev/data_vg/lv_var
# Mount snapshot ở chế độ chỉ đọc
sudo mount -o ro /dev/data_vg/lv_var_snap /mnt/snapshot
# Xóa snapshot khi dùng xong
sudo umount /mnt/snapshot
sudo lvremove /dev/data_vg/lv_var_snap
Snapshot dùng cơ chế copy-on-write — chỉ các block thay đổi sau khi tạo mới được ghi vào snapshot volume, không phải toàn bộ bản sao. Hãy giữ snapshot tồn tại trong thời gian ngắn. Khi snapshot đầy dung lượng được cấp phát, LVM tự động đánh dấu nó là không hợp lệ và vô hiệu hóa. Bạn mất điểm phục hồi và dung lượng đã cấp phát bị lãng phí. Nếu LV nguồn đang được ghi tích cực, hãy cấp phát ít nhất 15–20% dung lượng của nó cho snapshot.
Các Lệnh Kiểm Tra Hữu Ích
Các lệnh nên chạy thường xuyên khi kiểm tra thiết lập LVM:
pvdisplay— thông tin chi tiết về physical volumesvgdisplay— kích thước VG, dung lượng trống, số PElvdisplay— đường dẫn LV, kích thước, trạng thái snapshotlsblk— hiển thị dạng cây tất cả block device bao gồm LVdf -h— mức sử dụng filesystem (các mount point)
# Tóm tắt nhanh toàn bộ LVM
sudo pvs && sudo vgs && sudo lvs
LVM Trong Thực Tế: Điều Thực Sự Quan Trọng
LVM giải quyết vấn đề cốt lõi của cách phân vùng đĩa truyền thống: bạn không còn phải làm đúng ngay từ lúc cài đặt. Bắt đầu với mức phân bổ hợp lý, rồi resize theo pattern sử dụng thực tế khi nó xuất hiện — không cần downtime production.
Ba lệnh đáng nhớ thuộc lòng: lvextend + resize2fs để resize trực tiếp, pvcreate + vgextend để thêm ổ đĩa vào kho, và lvcreate -s để snapshot trước các thay đổi rủi ro. Ba lệnh đó bao phủ 90% công việc LVM trong thực tế.
Server mới? Thiết lập LVM ngay từ đầu, dù bạn chắc chắn rằng mình sẽ không bao giờ cần resize. Chi phí thiết lập gần như bằng không. Lợi ích, khi bạn cuối cùng cần đến nó, là rất lớn.

