
Xử lý vấn đề full Inode 100% trên CyberPanel do php Sessions
Sơ đồ trang
Thực tế mình sử dụng CyberPanel cho nhiều dự án cho cá nhân thì chưa gặp trường hợp này tuy nhiên các khách hàng của mình thì có gặp 1 số trường hợp nên đây là bài viết lưu trữ cũng như chia sẽ đến mọi người cách để fix lỗi Full Inode 100% trên CyberPanel (php Sessions Full disk)
Inode là gì?
Trong hệ thống file của Linux (hệ điều hành phổ biến trên VPS), “inode” là một cấu trúc dữ liệu dùng để lưu trữ thông tin về các file và thư mục. Mỗi file, thư mục, hoặc liên kết tượng trưng (symbolic link) trên VPS đều được gán một inode riêng. Inode chứa các thông tin như:
- Kích thước file
- Vị trí lưu trữ trên ổ cứng
- Quyền truy cập (ai được đọc, ghi, thực thi)
- Thời gian tạo/sửa file
Tuy nhiên, inode không chứa nội dung file mà chỉ là “chỉ mục” để hệ thống biết file/thư mục đó nằm ở đâu.
Full Inode 100% là gì?
Trên VPS, số lượng inode là có giới hạn, tùy thuộc vào cấu hình của nhà cung cấp hosting. Khi bạn nghe “Full Inode 100%”, điều đó có nghĩa là VPS của bạn đã sử dụng hết toàn bộ số inode được cấp. Nói cách khác, bạn không thể tạo thêm file, thư mục hay bất kỳ đối tượng nào mới, ngay cả khi dung lượng ổ cứng (dung lượng GB) vẫn còn trống.
Khi bạn gặp lỗi Full Inode 100%, điều này có thể gây ra nhiều vấn đề như:
- Không thể tạo file mới
- Không thể cài đặt phần mềm
- Các ứng dụng có thể ngừng hoạt động
- Website có thể không hoạt động
Ví dụ:
Bạn có VPS với dung lượng 20GB và giới hạn 100.000 inode.
Bài viết liên quan
Nếu bạn tạo 100.000 file nhỏ (dù mỗi file chỉ vài KB), bạn sẽ dùng hết inode, dù dung lượng 20GB chưa đầy. Đây là điều nhiều người lầm tưởng và đặt chấm hỏi tại sao dung lượng còn nhiều thế mà không thể tạo file mới và gặp ngay thông báo lỗi (no space left on device…)
Nguyên nhân khiến Inode đầy 100%
Có quá nhiều tệp nhỏ
- Các hệ thống CMS như WordPress có thể sinh ra nhiều tệp cache, session, hoặc logs.
- Thư mục /tmp chứa nhiều tệp tạm chưa được dọn dẹp.
- Tệp thư rác trong /var/spool/mail hoặc /var/log/.
Thư mục chứa quá nhiều tệp con
- Crawler hoặc bot sinh ra nhiều session tạm thời.
- Đầy Inodes do session PHP tạo ra (case gặp phải trên CyberPanel)
- Spam email trên máy chủ
Cấu hình inode giới hạn thấp
- Một số VPS giá rẻ hoặc phân vùng ổ đĩa có giới hạn inode thấp từ lúc cài đặt.
Cách check Inode trên VPS
Kiểm tra tình trạng inode: Đăng nhập vào VPS qua SSH, gõ lệnh:
df -i
Bạn sẽ thấy giới hạn Inode ngay lập tức, ví dụ trong hình giới hạn là
root@127:~# df -i Filesystem Inodes IUsed IFree IUse% Mounted on udev 240633 438 240195 1% /dev tmpfs 252323 636 251687 1% /run /dev/vda1 1943040 481633 1461407 25% / tmpfs 252323 29 252294 1% /dev/shm tmpfs 252323 3 252320 1% /run/lock tmpfs 252323 18 252305 1% /sys/fs/cgroup /dev/loop0 96000 2926 93074 4% /var/tmp tmpfs 252323 2226 250097 1% /tmp tmpfs 252323 22 252301 1% /run/user/0
Tổng quan về tình trạng sử dụng inode
Phân vùng chính (/dev/vda1):
- Tổng số inode: 1,943,040
- Đã sử dụng: 481,633 (25%)
- Còn trống: 1,461,407 (75%)
/dev/vda1 là phân vùng quan trọng nhất, nơi hệ thống file chính được lưu trữ. Với chỉ 25% inode đã được sử dụng.
Các phân vùng khác cũng đang ở mức sử dụng inode rất thấp:
- /dev/loop0: 4% sử dụng
Các phân vùng tmpfs: hầu hết đều dưới 1% sử dụng
Kiểm tra thư mục có nhiều inode
Ở trên là ví dụ để bạn hiểu về inode, nếu bạn gặp trường hợp inode full 100% thì nó sẽ báo % sử dụng là bạn sẽ biết được vấn đề, tiếp theo bạn cần kiểm tra vấn đề cụ thể chạy lệnh dưới đây để tìm thư mục chứa nhiều file
find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
Ví dụ đầu ra như sau:
root@127:~# find / -xdev -type f | cut -d “/” -f 2 | sort | uniq -c | sort -n
1 aquota.group
1 aquota.user
1 cyberpanel.swap
1 snap
1 webadmin.csr
310 boot
900 etc
2625 root
6840 var
158271 home
223969 usr
Đây là phân tích chi tiết:
- Thư mục có ít file:
- aquota.group: 1 file
- aquota.user: 1 file
- cyberpanel.swap: 1 file
- snap: 1 file
- webadmin.csr: 1 file
- boot: 310 files
- etc: 900 files
- Thư mục có số lượng file trung bình:
- root: 2,625 files
- var: 6,840 files
- Thư mục có nhiều file:
- home: 158,271 files
- usr: 223,969 files
Theo kết quả này, phần lớn file tập trung ở hai thư mục:
- /home: Chứa 158,271 files (có thể bao gồm website, dữ liệu người dùng)
- /usr: Chứa 223,969 files (hệ thống, ứng dụng cài đặt)
Kết hợp với thông tin df -i
từ trước đó cho thấy bạn đang sử dụng 25% tổng số inode, tình hình vẫn ở mức an toàn. Tuy nhiên, số lượng file trong /home
khá cao, điều này gợi ý rằng có thể có nhiều website hoặc ứng dụng được host trên VPS này.
Nếu bạn muốn quản lý tốt hơn, có thể tập trung vào thư mục /home
để kiểm tra:
- Các file tạm thời hoặc cache từ các website
- Logs tích lũy
- Các bản sao lưu cũ không cần thiết
- File cache từ các plugin WordPress (nếu bạn đang sử dụng)
Dù hiện tại không gặp vấn đề với inode, việc duy trì thói quen dọn dẹp định kỳ vẫn là cách tốt để tránh gặp vấn đề trong tương lai.
Xử lý Full Inode 100% trên CyberPanel
1. Tìm và xoá các file session
Sử dụng lệnh dưới đây để tìm các file có định dạng sess_ trong thư mục /var/lib/lsphp/session/
và xoá đi. Bạn không thể sử dụng rm -rf
để xoá file sẽ gặp lỗi -bash: /usr/bin/rm: Argument list too long
find /var/lib/lsphp/session/ -name 'sess_*' -delete
Ngoài ra bạn có thể copy script bên dưới để xoá. Script này được viết bởi usmannasir cũng chính là tác giả của CyberPanel.
bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/setup_php_sessions.sh)
2. Đặt cron xoá
Bạn nên đặt cron để xoá tự động theo lịch ví dụ chạy mỗi ngày 1 lần.
Để đặt cron job chạy mỗi ngày 1 lần, lúc 12h đêm, bạn cần thêm chúng vào crontab của hệ thống. Bạn có thể mở crontab bằng lệnh sau:
crontab -e
Sau đó, thêm dòng sau vào cuối file:
0 0 * * * find /var/lib/lsphp/session/ -name 'sess_*' -delete
Sau đó lưu và thoát là xong.
Ngoài ra bạn nên đọc qua bài viết cách xoá log định kỳ trên CyberPanel để tránh để ổ cứng bị đầy do log nữa là đẹp