Hướng dẫn cấu hình LVM trên Ubuntu: Tạo, mở rộng và quản lý ổ đĩa online không mất dữ liệu

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

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ùng pvdisplay để kiểm tra chỉ số Physical Extent (PE).
  • Volume Group: Gõ vgs xem dung lượng rảnh (VFree); dùng vgdisplay để xem kích thước PE chunk (mặc định 4MB).
  • Logical Volume: Gõ lvs kiểm tra thông số từng volume; dùng lvdisplay để 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.

Share: