Bài này hướng dẫn mở rộng dung lượng disk cho Ubuntu VM trong Proxmox theo chuẩn production: tách bạch 4 lớp (disk ảo → phân vùng → LVM → filesystem), có snapshot, bước kiểm tra và đường lui rõ ràng.
TL;DR / Checklist nhanh
- Tạo snapshot/backup VM trên Proxmox.
- Tăng kích thước disk ảo (UI hoặc
qm resize). - Bên trong Ubuntu: xác định layout (không LVM vs LVM; ext4 hay XFS).
- Không LVM:
growpartphân vùng cuối →resize2fs(ext4) hoặcxfs_growfs(XFS). - LVM:
growpart(nếu có phân vùng) →pvresize→lvextend -r(ext4) hoặclvextend+xfs_growfs(XFS). - Kiểm tra bằng
lsblk,df -h,pvs/vgs/lvs. Có vấn đề → rollback snapshot.
Điều kiện, phạm vi và cảnh báo rủi ro
- Môi trường tham chiếu: Proxmox VE 7/8; Ubuntu 20.04/22.04/24.04 (kernel mặc định hỗ trợ online resize ext4/XFS).
- Yêu cầu: Quyền truy cập Proxmox UI/CLI và console/SSH VM; đủ quyền
sudo. - Rủi ro: Thao tác sai phân vùng/LVM có thể làm VM không boot hoặc mất dữ liệu. Luôn tạo snapshot/backup trước khi làm. Không thu nhỏ (shrink) khi chưa thu nhỏ filesystem/partition theo đúng trình tự (cảnh báo chính thức từ Proxmox).
- Thời điểm cập nhật: 08/2026. Cú pháp có thể thay đổi theo phiên bản, luôn so lại tài liệu chính thức ở cuối bài.
Nhận diện layout đĩa trước khi làm
Đặt tên disk trong VM có thể là sda/vda/nvme0n1. Hãy kiểm tra kỹ:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
Nhìn vào:
- Không LVM: root thường là một phân vùng như
/dev/sda3(FSTYPE=ext4 hoặc xfs) gắn tại/. - LVM: root là LV như
/dev/mapper/ubuntu--vg-ubuntu--lv; phân vùng chứa PV thường là/dev/sda3. Kiểm tra thêm:
pvs; vgs; lvs -o lv_name,vg_name,lv_path,lv_size
Lưu ý với máy EFI/GPT: thường có ESP (sda1 ~512MB), /boot (sda2) và root ở phân vùng cuối (sda3). Chỉ mở rộng phân vùng cuối cùng chứa root/PV.
Bước 1 — Mở rộng disk ảo trên Proxmox
Qua Web UI
- Chọn VM → Hardware → chọn Hard Disk (ví dụ
scsi0). - Resize Disk → nhập phần tăng thêm, ví dụ
+180G→ OK.
Qua CLI Proxmox
# Trên host Proxmox, ví dụ VMID=101, disk là scsi0
sudo qm resize 101 scsi0 +180G
Kỳ vọng: Kích thước disk ảo tăng. Bên trong VM, kernel có thể tự nhận diện dung lượng mới; nếu chưa thấy, chạy:
# Thay sdX cho phù hợp (sda/vda/nvme0n1)
echo 1 | sudo tee /sys/class/block/sda/device/rescan
lsblk -o NAME,SIZE,TYPE
Bước 2A — Không LVM: mở rộng phân vùng và filesystem
Áp dụng khi root là phân vùng trực tiếp (ví dụ /dev/sda3).
2A.1 Mở rộng phân vùng cuối
sudo apt update && sudo apt install -y cloud-guest-utils
# Ví dụ disk /dev/sda, phân vùng 3 là root
sudo growpart /dev/sda 3
Kiểm tra:
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
Kỳ vọng: /dev/sda3 đã nới ra chiếm hết phần trống mới.
2A.2 Mở rộng filesystem
- ext4:
sudo resize2fs /dev/sda3
- XFS (mở rộng theo mountpoint):
sudo xfs_growfs -d /
Kiểm tra:
df -h /
Kỳ vọng: / hiển thị dung lượng mới (khớp với phần tăng).
Bước 2B — LVM: mở rộng PV → LV → filesystem
Áp dụng khi root là LV (LVM). Ví dụ layout GPT: /dev/sda3 = PV, VG ubuntu-vg, LV ubuntu-lv gắn tại /.
2B.1 Nếu PV nằm trong phân vùng: mở rộng phân vùng trước
sudo apt update && sudo apt install -y cloud-guest-utils
sudo growpart /dev/sda 3
Nếu PV đặt trực tiếp trên toàn disk (không có phân vùng, hiếm gặp), bỏ qua bước growpart.
2B.2 Nới Physical Volume
# Thay /dev/sda3 bằng PV thực tế (xem pvs)
sudo pvresize /dev/sda3
pvs
2B.3 Nới Logical Volume và filesystem
Xác định LV của root:
lvs -o lv_name,vg_name,lv_path,lv_size,mountpoint --reportformat json | jq -r '.report[0].lv[] | select(.mountpoint=="/") | .lv_path'
# Nếu chưa có jq, xem bằng: lvs -o lv_name,vg_name,lv_path,lv_size,mountpoint
Ví dụ LV là /dev/ubuntu-vg/ubuntu-lv:
- ext4 (dùng
-rđể tự resize FS):
sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
- XFS:
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo xfs_growfs -d /
Kiểm tra:
pvs; vgs; lvs
df -h /
Kiểm tra sau khi mở rộng
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
sudo file -sL $(findmnt -no SOURCE /)
df -h /
Kỳ vọng: Disk ảo tăng; phân vùng/PV chiếm đủ; LV/FS hiển thị dung lượng mới.
Rollback / Đường lui an toàn
- Nếu đã snapshot VM trên Proxmox: dùng UI chọn snapshot → Rollback (VM sẽ quay lại trạng thái trước khi resize).
- Nếu VM không boot sau khi can thiệp phân vùng/LVM: tắt VM từ Proxmox, Rollback snapshot. Không thử “thu nhỏ ngược” partition khi chưa nắm chắc, vì rất rủi ro.
- Nếu hệ thống vẫn chạy nhưng không thấy dung lượng mới: kiểm tra lại từng lớp (disk ảo → partition/PV → LV → FS). Có thể cần reboot để kernel nạp lại partition table (
partprobehoặcreboot).
Mẫu script tham khảo (dùng cẩn trọng)
Script 1 — Không LVM, ext4 (root là phân vùng cuối, ví dụ /dev/sda3):
#!/usr/bin/env bash
set -euo pipefail
PART="/dev/sda3" # Sửa cho phù hợp (vd: /dev/vda3, /dev/nvme0n1p3)
DISK="/dev/sda" # Sửa cho phù hợp
sudo lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
sudo apt update && sudo apt install -y cloud-guest-utils
# Nới phân vùng cuối
sudo growpart "$DISK" "${PART##*[a-z]}" || true
# Nới ext4
sudo resize2fs "$PART"
echo "Done."
df -h /
Script 2 — LVM (ext4, tự resize FS):
#!/usr/bin/env bash
set -euo pipefail
PV_PART="/dev/sda3" # Nếu PV trên phân vùng; nếu PV trên toàn disk, đặt thành /dev/sda
LV_PATH="/dev/ubuntu-vg/ubuntu-lv" # Sửa cho đúng với lvs
sudo apt update && sudo apt install -y cloud-guest-utils
# Nếu là phân vùng, nới phân vùng trước (bỏ qua nếu PV trên toàn disk)
if [[ "$PV_PART" =~ [0-9]$ ]]; then
DISK=${PV_PART%[0-9]}
IDX=${PV_PART##*[!0-9]}
sudo growpart "$DISK" "$IDX"
fi
sudo pvresize "$PV_PART"
sudo lvextend -r -l +100%FREE "$LV_PATH"
echo "Done."
pvs; vgs; lvs
df -h /
Lưu ý: Luôn đọc, sửa biến cho đúng máy của bạn trước khi chạy. Khuyến nghị chạy từng lệnh thủ công để kiểm soát kết quả.
Lỗi thường gặp và cách xử lý
growpart: command not found: Càicloud-guest-utils.- Gặp lỗi khi nới phân vùng: device busy/không cập nhật bảng phân vùng: chạy
sudo partprobehoặc reboot VM rồi thử lại bước kiểm tra. Đảm bảo chọn đúng phân vùng cuối. - Filesystem không phải ext4: Kiểm tra
lsblk -f. Với XFS dùngxfs_growfs -d /(không dùngresize2fs). - LVM không thấy free space sau
pvresize: Xem lại bạn đãgrowpartđúng phân vùng PV chưa (thường là phân vùng cuối). Kiểm trapvs,parted -l. lvextend -rlỗi vì thiếu resize tool: Với ext4 cầne2fsprogs(thường có sẵn). Nếu thiếu, cài và lặp lại.- VM không boot sau khi can thiệp: Dừng VM và rollback snapshot trong Proxmox. Không cố tự “sửa tay” bảng phân vùng nếu không có backup.
FAQ
- Có cần reboot không? Thường không, nhưng nếu kernel chưa nạp lại partition table, reboot sẽ giúp an toàn.
- Có thể thu nhỏ (shrink) không? Rất rủi ro nếu làm sai thứ tự; không khuyến nghị trên production.
- CEPH/RBD hay ZFS backend có khác gì? Bước tăng disk ảo phía Proxmox khác backend nội bộ, nhưng trong guest vẫn là quy trình partition/LVM/FS như bài.
- Dùng NVMe (
/dev/nvme0n1) thì sao? Tương tự; chú ý cú pháp phân vùng là/dev/nvme0n1p3khi dùnggrowpart.
Xem thêm trên TechNT
- Setup website với Nginx trên VPS Ubuntu – hữu ích khi bạn cần kiểm tra dịch vụ web sau khi mở rộng dung lượng.
- Cloud hosting khác gì với shared hosting? – kiến thức nền tảng để lên kế hoạch tài nguyên hợp lý.