Inode Limit บน Hosting คืออะไร ป้องกันเว็บล่ม

เข้าใจ Inode ลิมิต และวิธีจัดการให้เว็บไซต์ของคุณไม่ถูกระงับเพราะเกิน Quota

Inode Limit บน Hosting เก็บไฟล์ Hosting

Inode คืออะไร? ความแตกต่างระหว่าง Inode และ Disk Space

Inode (Index Node) คือโครงสร้างข้อมูลบนระบบไฟล์ เก็บข้อมูลเมตาดาต้าของแต่ละไฟล์และโฟลเดอร์ ไม่ว่าจะเป็นชื่อไฟล์ สิทธิ์การเข้าถึง เวลาแก้ไข ขนาด หรือตำแหน่งของข้อมูลบน Disk ทำให้อาจสับสนได้ว่า Inode ต่างจาก Disk Space (MB/GB) อย่างไร

ความแตกต่างสำคัญคือ:

ตัวอย่างเพื่อให้เข้าใจชัดขึ้น: ถ้าคุณมี WordPress ที่ติดตั้ง WooCommerce ด้วยผลิตภัณฑ์หลายร้อยชิ้น และอีก 10,000 ไฟล์ cache เล็ก ๆ แบบนี้ Disk Space อาจจะเพียง 500MB (ไม่ใช่ใหญ่) แต่ Inode ก็จะถูกใช้ไป 10,000+ อันแล้ว ซึ่งอาจเกิน Limit ของแผน Hosting ได้

ทำไม Shared Hosting ถึงมีการจำกัด Inode?

บน Shared Hosting ผู้ให้บริการมีระบบไฟล์เดียวกันสำหรับหลายพันบัญชี Hosting คุณหากมีหลาย Inode มากเกินไป จะทำให้ Inode Table บน Disk เต็มไป และส่งผลให้บัญชี Hosting อื่น ๆ ไม่สามารถสร้างไฟล์ใหม่ได้ นอกจากนี้ Inode ที่มากเกินไปยังทำให้ Filesystem Scan ช้า ส่งผลต่อประสิทธิภาพของเซิร์ฟเวอร์ทั้งหมด

ดังนั้นผู้ให้บริการจึงจำกัดจำนวน Inode ต่อบัญชี เพื่อให้บัญชีอื่นไม่ได้รับผลกระทบ แผนทั่วไปมักจำกัดที่หลักแสนถึงหลักล้าน Inode ขึ้นกับผู้ให้บริการและแผนที่เลือก

วิธีตรวจสอบ Inode Usage ใน cPanel

ในการดู Inode Usage ปัจจุบันของบัญชี Hosting ใน cPanel นั้นง่ายมาก ไม่ต้องใช้ Command Line:

  1. Login เข้า cPanel ของ Hosting ที่ใช้งาน (ปกติที่ yourdomain.com:2083)
  2. ในหน้าแรก (Dashboard) มองหาส่วน Quotas หรือ Statistics ทางด้านขวา
  3. คุณจะเห็นแถบแสดง "Inode Usage" พร้อมกราฟสีเขียว ที่บอกว่าใช้ไป กี่ Inode จาก Total ทั้งหมด
  4. หากใหม่กว่า cPanel อาจมีหน้า Resource Usage ที่รวมข้อมูล Inode, Disk Space, และ CPU/Memory ไว้ด้วยกัน

ตัวอย่างการอ่านผล: "Inode Usage: 45,250 / 200,000" หมายความว่าคุณใช้ Inode ไป 45,250 ตัวจากลิมิต 200,000 ตัว ยังมีที่ว่างอีก 154,750 ตัว

หากมี SSH Access (บางแผน Hosting แพง ๆ จึงจะมี) สามารถใช้คำสั่งด้านล่างเพื่อดู Inode Usage ได้เช่นกัน:

# ดู Inode Usage ของโฟลเดอร์ปัจจุบัน
find . -printf '%i\n' | wc -l

# ดู Inode Usage ของโฟลเดอร์ home ทั้งหมด
find ~ -printf '%i\n' | wc -l

# ดู Inode Usage ของโฟลเดอร์ public_html เท่านั้น
find ~/public_html -printf '%i\n' | wc -l

สาเหตุทั่วไปของ Inode Usage สูง

การใช้ Inode จำนวนมากมักเกิดจากสาเหตุต่อไปนี้:

1. Cache Plugin ของ WordPress

Plugin เช่น WP Super Cache, W3 Total Cache หรือ LiteSpeed Cache มักสร้างไฟล์ cache แต่ละหน้าเป็นไฟล์แยก ทำให้ได้จำนวนไฟล์มหาศาล ตัวอย่าง: เว็บที่มี 1,000 หน้า แต่ละหน้ามีไฟล์ cache 10 เวอร์ชั่น = 10,000 Inode จากแค่ Plugin เดียว

2. Email Accounts ใน Maildir Format

Email ในระบบ Maildir ของ cPanel ถูกเก็บเป็นไฟล์แยกแต่ละฉบับ ไม่ใช่ไฟล์ Database เดียว อีเมล 100,000 ฉบับ = 100,000 Inode ดังนั้นหากมี Email Account หลายตัวและแต่ละตัวมีอีเมลเยอะ Inode ก็จะพุ่งสูงขึ้นเรื่อย ๆ

