Ubuntu: mở rộng dung lượng disk bằng LVM
Hướng dẫn Linux Server · cập nhật 14/08/2026
Để mở rộng dung lượng disk trên Ubuntu sau khi tăng ổ ảo, bạn nới phân vùng bằng parted, cập nhật Physical Volume bằng pvresize, kéo Logical Volume bằng lvextend rồi giãn hệ thống tệp bằng resize2fs. Bốn lệnh, mất khoảng 5 phút và không cần khởi động lại máy.
Bạn gặp việc này khi đã tăng ổ đĩa ở bảng điều khiển VPS hoặc VMware nhưng lệnh df -h vẫn báo dung lượng cũ. Ubuntu Server cài mặc định dùng LVM, nên phần dung lượng mới thêm nằm im ở cuối ổ cho tới khi bạn kéo từng lớp lên.
- Xác nhận ổ đĩa đã lớn hơn và tìm tên phân vùng gốc.
- Nới phân vùng để chiếm phần trống mới.
- Cập nhật Physical Volume của LVM.
- Kéo Logical Volume ra hết phần trống.
- Giãn hệ thống tệp rồi kiểm bằng df.
Sao lưu dữ liệu trước khi chạy. Thao tác trên bảng phân vùng có thể làm mất toàn bộ dữ liệu nếu gõ nhầm số phân vùng hoặc mất điện giữa chừng. Với VPS, chụp một bản snapshot là đủ. Đã kiểm trên Ubuntu Server 22.04 LTS cài mặc định với LVM.
Vì sao Ubuntu không tự nhận dung lượng ổ đĩa mới thêm
Tăng ổ ảo ở lớp ảo hoá chỉ làm thiết bị khối lớn hơn. Bên trong máy ảo còn ba lớp nữa chưa biết chuyện đó: bảng phân vùng, LVM và hệ thống tệp. Mỗi lớp giữ kích thước riêng ghi lúc cài máy, nên phải kéo lần lượt từ dưới lên trên thì phần trống mới dùng được.
| Lớp | Giữ thông tin gì | Lệnh kéo ra |
|---|---|---|
Thiết bị khối /dev/sda | Dung lượng vật lý của ổ | Tăng ở bảng điều khiển VPS |
Phân vùng /dev/sda3 | Điểm đầu và điểm cuối trên ổ | parted resizepart |
| Physical Volume | Vùng LVM được phép dùng | pvresize |
| Logical Volume | Dung lượng cấp cho hệ thống tệp | lvextend |
| Hệ thống tệp ext4 | Số khối dữ liệu đang quản lý | resize2fs |
Bỏ sót một lớp thì df -h vẫn báo số cũ dù các lớp dưới đã lớn hơn. Đó là lý do nhiều người chạy xong lvextend rồi tưởng hỏng, trong khi chỉ còn thiếu lệnh cuối.
Cần chuẩn bị gì trước khi nới ổ đĩa Ubuntu
Trước hết phải tăng ổ đĩa ở lớp ảo hoá đã. Với VPS thì nâng gói hoặc mua thêm dung lượng, với VMware thì sửa ở phần cấu hình máy ảo. Sau đó cần một tài khoản có quyền sudo, và một bản sao lưu dữ liệu quan trọng đề phòng gõ nhầm.
Kiểm ổ đã lớn hơn chưa và xem cấu trúc hiện tại:
lsblk
df -h /
Kết quả của lsblk cho biết ổ sda đang bao nhiêu GB và phân vùng gốc tên gì. Trên Ubuntu Server cài mặc định, phân vùng chứa LVM thường là sda3, tên Logical Volume là /dev/ubuntu-vg/ubuntu-lv. Máy của bạn có thể khác, nên đọc kết quả thật chứ đừng chép nguyên tên trong bài.
Nếulsblkvẫn báo dung lượng cũ dù đã tăng ở bảng điều khiển, hệ điều hành chưa quét lại ổ. Khởi động lại máy, hoặc quét lại bằngecho 1 > /sys/class/block/sda/device/rescan.
Cách mở rộng dung lượng disk trên Ubuntu bằng LVM
Bốn bước dưới đây chạy bằng quyền root qua SSH, máy vẫn phục vụ bình thường trong lúc chạy. Ext4 giãn được khi đang gắn nên không cần vào chế độ cứu hộ. Bước duy nhất có rủi ro là bước nới phân vùng, làm chậm và đọc kỹ trước khi xác nhận.
1. Nới phân vùng chứa LVM
Dùng parted vì nó nới tại chỗ, không phải xoá rồi tạo lại như fdisk:
sudo parted /dev/sda
Trong dấu nhắc (parted), xem sơ đồ phân vùng trước:
(parted) print
Parted có thể hỏi có sửa bảng phân vùng GPT để dùng hết ổ không, trả lời Fix. Sau đó nới phân vùng số 3 ra hết ổ:
(parted) resizepart 3 100%
(parted) quit
Số 3 là số phân vùng đọc từ print, không phải con số cố định. Nới nhầm số là mất phân vùng đó.
2. Cập nhật Physical Volume
sudo pvresize /dev/sda3
Lệnh này báo cho LVM biết phân vùng đã rộng hơn. Kết quả in ra dòng Physical volume "/dev/sda3" changed. Kiểm phần trống của nhóm bằng sudo vgs, cột VFree phải khác 0.
3. Kéo Logical Volume ra hết phần trống
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Tham số -l +100%FREE lấy toàn bộ phần trống còn lại trong nhóm. Muốn chừa lại một phần cho snapshot LVM thì cấp số cụ thể, ví dụ -L +50G.
4. Giãn hệ thống tệp
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
Đây là bước hay bị quên nhất. Không chạy thì mọi lệnh trên coi như chưa có tác dụng, vì hệ thống tệp vẫn quản lý đúng số khối cũ. Với hệ thống tệp XFS, thay lệnh này bằng sudo xfs_growfs /.
Kiểm lại dung lượng sau khi resize
Chạy hai lệnh dưới để xác nhận cả ba lớp đã khớp nhau. Nếu con số ở df -h đã bằng dung lượng ổ mới thì việc đã xong, không cần khởi động lại máy.
df -h /
sudo lvs
sudo vgs
df -h / phải báo dung lượng mới. lvs cho biết Logical Volume đang chiếm bao nhiêu, còn vgs có cột VFree nên về 0 nếu bạn đã lấy hết. Ba con số này lệch nhau là dấu hiệu còn sót một lớp chưa kéo.
Xử lý các lỗi thường gặp khi resize phân vùng Ubuntu
Bốn tình huống dưới đây chiếm phần lớn ca làm không thành công ở lần đầu. Mỗi tình huống có thông báo riêng nên đọc dòng lỗi là biết đang kẹt ở lớp nào, không phải làm lại từ đầu.
Parted báo Partition is being used, unable to satisfy all constraints. Phiên bản parted cũ từ chối nới phân vùng đang gắn. Nâng parted lên bản mới hơn, hoặc dùng growpart /dev/sda 3 từ gói cloud-guest-utils.
pvresize báo No physical volume label read from /dev/sda3. Sai tên phân vùng, thường là gõ sda2 trong khi LVM nằm ở sda3. Chạy sudo pvs để lấy đúng tên rồi làm lại.
lvextend báo Insufficient free space. Nhóm chưa có phần trống, tức là pvresize chưa chạy hoặc chạy chưa ăn. Kiểm cột VFree bằng sudo vgs, còn 0 thì quay lại bước 2.
df vẫn báo số cũ sau khi chạy hết bốn lệnh. Thiếu resize2fs, hoặc hệ thống tệp là XFS mà bạn chạy resize2fs. Xem loại hệ thống tệp bằng df -T / rồi chạy đúng lệnh cho loại đó.
Việc nên làm sau khi nới xong ổ đĩa
Đặt một ngưỡng cảnh báo dung lượng để lần sau biết trước, thay vì phát hiện lúc dịch vụ đã ngừng vì đầy ổ. Trên Ubuntu, một cronjob chạy df rồi gửi thư khi vượt 85% là đủ dùng, cách viết lịch chạy xem ở tìm hiểu crontab trong Linux.
Nếu ổ đầy nhanh bất thường, phần lớn nguyên nhân là log và file rác chứ không phải dữ liệu thật. Tìm thư mục nặng bằng sudo du -sh /var/* | sort -h, và dọn file rỗng theo cách tìm và xoá file zero byte trong Linux. Giữ lại một phần trống trong nhóm LVM cũng có ích, vì snapshot LVM cần chỗ để ghi thay đổi.