BizMaC bizmac.com

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.

  1. Chạy df -i xem phân vùng nào đã chạm trần.
  2. Đếm số file theo từng thư mục để tìm chỗ chiếm nhiều nhất.
  3. 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.
  4. 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ểmHết dung lượng đĩaHết inode
Lệnh phát hiệndf -hdf -i
Nguyên nhânVài file rất lớn: video, bản sao lưu, logRất nhiều file nhỏ: cache, session, thông báo
Thông báo lỗiNo space left on deviceNo space left on device
Cách nhìn raCột Use% chạm 100%Cột IUse% chạm 100% trong khi Use% còn thấp
Cách dọnXoá vài file lớn là xongPhải xoá hàng chục nghìn file nhỏ
Tăng thêm được khôngĐược, mở rộng đĩaKhô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
Kết quả lệnh df -i hiển thị phân vùng /dev/vda2 dùng hết 3276800 inode, cột IFree bằng 0 và IUse% ở mức 100%
Cột IUse% của /dev/vda2 chạm 100% và IFree về 0, đây là phân vùng cần dọn.

Đọ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.

Danh sách Message System trong DirectAdmin đầy các dòng Brute-Force Attack detected in service log on Users root lặp lại cùng ngày
Các dòng Brute-Force Attack detected lặp lại là thông báo bị dò mật khẩu, mỗi dòng là một file trên đĩa.

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.

Hướng dẫn này có giúp được Anh/Chị không?

Bài khác trong DirectAdmin

Xem cả 31 bài
Bật tắt extension PHP trên DirectAdmin Vào Extra Features rồi Select PHP version để tích hoặc bỏ tích extension. Nên bật thư viện nào cho WordPress, cách xác nhận đã nạp và lỗi hay gặp. 7 phút đọc 277 lượt xem Cập nhật 28/08/2026 Khôi phục website trên DirectAdmin từ bản sao lưu Đưa tệp sao lưu lên hosting, chọn đúng phần dữ liệu cần đưa về và kiểm website sau khi khôi phục, kèm cách chọn bản nào khi có nhiều bản. 8 phút đọc 297 lượt xem Cập nhật 26/08/2026 Khắc phục lỗi License has expired DirectAdmin DirectAdmin báo License has expired khi bản quyền hết hạn hoặc máy chủ đổi IP. Cách chạy getLicense.sh để tải lại license và mở khoá bảng điều khiển. 6 phút đọc 365 lượt xem Cập nhật 26/08/2026 Xoá tin nhắn hệ thống trên DirectAdmin Dọn hộp tin nhắn hệ thống DirectAdmin bằng giao diện hoặc dòng lệnh, kèm bảng phân loại tin nào đáng đọc trước khi xoá và cách giảm tin sinh ra. 8 phút đọc 188 lượt xem Cập nhật 26/08/2026 Cài SSL Let's Encrypt miễn phí trên DirectAdmin Let's Encrypt cấp chứng chỉ SSL miễn phí, hạn 90 ngày và tự gia hạn. Cách bật trong DirectAdmin và xử lý lỗi khi xin chứng chỉ. 5 phút đọc 171 lượt xem Cập nhật 23/08/2026 Cài đặt mcrypt cho PHP 7.2 trên DirectAdmin PHP 7.2 gỡ mcrypt khỏi lõi và đẩy sang PECL. Cách tải mã nguồn, biên dịch đúng bản PHP 7.2 rồi khai báo extension, kèm hướng chuyển sang OpenSSL. 6 phút đọc 197 lượt xem Cập nhật 23/08/2026