“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 /

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