Xử lý lỗi full inode trên server DirectAdmin
Hướng dẫn DirectAdmin · cập nhật 09/08/2026
Để xử lý lỗi full inode trên server DirectAdmin, bạn chạy df -i để xác nhận phân vùng nào chạm trần, dùng lệnh đếm để tìm thư mục chứa nhiều file nhất, rồi dọn đúng thư mục đó. Mất khoảng 15 phút, cần quyền root qua SSH.
Dấu hiệu nhận ra: website báo lỗi ghi file, không upload được ảnh, email không nhận được thư, trong khi bảng thống kê vẫn ghi đĩa còn trống. Đó là lúc hệ thống hết inode chứ không hết dung lượng.
- Chạy
df -ixem phân vùng nào đã chạm trần. - Đếm số file theo từng thư mục để tìm chỗ chiếm nhiều nhất.
- Dọn đúng thư mục đó, thường là hàng chục nghìn thông báo hệ thống của DirectAdmin.
- Chạy lại
df -iđể xác nhận đã lấy lại chỗ trống.
Đã kiểm trên DirectAdmin bản 1.6 chạy CentOS 7 và AlmaLinux 8. Các lệnh xoá bên dưới không hoàn tác được, đọc kỹ đường dẫn trước khi gõ Enter.
Inode là gì và vì sao hết inode dù đĩa còn trống
Inode là cấu trúc dữ liệu mà hệ thống tập tin Linux dùng để mô tả một file hoặc một thư mục: quyền, chủ sở hữu, thời gian sửa, vị trí dữ liệu nằm trên đĩa. Mỗi file chiếm đúng một inode dù nội dung là 1 byte hay 1 GB. Nói gọn, inode đếm số lượng file và thư mục, còn dung lượng đếm kích thước của chúng.
Số inode được ấn định lúc định dạng phân vùng và không tăng thêm được sau đó. Vì vậy một máy chủ chứa hàng triệu file nhỏ, ví dụ file cache, file session, thông báo hệ thống, sẽ dùng hết inode trong khi đĩa mới đầy một phần. Lúc đó hệ thống từ chối tạo file mới với thông báo No space left on device dù df -h vẫn báo còn nhiều GB trống.
| Đặc điểm | Hết dung lượng đĩa | Hết inode |
|---|---|---|
| Lệnh phát hiện | df -h | df -i |
| Nguyên nhân | Vài file rất lớn: video, bản sao lưu, log | Rất nhiều file nhỏ: cache, session, thông báo |
| Thông báo lỗi | No space left on device | No space left on device |
| Cách nhìn ra | Cột Use% chạm 100% | Cột IUse% chạm 100% trong khi Use% còn thấp |
| Cách dọn | Xoá vài file lớn là xong | Phải xoá hàng chục nghìn file nhỏ |
| Tăng thêm được không | Được, mở rộng đĩa | Không, phải định dạng lại phân vùng |
Cách kiểm tra inode trên máy chủ
Hai lệnh dưới đây chỉ đọc thông tin, không đổi gì trên máy nên chạy lúc nào cũng an toàn. Lệnh đầu cho biết phân vùng nào đầy, lệnh sau chỉ ra thư mục nào gây ra chuyện đó.
1. Xem tỷ lệ đã dùng của từng phân vùng
df -i

Đọc cột IUse%. Phân vùng nào chạm 100% là phân vùng có vấn đề. Cột IFree về 0 xác nhận thêm. Các dòng tmpfs và devtmpfs là bộ nhớ tạm trong RAM, thường ở mức 1% và không phải thứ cần quan tâm.
2. Tìm thư mục chứa nhiều file nhất
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
Lệnh liệt kê mọi file trên phân vùng gốc, gom theo thư mục cha rồi đếm. Kết quả sắp xếp tăng dần nên dòng cuối cùng là thư mục chiếm nhiều chỗ nhất. Tham số -xdev giữ lệnh chạy trong một phân vùng, không lan sang phân vùng gắn thêm.
Lệnh chạy vài phút trên máy chủ nhiều file. Muốn nhanh hơn thì đổi / thành đường dẫn cụ thể, ví dụ /home hoặc /usr/local/directadmin, để thu hẹp phạm vi quét.
Dọn kho thông báo hệ thống của DirectAdmin
Trên máy chủ DirectAdmin, thủ phạm hay gặp nhất là kho thông báo hệ thống. Mỗi lần có sao lưu chạy, có lần đăng nhập sai, có tấn công brute force, DirectAdmin ghi một thông báo thành một file riêng. Máy chủ bị dò mật khẩu liên tục dễ tích tới vài chục nghìn file chỉ trong ít tuần.

