Inodes และ 'No space left on device'
inode คือโครงสร้างข้อมูลที่ระบบไฟล์แบบ Unix ใช้จัดเก็บข้อมูลเกี่ยวกับไฟล์ เช่น เจ้าของไฟล์ สิทธิ์การเข้าถึง ขนาด และตำแหน่งที่จัดเก็บข้อมูล ไฟล์แต่ละไฟล์จะใช้ inode หนึ่งตัว และระบบไฟล์จำนวนมากมีการกำหนดจำนวน inode ไว้คงที่ ดังนั้นไฟล์ขนาดเล็กจำนวนหลายล้านไฟล์อาจทำให้เกิดข้อผิดพลาด 'No space left on device' ได้ แม้ว่า df -h จะยังแสดงว่ามีพื้นที่ว่างเหลืออยู่ก็ตาม
1วิธีตรวจสอบ
df -i จะแสดงรายการ inode ทั้งหมด, ที่ใช้งานไปแล้ว และที่ว่างอยู่ของแต่ละระบบไฟล์ ls -i จะแสดงหมายเลข inode ของไฟล์ และ stat <file> จะแสดงรายละเอียด inode ของไฟล์นั้น
2สาเหตุทั่วไป
ไดเรกทอรีเซสชันหรือแคชของเว็บแอปพลิเคชัน, คิวอีเมล, ไฟล์บันทึก (log) ขนาดเล็กที่ไม่ได้หมุนเวียน (rotate) และแคชของการ build อาจสร้างไฟล์จำนวนหลายล้านไฟล์ได้
3การค้นหาไดเรกทอรี
GNU du สามารถนับจำนวน inode ได้: du --inodes -x / | sort -n | tail จะแสดงรายการไดเรกทอรีที่มีจำนวนรายการมากที่สุด
วิธีแก้ไขปัญหา inode เต็ม
- ยืนยันปัญหา:
df -i(IUse% ใกล้ถึง 100%) - ค้นหาไดเรกทอรี:
sudo du --inodes -x --max-depth=3 / | sort -n | tail -20 - ตรวจสอบว่าไฟล์เหล่านั้นถูกสร้างขึ้นจากอะไรก่อนที่จะลบสิ่งใดออกไป
- ลบไฟล์เก่าของแอปพลิเคชันนั้นด้วยเครื่องมือของแอปพลิเคชันเอง หรือใช้คำสั่ง find ตัวอย่างเช่น:
find /path -type f -mtime +7 -deleteหลังจากทดสอบรันคำสั่งโดยไม่มี -delete ก่อน
ข้อควรระวัง
- ควรเรียกใช้คำสั่ง find โดยไม่มี -delete ก่อนเสมอเพื่อตรวจสอบรายการไฟล์
- จำนวน inode ของ ext4 จะถูกกำหนดไว้คงที่ตั้งแต่ตอนสร้างระบบไฟล์
บทความที่เกี่ยวข้อง
- df (disk free)วิธีอ่านผลลัพธ์จากคำสั่ง df, เหตุผลที่ Use% อาจถึง 100% ก่อนที่ Avail จะเป็นศูนย์สำหรับผู้ใช้ทั่วไป และวิธีตรวจสอบ inode ด้วย df -i
- การค้นหาไฟล์ขนาดใหญ่และไฟล์เก่าด้วย findวิธีใช้คำสั่ง find เพื่อแสดงรายการไฟล์ขนาดใหญ่หรือไฟล์เก่าบน Linux ดูตัวอย่างไฟล์อย่างปลอดภัย และลบเฉพาะไฟล์ที่คุณตรวจสอบแล้วเท่านั้น
- การใช้งานดิสก์ด้วย du และ ncduวิธีค้นหาว่าสิ่งใดทำให้ดิสก์ Linux เต็มด้วย du และ ncdu แบบโต้ตอบ พร้อมตัวเลือกที่จำกัดการทำงานอยู่ภายในระบบไฟล์เดียว
แหล่งอ้างอิง
ตรวจสอบล่าสุด: