Skip to content

Ổ đĩa đầy ​

Khi filesystem hết dung lượng, các thao tác sẽ lỗi với thông báo No space left on device: triển khai code, cài gói, ghi cơ sở dữ liệu, ghi log và tải tệp lên đều không chạy được. Lỗi này cũng có thể xuất hiện khi ổ đĩa vẫn còn trống nhưng filesystem đã hết inode (quá nhiều tệp nhỏ).

Khi phần Kết quả của một sự kiện có dòng No space left on device, mục Giải pháp trong chi tiết sự kiện sẽ dẫn tới trang này.

Xử lý nhanh bằng Dọn dẹp hệ thống ​

Chạy tiện ích Dọn dẹp hệ thống trước. Tiện ích xoá log cũ, gói không dùng và bộ nhớ đệm mà không đụng tới website hay cơ sở dữ liệu, phần Kết quả của sự kiện cho biết dung lượng trước và sau khi dọn. Nếu ổ đĩa vẫn gần đầy, làm theo các bước dưới đây để tìm thứ đang chiếm dung lượng.

1. Kiểm tra dung lượng và inode ​

Mở Terminal trên trang tổng quan của máy chủ, hoặc kết nối SSH bằng người dùng root, rồi chạy:

bash
df -h
df -i
  • Use% gần 100% trong df -h: filesystem đã hết dung lượng.
  • IUse% bằng 100% trong df -i: filesystem đã hết inode. Tìm các thư mục chứa rất nhiều tệp nhỏ (cache, session, hàng đợi mail…).

2. Tìm thư mục đang chiếm dung lượng ​

Liệt kê các thư mục cấp cao nhất theo dung lượng, chỉ trong cùng một filesystem:

bash
sudo du -xhd1 / 2>/dev/null | sort -h

Sau đó xem sâu vào thư mục lớn nhất, ví dụ /var:

bash
sudo du -xhd1 /var 2>/dev/null | sort -h

Những nơi hay chiếm nhiều dung lượng: log trong /var/log, dữ liệu Docker trong /var/lib/docker, cơ sở dữ liệu trong /var/lib/mysql, bản sao lưu cục bộ, tệp tải lên hoặc cache trong thư mục website ở /home.

3. Duyệt trực quan bằng ncdu ​

ncdu liệt kê thư mục theo dung lượng giảm dần, cho phép di chuyển và xoá tệp ngay trên một màn hình. Cài đặt nếu máy chủ chưa có:

bash
sudo apt install -y ncdu

Sau đó quét toàn bộ filesystem, hoặc một thư mục cụ thể:

bash
sudo ncdu -x /
sudo ncdu /var
PhímTác dụng
↑ ↓Di chuyển trong danh sách
Enter hoặc →Mở thư mục
←Quay lại thư mục cha
dXoá tệp hoặc thư mục đang chọn (có hỏi xác nhận)
qThoát

WARNING

Xoá trong ncdu không thể hoàn tác. Kiểm tra kỹ đường dẫn trước khi xác nhận.

4. Giải phóng dung lượng an toàn ​

Chỉ xoá dữ liệu bạn đã chắc chắn không còn cần:

  • Bộ nhớ đệm của trình quản lý gói và journal cũ:

    bash
    sudo apt clean
    sudo journalctl --vacuum-time=7d
  • Docker: kiểm tra trước bằng docker system df. Chỉ prune image, container hoặc volume bạn chắc chắn không dùng. Volume chứa dữ liệu ứng dụng (ví dụ dữ liệu n8n), tuyệt đối không xoá tuỳ tiện.

  • Bản sao lưu và tệp nén cũ (.zip, .tar.gz, .sql) còn sót trong thư mục website.

  • Log của ứng dụng: xoay vòng hoặc làm rỗng log bằng chính ứng dụng, không xoá tệp log đang được ghi.

5. Kiểm tra tệp đã xoá nhưng vẫn bị giữ ​

Nếu đã xoá tệp lớn mà df -h vẫn báo đầy, có thể một tiến trình đang chạy vẫn giữ các tệp đó:

bash
sudo lsof +L1

Khởi động lại dịch vụ hiện trong kết quả (ở trang Ứng dụng hoặc bằng systemctl restart), hoặc khởi động lại máy chủ vào lúc ít truy cập. Sau đó chạy lại df -h.

Sau khi dọn dẹp ​

  1. Chạy lại df -h và df -i để chắc chắn ổ đĩa đã có chỗ trống.
  2. Thực hiện lại thao tác bị lỗi.
  3. Để ổ đĩa không bị đầy lại: lên lịch Dọn dẹp hệ thống, xem lại số lượng bản sao lưu được giữ, hoặc nâng cấp ổ đĩa máy chủ.

DANGER

Không bao giờ xoá thư mục hệ thống, tệp cơ sở dữ liệu (/var/lib/mysql…), tệp cấu hình hoặc dữ liệu website đang chạy nếu chưa rõ chúng là gì và chưa có bản sao lưu khôi phục được.