Skip to content
VDS · Sao lưu và ổ đĩa

Dung lượng đĩa: nó đi đâu

Cách tìm ra thứ đã làm đầy đĩa, vì sao tệp đã xóa nhưng còn mở lại nguy hiểm, những gì an toàn để dọn và vì sao vòng hiển thị dung lượng trong bảng điều khiển có thể hiển thị sai.

Cập nhật 23 tháng 8, 2026

Hết dung lượng là một sự cố có thể biểu hiện theo nhiều cách: cơ sở dữ liệu không ghi được, trang web trả về lỗi, các container khởi động lại. Đĩa VDS có dung lượng từ 40 GB ở gói khởi điểm đến 250 GB ở gói cao nhất, và nó gần như luôn đầy lên bởi cùng những thứ sau.

Những lệnh đầu tiên

df -h
df -i
sudo du -x -h -d1 / | sort -h | tail -15

Đừng bỏ qua df -i: bạn có thể còn dung lượng nhưng hết inode — khi đó bạn nhận được thông báo “disk full” dù vẫn còn hàng gigabyte trống. Thủ phạm thường là hàng triệu tệp cache nhỏ.

Sau đó đi sâu vào thư mục lớn nhất:

sudo du -x -h -d1 /var | sort -h | tail
sudo du -x -h -d1 /var/lib | sort -h | tail

Cờ -x giữ phạm vi đếm trong một hệ thống tệp duy nhất và không đi lang thang vào các thư mục được gắn kết.

Những thủ phạm phổ biến

Thứ gìCách kiểm traCần làm gì
Log của containerdu -sh /var/lib/docker/containers/*/*-json.logGiới hạn dung lượng, xem log
Image và build cachedocker system dfdocker image prune, docker builder prune
Journal của hệ thốngjournalctl --disk-usagejournalctl --vacuum-size=200M
Kernel cũ trong /bootdf -h /bootapt autoremove --purge
Cache của góidu -sh /var/cache/aptapt clean
Các bản sao lưu còn để lạidu -sh /backupChuyển chúng ra ngoài, xem một vị trí khác
Tệp người dùng tải lêndu -sh /var/www/uploadsLưu trữ ra ngoài hoặc dùng đĩa lớn hơn

Một tệp đã xóa nhưng vẫn chiếm dung lượng

Một câu đố kinh điển: du hiển thị 5 GB, df hiển thị đã dùng 30 GB. Điều đó có nghĩa là tệp đã bị xóa, nhưng một tiến trình vẫn đang giữ nó mở, và dung lượng sẽ không được giải phóng cho đến khi khởi động lại.

sudo lsof +L1 | head -20

Kết quả sẽ hiển thị các tiến trình và dung lượng. Cách khắc phục là khởi động lại thủ phạm:

sudo systemctl restart <service>
docker compose restart <service>

Đừng bao giờ giải phóng dung lượng bằng rm trên một tệp log đang được sử dụng. Cách đúng là cắt ngắn nó: sudo truncate -s 0 /var/log/big.log. Xóa nó sẽ khiến dung lượng vẫn bị chiếm và bạn còn mất luôn tệp log.

Vòng tròn hiển thị dung lượng trong bảng điều khiển

Trên tab “Overview” có một vòng tròn hiển thị dung lượng đĩa. Nó được tính qua guest agent qemu-guest-agent. Nếu agent bị gỡ bỏ hoặc không chạy, dữ liệu sẽ không cập nhật — bảng điều khiển sẽ hiển thị lệnh cài đặt. Để kiểm tra bên trong máy:

systemctl status qemu-guest-agent

Số liệu của agent và df -h phải khớp nhau. Sự chênh lệch thường có nghĩa là một phần dung lượng bị chiếm trong một phân vùng được gắn kết riêng — xem phân vùng và hệ thống tệp.

Phòng ngừa

Thiết lập một tác vụ theo lịch để dọn dẹp và cảnh báo:

#!/bin/bash
USED=$(df --output=pcent / | tail -1 | tr -dc '0-9')
if [ "$USED" -gt 85 ]; then
  journalctl --vacuum-size=200M
  apt clean
  docker image prune -f
  echo "Disk is ${USED}% full" | mail -s "VDS: low disk space" you@example.com
fi

Ngưỡng 85% cho bạn thời gian để phản ứng. Bạn không thể chờ đến 100%: khi đĩa đầy, một số dịch vụ thậm chí không thể ghi được log về những gì đã xảy ra.

Nếu hoàn toàn không còn dung lượng

  1. Giải phóng vài gigabyte bằng các biện pháp nhanh: journalctl --vacuum-size=100M, apt clean, docker builder prune -f.
  2. Tìm nguyên nhân thực sự bằng các lệnh ở trên — nếu không mọi thứ sẽ lặp lại trong một tuần.
  3. Nếu dữ liệu thực sự đã tăng lên, bạn cần tăng dung lượng đĩa bằng cách chuyển lên gói cao hơn. Không thể hạ gói: đĩa không thể thu nhỏ.