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 tra | Cần làm gì |
|---|---|---|
| Log của container | du -sh /var/lib/docker/containers/*/*-json.log | Giới hạn dung lượng, xem log |
| Image và build cache | docker system df | docker image prune, docker builder prune |
| Journal của hệ thống | journalctl --disk-usage | journalctl --vacuum-size=200M |
Kernel cũ trong /boot | df -h /boot | apt autoremove --purge |
| Cache của gói | du -sh /var/cache/apt | apt clean |
| Các bản sao lưu còn để lại | du -sh /backup | Chuyển chúng ra ngoài, xem một vị trí khác |
| Tệp người dùng tải lên | du -sh /var/www/uploads | Lư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
rmtrê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
- 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. - 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.
- 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ỏ.