Tăng dung lượng disk VPS Ubuntu trong Proxmox

Quy trình an toàn mở rộng disk cho Ubuntu VM trên Proxmox: tách bạch các bước tăng disk ảo, nới phân vùng, PV/LV (LVM) và filesystem; có snapshot, kiểm tra, cách xử lỗi và rollback.

NHT
· 6 phút đọc
Tăng dung lượng disk VPS Ubuntu trong Proxmox

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: growpart phân vùng cuối → resize2fs (ext4) hoặc xfs_growfs (XFS).
  • LVM: growpart (nếu có phân vùng) → pvresizelvextend -r (ext4) hoặc lvextend + 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

  1. Chọn VM → Hardware → chọn Hard Disk (ví dụ scsi0).
  2. 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 (partprobe hoặc reboot).

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ài cloud-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 partprobe hoặ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ùng xfs_growfs -d / (không dùng resize2fs).
  • 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 tra pvs, parted -l.
  • lvextend -r lỗi vì thiếu resize tool: Với ext4 cần e2fsprogs (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/nvme0n1p3 khi dùng growpart.

Xem thêm trên TechNT

Tài liệu tham khảo