Tăng Dung Lượng Disk VPS Ubuntu: Mở Rộng Partition Và Filesystem Không Mất Dữ Liệu

Sau khi tăng disk VPS Ubuntu, hướng dẫn dùng growpart, resize2fs hoặc xfs_growfs để mở rộng partition và filesystem an toàn, tránh mất dữ liệu.

Nâng dung lượng disk ở control panel của nhà cung cấp chưa chắc làm Ubuntu tự nhìn thấy toàn bộ không gian mới. Bạn thường phải mở rộng partition trước, rồi mới mở rộng filesystem bên trong. Bài viết này hướng dẫn quy trình kiểm tra block device, dùng `growpart`, `resize2fs` cho ext4 hoặc `xfs_growfs` cho XFS, kèm cảnh báo để tránh thao tác nhầm partition và mất dữ liệu.

Điểm quan trọng Hãy lựa chọn dịch vụ dựa trên nhu cầu sử dụng thực tế và theo dõi tài nguyên thường xuyên để có hiệu quả tốt nhất.

Bạn vừa nâng disk VPS từ 40 GB lên 80 GB trong control panel, nhưng df -h vẫn chỉ thấy khoảng 40 GB. Đây là tình huống rất phổ biến.

Lý do là có nhiều lớp khác nhau:

Virtual disk
   ↓
Partition
   ↓
Filesystem
   ↓
Mount point

Nhà cung cấp thường chỉ mở rộng virtual disk. Ubuntu có thể nhìn thấy disk lớn hơn, nhưng partition và filesystem bên trong vẫn giữ kích thước cũ.

Quy trình đúng là:

  1. xác nhận disk đã lớn hơn;
  2. xác định partition đang chứa filesystem;
  3. mở rộng partition;
  4. mở rộng filesystem;
  5. kiểm tra lại dung lượng.

Nếu VPS đang đầy ổ đĩa nhưng bạn chưa chắc có cần nâng disk hay không, xem trước bài VPS Ubuntu bị đầy ổ đĩa.

Cảnh báo trước khi thao tác

Mở rộng filesystem thường an toàn nếu làm đúng, nhưng partition table là thao tác nhạy cảm.

Trước khi bắt đầu:

  • backup dữ liệu quan trọng;
  • tạo snapshot nếu nền tảng hỗ trợ;
  • giữ console/KVM/recovery access;
  • xác định chính xác disk và partition;
  • không copy lệnh /dev/sda1 nếu máy bạn dùng /dev/vda1, /dev/nvme0n1p1 hoặc LVM.

Không dùng fdisk xóa/tạo lại partition nếu bạn chưa hiểu rõ layout. Với cloud image thông thường, growpart an toàn và ít lỗi thao tác hơn.

Bước 1: xem disk và partition hiện tại

Chạy:

lsblk

Ví dụ:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda     252:0    0   80G  0 disk
└─vda1  252:1    0   40G  0 part /

Ở đây:

  • disk /dev/vda = 80 GB;
  • partition /dev/vda1 = 40 GB;
  • filesystem root / nằm trên partition 1.

Điều này xác nhận nhà cung cấp đã tăng disk nhưng partition chưa được mở rộng.

Kiểm tra bằng df

df -hT /

Ví dụ:

Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vda1      ext4   39G   31G  6.0G  84% /

Cột Type cho biết filesystem là ext4, XFS hay loại khác.

Kiểm tra partition table

sudo fdisk -l /dev/vda

Hoặc:

sudo parted /dev/vda print

Mục tiêu là xác nhận partition 1 có thể mở rộng vào phần free space ở cuối disk.

Nếu phía sau partition cần mở rộng còn partition khác, growpart không thể nhảy qua partition đó.

Bước 2: cài growpart

Trên Ubuntu, growpart nằm trong package cloud-guest-utils:

sudo apt update
sudo apt install -y cloud-guest-utils

Kiểm tra:

growpart --help

Theo Ubuntu manpage, growpart mở rộng một partition trong partition table để chiếm phần không gian trống khả dụng tiếp theo.

Dry-run trước

Đừng áp ngay.

Ví dụ disk /dev/vda, partition số 1:

sudo growpart -N /dev/vda 1

-N là dry-run, chỉ hiển thị thay đổi dự kiến.

Nếu output hợp lý, mới chạy thật:

sudo growpart /dev/vda 1

Lưu ý cú pháp:

growpart DISK PARTITION-NUMBER

Vì vậy:

growpart /dev/vda 1

khác với việc truyền /dev/vda1 làm disk.

NVMe dùng tên khác

Ví dụ:

/dev/nvme0n1      disk
/dev/nvme0n1p1    partition 1

Lệnh đúng:

sudo growpart /dev/nvme0n1 1

Không phải:

sudo growpart /dev/nvme0n1p1 1