3. node_modules Folder จาก Node.js Projects

Folder node_modules มีไลบรารี JavaScript หลายพันตัว แต่ละตัวมีไฟล์หลายร้อย ตัวอย่าง: Project Node.js เพียงหนึ่งตัว node_modules อาจมี 50,000+ ไฟล์

4. Backup Files และ Old Logs

Backup ไฟล์เก่า, Logs ประวัติการทำงาน, และ Temp Files ที่ไม่มีใครลบทิ้ง นั่นสามารถสะสมเป็นหลักหมื่นไฟล์ได้ง่าย

5. Session Files จากแอปพลิเคชัน

ระบบ PHP session หรือ Application ที่สร้างไฟล์ Session ต่อ Visitor แต่ละรายคน เมื่อมีผู้เยี่ยมชม 100,000 คน = 100,000 ไฟล์ Session (หรือมากกว่า)

วิธีลด Inode Usage ไม่ให้ล่ม

เมื่อ Inode Usage เข้าใกล้ Limit ควรทำการแก้ไขอย่างรวดเร็ว วิธีการลดมีดังต่อไปนี้:

ขั้นตอนที่ 1: ล้าง Cache Plugin

  1. เข้า WordPress Dashboard แล้วไปที่ Plugin ที่ติดตั้ง (เช่น WP Super Cache)
  2. หา Option "Clear All Cache" หรือ "Purge Cache" แล้วคลิก
  3. เข้า cPanel > File Manager แล้วเข้าไปยัง wp-content/cache/ ลบโฟลเดอร์นี้ทั้งหมด (ระบบจะสร้าง Cache ใหม่อัตโนมัติ)
  4. เลือก Plugin Cache ที่มีประสิทธิภาพและหนักน้อยกว่า เช่น WP-Optimize แทน WP Super Cache

ขั้นตอนที่ 2: ลบอีเมลเก่าและ Spam

  1. ใน cPanel ไปที่ Email > Email Accounts ดูว่ามี Email Account ไหนมีการใช้งาน หากมีตัวที่ไม่ใช้ให้ลบออก
  2. Login Webmail (Roundcube หรือ Horde) ของแต่ละ Email Account
  3. ลบอีเมลใน Spam Folder และ Trash Folder ให้หมด คลิก "Empty Trash" เพื่อลบถาวร
  4. ลบอีเมลเก่า (เช่น เก่ากว่า 1 ปี) เลือกอีเมลแล้ว "Shift + Click" ลบหลายตัวพร้อมกัน

ขั้นตอนที่ 3: ลบ node_modules ถ้าเป็น Production

  1. ใน cPanel > Terminal (ถ้ามี) หรือผ่าน SSH ถ้า Allow SSH Access
  2. ไปยัง Directory โปรเจกต์ Node.js: cd ~/public_html/my-app
  3. ลบ node_modules: rm -rf node_modules
  4. หลังจากนั้น Production ควรใช้แค่ไฟล์ที่ Bundled/Compressed แล้วเท่านั้น ไม่ต้องใช้ Unminified Source

ขั้นตอนที่ 4: ลบไฟล์ Backup และ Old Logs

  1. ใน cPanel > File Manager เข้าไปดู Directory ต่าง ๆ ที่มีไฟล์ Backup (ไฟล์ .bak, .backup, .old, .sql)
  2. ลบไฟล์ที่เก่ากว่า 3 เดือน เก็บไว้แค่ Backup ล่าสุด 2-3 ตัว
  3. ลบ Log Files เก่า เช่น access.log, error.log ถ้าเก่ากว่า 1 เดือนไม่ใช้แล้ว

ขั้นตอนที่ 5: ล้าง Session Files

  1. ใน cPanel > Terminal หรือ SSH ไปที่ cd /home/username/tmp (โฟลเดอร์ Temp)
  2. ลบไฟล์ Session เก่า: find . -name 'sess_*' -type f -delete
  3. หรือสามารถตั้ง Garbage Collector ใน PHP ให้ลบ Session อัตโนมัติผ่าน php.ini

วิธีป้องกันไม่ให้ Inode เต็มบ่อย

หลังจากลด Inode แล้ว ควรจัดการเรื่องดังต่อไปนี้เพื่อไม่ให้เต็มอีก:


ตรวจสอบว่า Inode Management ทำงานถูกต้อง

หลังจากทำการลด Inode ตามขั้นตอนข้างต้น ควรตรวจสอบด้วยวิธีดังนี้:

# 1. ตรวจสอบ Inode Usage เป็นประจำใน cPanel Statistics
# หากลดลงมากกว่า 20% ถือว่าสำเร็จ

# 2. ดู Cache Folder ใน WordPress
ls -la /home/username/public_html/wp-content/cache/ | wc -l

# 3. หากมี SSH ตรวจสอบไฟล์ Session
find ~/tmp -name 'sess_*' -type f | wc -l

