Inode là gì? Giới hạn inode và disk quota trên hosting
Inode là gì, vì sao hosting hết inode dù ổ đĩa còn trống, các lệnh tìm thư mục chứa nhiều file, và cách disk quota áp dụng giới hạn cho từng tài khoản.

Ý chính
- Inode là bản ghi mà hệ thống file Linux giữ cho mỗi file và thư mục, nên giới hạn inode chính là giới hạn số lượng file.
- Ổ đĩa có thể hết inode trong khi vẫn còn dung lượng, lúc đó không tạo được file mới nào, làm hỏng upload, session và cache.
- du --inodes và find cho biết thư mục nào chứa nhiều file nhất; cache, session PHP, node_modules và email là thủ phạm thường gặp.
- Nhà cung cấp hosting áp dụng giới hạn dung lượng và inode bằng disk quota; không có quota, một tài khoản có thể làm đầy ổ đĩa của mọi người.
Inode là bản ghi mà hệ thống file Linux dùng cho mỗi file và thư mục, nên giới hạn inode trên hosting là mức trần số file và thư mục tài khoản của bạn được phép có. Khi chạm giới hạn, bạn không tạo được file mới nào, kể cả một file cache rất nhỏ, dù dung lượng đĩa có thể còn trống nhiều. Để xử lý, hãy tìm thư mục chứa nhiều file nhất (lệnh du --inodes làm việc này), rồi dọn cache, session cũ, bản backup và thư viện không dùng.
Bài viết giải thích inode là gì, vì sao chúng cạn, các lệnh cụ thể để tìm thư mục tốn inode, và cách nhà cung cấp hosting áp dụng giới hạn dung lượng và inode bằng quota. Về giới hạn CPU, RAM và tiến trình, xem bài riêng về giới hạn tài nguyên hosting.
Inode là gì?
Inode là bản ghi nhỏ mà hệ thống file Linux giữ cho mỗi file, thư mục và liên kết tượng trưng (symlink). Nó lưu chủ sở hữu, quyền, kích thước, thời gian và vị trí dữ liệu trên đĩa; tên file được lưu trong thư mục chứa file đó. Mỗi file dùng một inode bất kể kích thước, nên một video 4 GB và một file cache 40 byte tốn như nhau: một inode.
Bạn xem số inode của một file bằng ls -i, và tổng số của hệ thống file bằng:
df -i
Cột IUsed và IFree là số inode đã dùng và còn trống, IUse% cho biết hệ thống file sắp hết inode tới đâu.
Vì sao ổ đĩa còn trống mà vẫn hết inode?
Vì trên hệ thống file phổ biến nhất của Linux là ext4, số inode được cố định ngay khi tạo hệ thống file. Tài liệu mke2fs giải thích nó tạo một inode cho mỗi bytes-per-inode byte dung lượng, và tỷ lệ này không đổi được sau đó. Cấu hình mẫu trong mke2fs.conf dùng mặc định 16.384 byte cho mỗi inode, tức một ổ 80 GB có khoảng năm triệu inode.
Năm triệu nghe nhiều, cho tới khi một website tạo ra hàng triệu file chỉ vài trăm byte. Khi đó inode hết trong khi phần lớn dung lượng còn trống. XFS hoạt động khác: nó cấp inode khi cần, tới một tỷ lệ tối đa của dung lượng (mặc định 25% với hệ thống file dưới 1 TB, theo tài liệu mkfs.xfs), nên hiếm khi cạn theo kiểu này.
Trên hosting dùng chung còn có một trần thứ hai nhỏ hơn: inode quota của tài khoản. Nhà cung cấp có thể cho mỗi gói một số lượng file nhất định để một tài khoản không làm cạn cả hệ thống file. Như trang hỗ trợ về inode của Hostinger viết, khi chạm giới hạn bạn không thể tạo file hay thư mục mới, dù vẫn còn dung lượng.
Hết inode thì cái gì hỏng?
| Biểu hiện | Nguyên nhân |
|---|---|
| Upload trên WordPress hay trình quản lý file thất bại | Không tạo được file tải lên |
| Người dùng bị đăng xuất, giỏ hàng bị trống | PHP không ghi được file session mới |
Lỗi "No space left on device" dù df -h còn trống |
Lỗi này giống nhau cho cả dung lượng và inode; df -i cho biết là cái nào |
| Plugin cache ngừng chạy hoặc website chậm đi | Không ghi được file cache mới |
| Backup thất bại hoặc thiếu | Không tạo được file nén hay file tạm |
| Hộp thư không nhận thêm thư | Với kiểu lưu Maildir, mỗi thư là một file |
Lỗi "No space left on device" là cái gây nhầm nhất. Luôn chạy cả df -h và df -i trước khi bắt đầu xóa file lớn.
Cách tìm thư mục tốn nhiều inode
Chạy các lệnh sau bằng user của tài khoản (hoặc bằng root cho cả server). Thay ~ bằng thư mục bạn muốn kiểm tra.
Đếm số file theo từng thư mục cấp đầu (du của GNU coreutils hỗ trợ --inodes):
du --inodes -d 1 ~ 2>/dev/null | sort -n | tail -15
Sau đó vào sâu thêm một cấp ở kết quả lớn nhất, lặp lại cho tới khi tìm ra thư mục đang phình to:
du --inodes -d 1 ~/domains/example.com/public_html/wp-content | sort -n | tail -10
Nếu không có du --inodes (hệ thống cũ), đếm bằng find:
find ~ -xdev -type f 2>/dev/null | cut -d/ -f1-5 | sort | uniq -c | sort -n | tail -15
Chỉnh -f1-5 để gom theo đường dẫn sâu hơn hoặc nông hơn. -xdev giữ find trong một hệ thống file.
Tìm thư mục chứa trực tiếp rất nhiều file, dấu hiệu điển hình của thư mục session hay cache:
find ~ -xdev -type d -exec sh -c 'n=$(ls -A "$1" | wc -l); [ "$n" -gt 10000 ] && echo "$n $1"' _ {} \; 2>/dev/null | sort -n
Xem quota nếu server có dùng quota:
quota -s # mức dùng và giới hạn của bạn, gồm cả số file
sudo repquota -as # mọi user trên hệ thống file (chỉ root)
Trong kết quả của quota, các cột files là inode, nằm cạnh các cột dung lượng (block).
Thủ phạm thường gặp và cách dọn
| Thủ phạm | Vị trí thường thấy | Cách xử lý an toàn |
|---|---|---|
| File cache trang hoặc object cache | wp-content/cache/, thư mục cache của plugin |
Xóa cache từ plugin, hoặc chuyển sang page cache phía server hay Redis |
| Session PHP | Thư mục sessions hoặc tmp trong tài khoản |
Xóa file cũ hơn thời gian sống của session; đảm bảo cơ chế dọn session có chạy |
node_modules, vendor |
Thư mục ứng dụng, bản build cũ | Xóa bản build không dùng; cài thư viện một lần cho mỗi bản phát hành, không phải mỗi bản sao |
| Backup cũ giải nén trên server | backup-*/, old/, public_html_old/ |
Giữ file nén ở ngoài server thay vì giải nén tại chỗ |
| Email kiểu Maildir | Thư mục hộp thư, nhất là Trash và Junk | Dọn Trash, Junk, lưu trữ thư cũ |
| Ảnh thumbnail và các kích thước ảnh | wp-content/uploads/ |
Bỏ các kích thước ảnh không dùng, rồi chỉ tạo lại những gì cần |
| Log và file lỗi | logs/, file error_log rải khắp các thư mục |
Xoay vòng và xóa log cũ; sửa lỗi đang làm đầy log |
Ví dụ xóa file session cũ hơn hai ngày:
find ~/tmp/sessions -type f -mtime +2 -delete
Kiểm tra đường dẫn hai lần trước khi chạy bất kỳ lệnh -delete nào, và backup trước nếu bạn không chắc thư mục chứa gì. Bài chiến lược backup website hướng dẫn giữ backup ở ngoài server.
Nhà cung cấp hosting áp dụng giới hạn dung lượng và inode thế nào?
Trên Linux, giới hạn dung lượng và số file theo tài khoản là disk quota của hệ thống file. Hệ thống file chứa các tài khoản được mount với hỗ trợ quota (usrquota trên ext4, uquota trên XFS), và mỗi user Linux có hai mức giới hạn cho dung lượng và hai mức cho inode:
| Giới hạn | Ý nghĩa |
|---|---|
| Soft limit (giới hạn mềm) | Được vượt trong một khoảng thời gian ân hạn, kèm cảnh báo |
| Hard limit (giới hạn cứng) | Không bao giờ được vượt; ghi file thất bại tại mức này |
| Grace period (thời gian ân hạn) | Thời gian được vượt giới hạn mềm trước khi nó có tác dụng như giới hạn cứng |
Quota chỉ hoạt động khi mỗi tài khoản hosting là một user Linux riêng, vì kernel đếm file theo chủ sở hữu. Nếu mọi website chạy chung một user như www-data, không thể giới hạn số file theo từng website. Container là một cái bẫy khác: trên một số dịch vụ VPS dạng container, quota hoàn toàn không dùng được bên trong VPS, đó là lý do các panel thường khuyên dùng máy ảo KVM đầy đủ.
Không có quota, panel chỉ đo được mức dùng sau khi sự việc đã xảy ra, và một tài khoản có cache mất kiểm soát có thể làm đầy hệ thống file, khiến mọi database và hộp thư trên server ngừng hoạt động.
Mỗi gói nên cho bao nhiêu inode?
Không có con số chuẩn, và mỗi website rất khác nhau: một website giới thiệu nhỏ và một cửa hàng có hàng nghìn ảnh sản phẩm cùng thumbnail có thể chênh nhau gấp mười lần trở lên. Hãy bắt đầu từ mức dùng thật. Đo các tài khoản hiện có bằng repquota -as, rồi đặt giới hạn cao hơn mức dùng bình thường một khoảng thoải mái và thấp hơn nhiều so với sức chứa của hệ thống file, để cả server không bao giờ cạn trước một tài khoản. Bài định giá gói hosting nói về cách đưa giới hạn vào gói.
Giới hạn dung lượng và inode trên ZoPanel
Trên ZoPanel, mỗi tài khoản hosting là một user Linux riêng, nên giới hạn là quota của kernel, không phải ước lượng. Mỗi gói trong Packages có Disk (MB) và Files (inodes): dung lượng là quota hệ thống file mà tài khoản không ghi vượt được, còn giới hạn inode là quota số file và thư mục. Cả hai cần bật disk quota, bạn kiểm tra trong Settings → System → Disk quotas; không có quota thì mức dùng chỉ được đo (gói và giới hạn). Khi tài khoản đầy, chỉ tài khoản đó bị lỗi ghi file.
Khách hàng thấy Disk space và Files (inodes) bên cạnh giới hạn trên trang Resources, thanh hiển thị chuyển cam ở 75% và đỏ ở 90%, còn Disk usage giúp tìm thư mục chiếm dung lượng. Khách cũng có thể nhận cảnh báo disk quota qua email hoặc Telegram. Để đếm file theo thư mục, các lệnh ở trên chạy được trong terminal sandbox của ZoPanel khi gói cho phép truy cập terminal.
Điều ZoPanel không làm: tự dọn cache giúp bạn, hay tăng tổng số inode của một hệ thống file ext4, việc mà không panel nào làm được sau khi hệ thống file đã tạo. Xem thêm công cụ hosting ở trang tính năng hosting.
Kết luận
Giới hạn inode là giới hạn số lượng file, không phải kích thước. Khi website không ghi được file mà ổ đĩa trông còn trống một nửa, hãy chạy df -i, rồi du --inodes để tìm thư mục gây ra, và dọn cache, session hay đồ thừa tìm thấy ở đó. Nếu bạn vận hành server hosting, hãy áp dụng cả giới hạn dung lượng lẫn inode bằng quota, để cache mất kiểm soát của một tài khoản chỉ là vấn đề của tài khoản đó.
Để thử quota dung lượng và inode theo từng tài khoản trên VPS của bạn, gói Free của ZoPanel cho 3 tài khoản hosting, 10 website và 10 database, không giới hạn thời gian.
Câu hỏi thường gặp
Inode trong hosting là gì?
Inode là bản ghi của hệ thống file cho một file hoặc thư mục. Mỗi file, thư mục, thư email lưu dạng file và file cache đều dùng một inode. Vì vậy giới hạn inode của hosting là giới hạn số file và thư mục mà tài khoản được có.
Email có tính vào giới hạn inode không?
Tùy cách nhà cung cấp lưu thư. Với Maildir, mỗi thư là một file riêng và dùng một inode, nên hộp thư có 100.000 thư dùng 100.000 inode. Có nơi tính email vào quota tài khoản, có nơi lưu ở chỗ khác; hãy xem tài liệu của nhà cung cấp.
Làm sao giảm số inode của WordPress?
Xóa và giới hạn cache dạng file, xóa backup cũ nằm trong website, gỡ plugin và theme không dùng, dọn thư mục session hoặc tmp. Page cache phía server hay Redis object cache tạo ít file hơn nhiều so với nhiều plugin cache dạng file.
Có tăng được số inode của server không?
Trên hệ thống file ext4 đang dùng thì không: số inode được đặt khi tạo. Bạn có thể thêm một hệ thống file mới với tỷ lệ bytes-per-inode thấp hơn, hoặc dùng XFS vốn cấp inode khi cần. Trên hosting dùng chung, hãy hỏi nhà cung cấp gói có giới hạn inode cao hơn.
Chạm giới hạn inode thì chuyện gì xảy ra?
Bạn không tạo được file hay thư mục mới cho tới khi xóa bớt. Upload, ghi cache, session PHP và backup thất bại, còn file đang có vẫn chạy bình thường. Xóa file không cần thiết để xuống dưới giới hạn là mọi thứ chạy lại ngay.
Đọc tiếp

1 VPS chứa bao nhiêu website, bao nhiêu tài khoản hosting? Số đo thực tế
1 VPS chứa bao nhiêu website và tài khoản hosting, theo số đo trên VPS 4 GB, 3 GB, cùng cách ổ đĩa, mail, ứng dụng và overselling thay đổi con số.

Giới hạn tài nguyên hosting CPU, RAM: đặt bao nhiêu cho đúng?
Giới hạn tài nguyên hosting CPU, RAM, I/O, tiến trình, inode là gì, Linux áp dụng ra sao, và cách đặt gói hosting để một website không kéo sập cả server.

VPS cho WordPress cấu hình bao nhiêu là đủ? Cách chọn CPU, RAM, ổ đĩa
VPS cho WordPress cấu hình bao nhiêu là đủ cho 1, 10 hay 100 website? Cách ước lượng CPU, RAM, ổ đĩa theo lưu lượng, kèm số liệu đo thực tế và lỗi cần tránh.