Kiểm tra partition sau growpart

lsblk

Bây giờ bạn có thể thấy:

vda     80G
└─vda1  80G /

Nhưng df -h có thể vẫn chưa tăng vì filesystem chưa dùng phần partition mới.

Đây là bước nhiều người bỏ sót.

Bước 3 với ext4: dùng resize2fs

Nếu:

df -hT /

cho thấy ext4, chạy:

sudo resize2fs /dev/vda1

Theo resize2fs manpage, nếu không chỉ định kích thước, filesystem sẽ được mở rộng tới kích thước partition hiện tại.

Ext4 trên Linux hiện đại thường hỗ trợ online grow khi đang mounted.

Sau đó:

df -hT /

Bạn nên thấy dung lượng mới.

Với XFS: dùng xfs_growfs

Nếu filesystem là XFS, không dùng resize2fs.

Ví dụ root filesystem mount tại /:

sudo xfs_growfs /

Theo tài liệu xfs_growfs, XFS phải đang mounted để grow.

Kiểm tra:

df -hT /

Vì sao resize2fs không tự mở partition?

resize2fs chỉ quản lý filesystem ext2/ext3/ext4.

Nó không thay đổi partition table.

Quy trình với ext4 thường là:

Disk tăng
  ↓
growpart
  ↓
Partition tăng
  ↓
resize2fs
  ↓
Filesystem tăng

Trường hợp không có partition

Một số disk được format trực tiếp:

/dev/vdb → ext4 → /data

không có /dev/vdb1.

Nếu virtual disk /dev/vdb đã tăng và filesystem nằm trực tiếp trên disk, có thể chỉ cần:

sudo resize2fs /dev/vdb

với ext4.

Không chạy growpart vì không có partition table cần mở rộng.

Trường hợp dùng LVM

Layout có thể là:

/dev/vda3
   ↓ PV
VG ubuntu-vg
   ↓ LV
/dev/mapper/ubuntu--vg-ubuntu--lv
   ↓ ext4
/

Khi đó quy trình khác:

  1. mở rộng partition nếu cần;
  2. pvresize;
  3. lvextend;
  4. resize filesystem.

Ví dụ conceptual:

sudo growpart /dev/vda 3
sudo pvresize /dev/vda3
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

Hoặc với ext4 có thể dùng lvextend -r để resize filesystem cùng lúc nếu công cụ hỗ trợ và layout đúng.

Không copy lệnh LVM trên nếu tên VG/LV của bạn khác.

Kiểm tra bằng:

sudo pvs
sudo vgs
sudo lvs

Trường hợp cloud-init tự grow rồi

Nhiều cloud image có growpart/resizefs module chạy tự động trong boot đầu hoặc sau khi disk đổi.

Kiểm tra:

cloud-init status --long

và:

sudo grep -i grow /var/log/cloud-init.log | tail -50

Nếu đã tự grow thì không cần chạy lại.

Xem thêm bài Tự động khởi tạo VPS bằng cloud-init.

Disk tăng nhưng kernel chưa thấy kích thước mới

Kiểm tra:

lsblk
sudo blockdev --getsize64 /dev/vda

Nếu vẫn thấy kích thước cũ, có thể cần rescan device hoặc reboot tùy hypervisor/provider.

Không nên đoán lệnh rescan nếu chưa biết bus/device type.

Một reboot có kiểm soát thường đơn giản hơn trên VPS nhỏ, nhưng cần maintenance window nếu production.

GPT partition table và backup header

Sau khi virtual disk tăng, tool như parted đôi khi báo GPT backup header chưa nằm cuối disk.

Nhiều tool có thể tự sửa khi ghi partition table, nhưng hãy backup/snapshot trước.

Nếu growpart báo lỗi lạ, đừng ép bằng fdisk ngay. Kiểm tra:

sudo parted /dev/vda print
sudo sgdisk -v /dev/vda

nếu sgdisk có sẵn.

Sau khi mở rộng nên kiểm tra gì?

lsblk -f
df -hT
mount | column -t

Với root filesystem:

df -hT /

Đảm bảo:

  • size đã tăng;
  • mount point đúng;
  • filesystem type đúng;
  • không có lỗi kernel mới.

Xem kernel log gần nhất:

sudo journalctl -k -n 100 --no-pager

Có mất dữ liệu không?

Mở rộng partition/filesystem đúng cách thường không xóa dữ liệu cũ.

Rủi ro chủ yếu đến từ:

  • chọn nhầm disk;
  • chọn nhầm partition;
  • thao tác thủ công sai với partition table;
  • shrink thay vì grow;
  • mất điện/kernel crash ở thời điểm xấu;
  • filesystem đã có lỗi từ trước.

Do đó backup trước vẫn là bắt buộc với dữ liệu quan trọng.

Có cần unmount ext4 không?

