Xử lý lỗi “No Space Left on Device” trong Linux (Giải pháp thực tế)

“Server A B C Full disk kìa ông ơi!” Nếu bạn đã từng “đau đầu” với câu nói này trên hạ tầng server, thì bạn có thể tham khảo một số cách mà mình làm nhé.

Trong hướng dẫn này, chúng ta sẽ cùng tìm hiểu cách kiểm tra, giám sát và quản lý không gian ổ đĩa trên hệ thống Linux qua các tình huống DevOps thực tế. Dù bạn đang vận hành một backend có lưu lượng truy cập cao, một pipeline CI/CD nặng về Docker, hay một MongoDB container chứa nhiều dữ liệu, hướng dẫn này đều có thể giúp ích cho bạn.

Tình huống thực tế

Giả sử bạn đang quản lý một Server đột nhiên “chết đứng” với lỗi kiểu như:

No space left on device

Bạn kiểm tra và phát hiện ra rằng MongoDB container và các tệp log đã chiếm gần hết dung lượng ổ đĩa.

Đây là cách để “xử lý gọn” và ngăn chặn tình huống này một cách chuyên nghiệp.

Bước 1: Kiểm tra việc sử dụng ổ đĩa

Kiểm tra tóm tắt việc sử dụng ổ đĩa:

df -h

Giải thích:

  • df = disk filesystem (hệ thống tệp ổ đĩa)
  • -h = human-readable (định dạng dễ đọc cho người dùng, hiển thị GB, MB)

Ví dụ output:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   45G  2.0G  95% /

Vấn đề: 95% dung lượng ổ đĩa đã được sử dụng. Có nguy cơ ứng dụng bị crash hoặc mất dữ liệu.

Bước 2: Xác định cái gì đang “ngốn” dung lượng

Kiểm tra mức sử dụng không gian theo thư mục (root):

sudo du -h --max-depth=1 /

Ví dụ output:

4.0G    /var
15G     /home
20G     /opt

Tập trung vào /var, /opt, hoặc /home những thư mục này thường lưu trữ log, cơ sở dữ liệu và dữ liệu Docker.

Bước 3: Dọn dẹp lưu trữ Docker (Nếu đang dùng Docker)

Kiểm tra mức sử dụng Docker storage:

docker system df

Dọn dẹp các tài nguyên Docker không sử dụng:

docker system prune -a

⚠️ Cảnh báo: Lệnh này xóa tất cả các container, image và network không còn được sử dụng.

Bước 4: Dọn dẹp các tệp log

Kiểm tra kích thước log trong /var/log:

sudo du -sh /var/log/*

Cắt bớt (truncate) hoặc xóa các tệp log lớn:

sudo truncate -s 0 /var/log/syslog
sudo rm -rf /var/log/myapp/*.log

Bước 5: Giám sát không gian ổ đĩa chủ động

Sử dụng ncdu (Trình xem tương tác):

Cài đặt:

sudo apt install ncdu  # Debian/Ubuntu

Chạy:

sudo ncdu /
ebac5c97-f488-4728-b539-8b0f0d734497

Giúp trực quan hóa và “đào sâu” vào việc sử dụng ổ đĩa giống như một trình duyệt tệp.

Bonus: Ngăn MongoDB làm đầy ổ đĩa

Xuất dữ liệu Mongo từ Container:

docker exec mongodb-container mongodump --archive=/data/backup.gz --gzip

Chuyển dữ liệu sang một máy chủ khác:

scp mongodb-container:/data/backup.gz user@remote:/backups/

Sau đó dọn dẹp dữ liệu cũ:

docker exec mongodb-container rm /data/backup.gz

Thực hành tốt nhất để quản lý không gian ổ đĩa

  • Tự động sao lưu định kỳ.
  • Xoay vòng log bằng cách sử dụng logrotate.
  • Giám sát ổ đĩa bằng các công cụ như Prometheus + Grafana.
  • Thiết lập cron job để dọn dẹp Docker và các tệp tạm thời.
  • Phân vùng log, dữ liệu và root riêng biệt để kiểm soát tốt hơn.

Kết luận

Hết dung lượng ổ đĩa là một “sát thủ thầm lặng” trong các môi trường production. Bằng cách làm theo các bước trong hướng dẫn này, bạn có thể:

  • Chẩn đoán và giải quyết các vấn đề về không gian nhanh hơn.
  • Ngăn ngừa downtime trong tương lai.
  • Luôn kiểm soát được hạ tầng của mình.

Các công cụ được đề xuất:

Công cụ Mục đích
df, du Phân tích sử dụng ổ đĩa
ncdu Phân tích tương tác
docker system df Dọn dẹp Docker
logrotate Xoay vòng log

Mẹo Pro: Thiết lập một cron job để giám sát ổ đĩa mỗi giờ:

crontab -e
0 * * * * df -h > /var/log/disk_report.log
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận