Lệnh “df” -> “disk filesystem”, được sử dụng để hiển thị tóm tắt đầy đủ về việc sử dụng không gian đĩa cứng còn sẵn sàng và được sử dụng của hệ thống tập tin trên Linux
# Tổng hợp lệnh kiểm tra dung lượng ổ cứng đầy trên Linux
Khi server Linux bị đầy ổ cứng, các dịch vụ như Nginx, PHP, MySQL, MongoDB, Node.js, PM2 và Docker có thể gặp lỗi ghi dữ liệu, không tạo được file log hoặc ngừng hoạt động.
Dưới đây là các lệnh giúp xác định thư mục, file và log đang chiếm nhiều dung lượng, đồng thời hướng dẫn dọn dẹp an toàn.
## 1. Kiểm tra tổng dung lượng ổ cứng
```bash
df -h
```
Kiểm tra riêng phân vùng root:
```bash
df -h /
```
Kiểm tra loại filesystem:
```bash
df -hT
```
Kiểm tra inode (trường hợp còn dung lượng nhưng không tạo được file):
```bash
df -ih
```
## 2. Kiểm tra thư mục nào đang chiếm nhiều dung lượng
Liệt kê dung lượng các thư mục cấp cao nhất:
```bash
sudo du -xhd1 / 2>/dev/null | sort -h
```
Kiểm tra thư mục `/home`:
```bash
sudo du -xhd1 /home 2>/dev/null | sort -h
```
Kiểm tra thư mục `/var`:
```bash
sudo du -xhd1 /var 2>/dev/null | sort -h
```
Kiểm tra thư mục `/var/log`:
```bash
sudo du -xhd1 /var/log 2>/dev/null | sort -h
```
Kiểm tra sâu 2 cấp thư mục và lấy 30 kết quả lớn nhất:
```bash
sudo du -xhd2 /home 2>/dev/null | sort -h | tail -30
```
**Lưu ý:** `-x` giúp giới hạn việc quét trong cùng filesystem, tránh đi sang các phân vùng được mount khác.
## 3. Tìm 30 file lớn nhất trên server
```bash
sudo find / -xdev -type f -printf '%s %p\n' 2>/dev/null \
| sort -nr \
| head -30 \
| numfmt --field=1 --to=iec
```
Tìm file lớn hơn 1 GB:
```bash
sudo find / -xdev -type f -size +1G -ls 2>/dev/null
```
Tìm file lớn hơn 500 MB trong `/home`:
```bash
sudo find /home -type f -size +500M -ls 2>/dev/null
```
## 4. Kiểm tra dung lượng log
Kiểm tra log hệ thống:
```bash
sudo du -sh /var/log/*
```
Kiểm tra dung lượng systemd journal:
```bash
sudo journalctl --disk-usage
```
Kiểm tra log PM2:
```bash
du -sh ~/.pm2/logs
```
Kiểm tra 20 file log lớn nhất:
```bash
sudo find /var/log -type f -printf '%s %p\n' 2>/dev/null \
| sort -nr \
| head -20 \
| numfmt --field=1 --to=iec
```
## 5. Kiểm tra log Node.js và Cronjob
Ví dụ ứng dụng Node.js được đặt tại `/home/dev_ssh/fchat_node`.
Kiểm tra thư mục log:
```bash
sudo du -xhd2 /home/dev_ssh/fchat_node 2>/dev/null \
| sort -h | tail -30
```
Tìm file log lớn nhất:
```bash
sudo find /home/dev_ssh/fchat_node/cron/logs \
-type f -printf '%s %p\n' 2>/dev/null \
| sort -nr | head -30 \
| numfmt --field=1 --to=iec
```
Tìm log cũ hơn 30 ngày:
```bash
sudo find /home/dev_ssh/fchat_node/cron/logs \
-type f -mtime +30 -ls
```
Xem các file log được cập nhật gần đây:
```bash
sudo find /home/dev_ssh/fchat_node/cron/logs \
-type f -printf '%TY-%Tm-%Td %TH:%TM %s %p\n' \
| sort -r | head -20
```
## 6. Kiểm tra dung lượng Docker
```bash
docker system df
```
Xem chi tiết:
```bash
docker system df -v
```
Kiểm tra dung lượng Docker lưu trên ổ đĩa:
```bash
sudo du -sh /var/lib/docker
```
Lưu ý Docker có thể sử dụng thư mục dữ liệu khác `/var/lib/docker`.
## 7. Kiểm tra cache NPM, Yarn và hệ thống
Kiểm tra npm cache:
```bash
du -sh ~/.npm
```
Kiểm tra cache của user:
```bash
du -sh ~/.cache
```
Kiểm tra cache APT trên Ubuntu:
```bash
sudo du -sh /var/cache/apt
```
Kiểm tra cache DNF trên AlmaLinux/CentOS:
```bash
sudo du -sh /var/cache/dnf
```
## 8. Kiểm tra file đã xóa nhưng vẫn chiếm dung lượng
Một số trường hợp đã xóa file log nhưng dung lượng ổ cứng không giảm vì tiến trình vẫn đang mở file.
Kiểm tra bằng:
```bash
sudo lsof +L1
```
Nếu phát hiện file đã xóa nhưng vẫn được process giữ, cần xác định dịch vụ liên quan trước khi restart hoặc yêu cầu dịch vụ mở lại log.
## 9. Các lệnh dọn dẹp dung lượng
**Cảnh báo:** Chỉ thực hiện sau khi xác định dữ liệu không còn cần thiết và đã sao lưu nếu cần.
Dọn cache APT trên Ubuntu:
```bash
sudo apt clean
```
Dọn cache DNF trên AlmaLinux/CentOS:
```bash
sudo dnf clean all
```
Dọn npm cache:
```bash
npm cache clean --force
```
Giảm dung lượng systemd journal xuống tối đa 500 MB:
```bash
sudo journalctl --vacuum-size=500M
```
Giữ lại tối đa 7 ngày journal đã lưu trữ:
```bash
sudo journalctl --vacuum-time=7d
```
Làm rỗng một file log cụ thể:
```bash
sudo truncate -s 0 /path/to/file.log
```
Lệnh `truncate` chỉ nên dùng với file log thuần túy đã được xác nhận có thể xóa nội dung. Không áp dụng cho database, file upload hoặc dữ liệu nghiệp vụ.
Không nên sử dụng `rm -rf` hoặc `docker system prune -a --volumes` một cách tùy tiện trên server production.
## 10. Một lệnh tổng hợp kiểm tra toàn bộ server
Copy toàn bộ đoạn lệnh dưới đây để nhanh chóng xác định nguyên nhân ổ đĩa đầy:
```bash
echo "===== DISK USAGE ====="
df -hT
echo "===== INODE ====="
df -ih
echo "===== ROOT DIRECTORIES ====="
sudo du -xhd1 / 2>/dev/null | sort -h
echo "===== HOME ====="
sudo du -xhd2 /home 2>/dev/null | sort -h | tail -20
echo "===== VAR ====="
sudo du -xhd2 /var 2>/dev/null | sort -h | tail -20
echo "===== TOP 30 LARGE FILES ====="
sudo find / -xdev -type f -printf '%s %p\n' 2>/dev/null \
| sort -nr | head -30 \
| numfmt --field=1 --to=iec
echo "===== JOURNAL ====="
sudo journalctl --disk-usage
echo "===== PM2 LOGS ====="
du -sh ~/.pm2/logs 2>/dev/null
echo "===== DELETED OPEN FILES ====="
sudo lsof +L1 2>/dev/null
```
Đoạn lệnh trên chỉ kiểm tra và hiển thị thông tin, không xóa dữ liệu.
## 11. Công cụ kiểm tra dung lượng trực quan ncdu
Trên Ubuntu:
```bash
sudo apt install ncdu -y
```
Trên AlmaLinux/CentOS (nếu repository có gói):
```bash
sudo dnf install ncdu -y
```
Quét ổ đĩa root:
```bash
sudo ncdu -x /
```
Quét riêng thư mục `/home`:
```bash
sudo ncdu /home
```
`ncdu` cho phép duyệt từng thư mục và xem dung lượng trực quan ngay trên terminal. Không sử dụng chức năng xóa trong `ncdu` khi chưa xác định rõ dữ liệu.
## Kết luận
Khi ổ cứng Linux bị đầy, nên kiểm tra theo thứ tự:
1. `df -h` – Kiểm tra phân vùng đầy.
2. `du -xhd1 /` – Tìm thư mục chiếm dung lượng.
3. `du -xhd2 /home` – Kiểm tra sâu thư mục ứng dụng.
4. `find` – Tìm file lớn bất thường.
5. `journalctl --disk-usage` – Kiểm tra log hệ thống.
6. `lsof +L1` – Kiểm tra file đã xóa nhưng chưa giải phóng dung lượng.
7. `ncdu` – Phân tích dung lượng trực quan.
**Nguyên tắc quan trọng:** Xác định nguyên nhân trước khi xóa. Với server production, ưu tiên dọn cache, log cũ và file tạm đã được xác minh, tránh ảnh hưởng tới database và dữ liệu khách hàng.


Nhận xét
Đăng nhận xét