Với grow ext4 trên Linux hiện đại, thường có thể mở rộng online khi mounted.

Shrink thì khác và phức tạp hơn nhiều.

Bài này chỉ nói về mở rộng, không hướng dẫn shrink disk/partition.

Không nên shrink partition production tùy tiện

Shrink có thứ tự ngược và rủi ro hơn:

  1. shrink filesystem trước;
  2. shrink partition sau;
  3. đảm bảo partition không nhỏ hơn filesystem.

Nhiều filesystem như XFS không hỗ trợ shrink theo cách thông thường.

Nếu mục tiêu chỉ là tiết kiệm disk, migration sang volume mới thường an toàn hơn shrink tại chỗ.

Ví dụ hoàn chỉnh: ext4 trên /dev/vda1

Kiểm tra:

lsblk
df -hT /

Dry-run:

sudo growpart -N /dev/vda 1

Grow partition:

sudo growpart /dev/vda 1

Grow filesystem:

sudo resize2fs /dev/vda1

Xác nhận:

lsblk
df -hT /

Ví dụ hoàn chỉnh: XFS

lsblk
df -hT /
sudo growpart -N /dev/vda 1
sudo growpart /dev/vda 1
sudo xfs_growfs /
df -hT /

Chỉ dùng nếu / thực sự là XFS trên partition đó.

Nếu growpart báo NOCHANGE

Ví dụ:

NOCHANGE: partition 1 is size ... it cannot be grown

Có thể do:

  • disk chưa tăng;
  • partition đã chiếm toàn bộ disk;
  • partition khác nằm phía sau;
  • kernel chưa nhận kích thước mới.

Kiểm tra lại lsblk và fdisk -l.

Nếu resize2fs báo filesystem already ...

Có thể partition chưa tăng.

Kiểm tra:

lsblk

Nếu partition vẫn 40 GB thì quay lại bước growpart.

Monitoring disk sau khi tăng

Nâng disk giải quyết capacity hiện tại nhưng không giải quyết nguyên nhân tăng dữ liệu.

Theo dõi:

  • tốc độ tăng GB/ngày;
  • log growth;
  • database size;
  • Docker layers/volumes;
  • backup retention.

Bạn có thể dùng Prometheus, Node Exporter và Grafana để alert trước khi disk chạm ngưỡng nguy hiểm.

Checklist an toàn

  • Backup/snapshot trước.
  • Xác nhận virtual disk đã tăng.
  • Xác định đúng disk và partition.
  • Kiểm tra filesystem type bằng df -T.
  • Dry-run growpart -N.
  • Grow partition.
  • Ext4: resize2fs.
  • XFS: xfs_growfs.
  • LVM: kiểm tra PV/VG/LV riêng.
  • Xác nhận bằng lsblk và df -hT.
  • Theo dõi kernel log.

FAQ

Tăng disk trong control panel có tự tăng filesystem không?

Tùy cloud image/provider. Nhiều trường hợp disk tăng nhưng partition/filesystem chưa tăng, nên cần kiểm tra lsblk và df -h.

growpart có xóa dữ liệu không?

Mục đích của nó là mở rộng partition vào free space, không format filesystem. Tuy nhiên partition operation vẫn cần backup và chọn đúng device.

Ext4 dùng lệnh nào để mở rộng?

Thông thường là resize2fs DEVICE sau khi underlying partition đã lớn hơn.

XFS dùng resize2fs được không?

Không. XFS dùng xfs_growfs, thường truyền mount point đang mounted.

Có cần reboot sau khi tăng disk không?

Không phải lúc nào cũng cần. Nếu kernel đã nhận kích thước mới và filesystem hỗ trợ online grow, có thể mở rộng mà không reboot.

Kết luận

Sau khi tăng dung lượng disk VPS, hãy nhớ rằng disk, partition và filesystem là ba lớp khác nhau. Với Ubuntu cloud image thông thường, quy trình phổ biến là growpart rồi resize2fs cho ext4 hoặc xfs_growfs cho XFS.

Đừng thao tác theo tên device từ bài viết nếu layout máy bạn khác. Hãy kiểm tra lsblk, backup dữ liệu và dry-run trước.

Nếu workload hợp lệ tiếp tục tăng storage đều đặn, bạn có thể tham khảo các gói VPS tại HUONG CLOUD và chọn dung lượng phù hợp với tốc độ tăng dữ liệu thực tế.

Nguồn tham khảo

Kết luận

Nếu chưa chắc cấu hình hoặc loại dịch vụ nào phù hợp, hãy gửi nhu cầu thực tế để đội ngũ hỗ trợ tư vấn trước khi mua.

Chưa biết nên chọn gói nào?

Xem bảng giá VPS hoặc liên hệ đội ngũ hỗ trợ để chọn cấu hình phù hợp.

Xem bảng giá VPS →