Kho thông báo nhiều tới mức bấm vào mục tin nhắn trong DirectAdmin cũng không tải nổi danh sách. Lúc đó phải xoá bằng SSH. Đăng nhập với quyền root rồi chạy:
# Di chuyển đến thư mục /usr/local/directadmin/data/tickets.
cd /usr/local/directadmin/data/tickets
# Xóa tất cả các ticket tong thư mục hiện hành.
rm -rf *
# Di chuyển đến thư mục /usr/local/directadmin/data/admin/.
cd /usr/local/directadmin/data/admin/
# Làm file tickets.list thành rỗng.
cat /dev/null > tickets.list
Hai bước phải làm đủ cả hai. Lệnh rm -rf * xoá các file thông báo, còn lệnh cuối làm rỗng file danh mục. Bỏ bước cuối thì DirectAdmin vẫn hiện danh sách thông báo nhưng bấm vào từng cái lại báo không tìm thấy.
Nếu chỉ muốn xoá qua giao diện cho một tài khoản, xem bài xoá tin nhắn hệ thống trên DirectAdmin.
Những thư mục khác hay sinh ra hàng nghìn file nhỏ
Kho thông báo DirectAdmin không phải nguồn duy nhất. Khi lệnh đếm ở trên chỉ vào chỗ khác, bốn thư mục dưới đây là nơi cần nhìn tiếp, xếp theo mức độ hay gặp.
Thư mục session PHP. Nằm ở /tmp hoặc /home/tenuser/tmp. Mỗi lượt khách truy cập website sinh một file session, PHP dọn không xuể khi lượng truy cập lớn. Xoá file cũ hơn một ngày bằng find /tmp -name "sess_*" -mtime +1 -delete.
Cache của plugin WordPress. Nằm trong wp-content/cache. Một số plugin cache sinh file cho từng URL kèm từng biến thể thiết bị, dễ lên hàng trăm nghìn file. Xoá cả thư mục cache là an toàn, plugin tự dựng lại.
Hàng đợi mail của Exim. Nằm ở /var/spool/exim. Máy chủ bị lợi dụng gửi thư rác sẽ ứ hàng chục nghìn thư kẹt trong hàng đợi. Đếm bằng exim -bpc trước khi xoá, và tìm ra website bị chèn mã trước khi dọn, không thì vài giờ sau đầy lại.
Bản sao lưu cũ. Nằm trong /home/admin/admin_backups hoặc thư mục backups của từng tài khoản. Bản sao lưu dạng thư mục thay vì file nén sẽ nhân đôi số file của toàn bộ máy chủ.
Xác nhận đã lấy lại được chỗ trống
Chạy lại lệnh kiểm tra ngay sau khi dọn. Cột IUse% tụt xuống là dấu hiệu đúng, mức an toàn nên dưới 80%.
df -i
Vẫn ở 100% sau khi xoá thì thường do một tiến trình còn giữ file đã xoá, hệ thống chưa giải phóng. Khởi động lại dịch vụ liên quan, ví dụ service directadmin restart, rồi đo lại. Sau đó thử tạo một file trống bằng touch /home/test.txt, tạo được là hệ thống đã ghi lại được bình thường.
Cách để không chạm trần inode lần nữa
Dọn xong là hết lỗi trước mắt, nhưng nguồn sinh file vẫn còn nguyên. Máy chủ chạm trần một lần thì vài tháng sau đầy lại, trừ khi chặn từ gốc.
Ba việc giảm được phần lớn nguy cơ. Thứ nhất, cài tường lửa chặn dò mật khẩu để DirectAdmin không sinh thông báo brute force nữa, làm theo bài cài đặt ConfigServer Security Firewall trên CentOS. Thứ hai, đặt cronjob xoá file session và cache cũ hàng ngày, cách tạo nằm ở bài hướng dẫn sử dụng cron jobs trên DirectAdmin. Thứ ba, đặt lịch chạy df -i hàng tuần và ghi kết quả ra file để nhìn thấy xu hướng tăng trước khi nó chạm trần.