# 4. ตรวจสอบโฟลเดอร์ node_modules (ถ้าเคยลบแล้ว)
du -sh ~/public_html/node_modules 2>/dev/null || echo "ไม่มี node_modules"

# 5. ตรวจสอบจำนวนไฟล์ Backup เก่า
find ~/public_html -name '*.sql' -o -name '*.bak' | wc -l
Tip: หากยังใช้งาน cPanel/DirectAdmin ของผู้ให้บริการและเห็น Inode Usage ขึ้นเรื่อย ๆ หลังจากลดแล้ว อาจจะต้องติดต่อ Support ผู้ให้บริการเพื่อเพิ่ม Inode Limit หรือพิจารณาอัปเกรด Hosting Plan ที่มีลิมิตสูงขึ้น

แก้ปัญหาที่พบบ่อย

Error: "Inode Limit Exceeded"

ข้อความนี้ปรากฏเมื่อ Inode Usage ถึง 100% ของลิมิต เว็บไซต์จะไม่สามารถสร้างไฟล์ใหม่ได้ รวมถึง Upload ไฟล์ สร้าง Post/Comment บน Blog ไม่ได้ การแก้ไขคือต้องลดจำนวนไฟล์โดยทำตามขั้นตอนที่กล่าวข้างต้น (ล้าง Cache, ลบเมล, ลบ Backup เก่า)

Error: "ไม่สามารถอัพโหลดไฟล์ได้ (Failed to upload)" ทั้งที่ Disk Space ยังมีเหลือ

นี่เป็นสัญญาณที่ชัดเจนว่า Inode เต็ม ไม่ใช่ Disk Space ความสับสนเกิดจากสองค่านี้เป็นสิ่งที่แตกต่างกัน ลดจำนวนไฟล์ตามขั้นตอนข้างต้นเพื่อให้ Inode ว่างออกมา

Error: "Error establishing a database connection" ในเว็บ WordPress

บางครั้ง Inode Limit เต็มอาจทำให้ไฟล์ Database หรือ Log ไม่สามารถเขียนได้ ทำให้ WordPress ไม่สามารถสื่อสารกับ Database ได้ วิธีแก้ไขคือลดไฟล์ Temp / Session / Cache ตามขั้นตอนข้างต้น

ระบบส่ง Email ล่าช้าหรือ Bounce Back

หากไฟล์ Email Queue ที่เก็บอีเมลที่ยังส่งไม่ได้เต็ม ก็จะมีปัญหาส่งอีเมล การแก้ไขคือลบอีเมลเก่าและ Spam ทั้งหมด ตามขั้นตอนที่ 2 ข้างต้น

cPanel Dashboard โหลดช้าหรือ Hang

เมื่อ Inode สูง เซิร์ฟเวอร์ต้องใช้เวลานานในการสแกน File System ทำให้ cPanel Dashboard ช้าลง วิธีแก้ไขคือลดไฟล์ตามวิธีข้างต้น หากลดแล้วยังช้าอยู่ ให้ติดต่อ Support ผู้ให้บริการเพื่อตรวจสอบว่าไม่มีปัญหา I/O ของ Server


คำถามที่พบบ่อย

Q: การอัพเกรด Plan Hosting ให้ Inode Limit สูงขึ้นจะช่วยได้หรือ?

A: ได้ครับ แผน Hosting ที่แพงกว่าหรือ Premium มักมี Inode Limit สูงกว่า เช่นแผน Entry Level อาจให้ 200,000 Inode แต่แผน Pro อาจให้ 500,000 หรือ 1 ล้าน Inode หากธุรกิจของคุณมีเว็บไซต์ที่มีไฟล์เยอะ เช่น Gallery ที่มีภาพหลายพัน Backup หรือ Email Account หลาย ๆ ตัว คุณสมควรพิจารณาอัพเกรด

Q: วิธีหลีกเลี่ยงการใช้ Cache Plugin แต่ยังเก็บประสิทธิภาพไว้ได้ไหม?

A: ได้ครับ หลายวิธีทดแทนการใช้ Plugin Cache ซึ่งใช้ Inode เยอะ: (1) ใช้ CDN เช่น Cloudflare เพื่อ Cache ไฟล์แบบ Global แทน Local Cache (2) ใช้ Plugin ที่ Cache ใน Database แทนไฟล์ เช่น WP Redis (ต้องมี Redis บน Server) (3) ใช้ Lazy Loading Plugin ง่าย ๆ เช่น A3 Lazy Load แทน Full Page Cache (4) ปรับ Expire Time ของ HTTP Header ใน .htaccess เพื่อให้บราว์เซอร์ Cache โดยตรง

Q: Inode ของไฟล์ที่เซ็ตเป็น 0 bytes ยังใช้ Inode อยู่ไหม?

A: ใช่ครับ แม้ไฟล์จะว่างเปล่า (0 bytes) ก็ยังใช้ Inode หนึ่งตัวอยู่ดี บนระบบไฟล์ Inode เก็บข้อมูล Metadata เช่น ชื่อไฟล์ เจ้าของ และเวลา โดยไม่สนใจขนาดของไฟล์ ดังนั้นการลบไฟล์ขนาด 0 bytes ก็มีประโยชน์เช่นกัน