Error "No space left on device" แต่อาจมีพื้นที่ว่างจริงๆ สาเหตุหลัก 3 ประการ: 1) Disk จริงเต็ม 2) Inodes หมด 3) Deleted file ถูก process ถือครอง
1. ตรวจสอบพื้นที่จริง
df -h # ดู disk usage ทุก partition df -h / # ดู root partition du -sh / # คำนวณขนาดจริงของ / (ใช้เวลานาน)
เปรียบเทียบ df กับ du หากต่างกันมาก → deleted file ถูก process ถือครอง
2. สาเหตุและวิธีแก้
ก. Deleted File ถูก Process ถือครอง (Common!)
ไฟล์ถูกลบแต่ process ยังเปิดอยู่ → disk space ไม่คืน
# หา process ที่ถือไฟล์ deleted sudo lsof / | grep deleted # Output ตัวอย่าง: # systemd-j 123 root 4u REG 253,0 100M 12 /var/log/journal/... (deleted) # รีสตาร์ท service นั้น sudo systemctl restart systemd-journald # หรือ reload ทั้งระบบ sudo systemctl daemon-reload
ข. Inodes หมด (มากไฟล์เล็ก)
Filesystem มี inodes จำนวนจำกัด ไฟล์เยอะมาก (cache, session, mail) → inodes หมด แต่อย่างไรก็ตาม disk space ยังเหลือ
df -i / # ดู inode usage # IUsed / IFree / IUse%
แก้ไข: ลบไฟล์ไม่จำเป็น (cache, log เก่า, session files)
# หาโฟลเดอร์ที่มีไฟล์เยอะที่สุด find / -xdev -type f | cut -d/ -f2 | sort | uniq -c | sort -rn | head -20
ค. Bad Blocks / Filesystem Corruption
ดิสก์มี bad sector หรือ filesystem corrupt → OS นับ block เหล่านี้ว่าว่างแต่เขียนไม่ได้
# ต้อง boot จาก Live USB ก่อน! sudo fsck -vcck /dev/sda2 # -v: verbose, -c: check bad blocks (read-only), -c -c: non-destructive read-write, -k: keep existing bad blocks list
เตือน: fsck บน mounted partition เสี่ยงสูญเสียข้อมูล ต้อง unmount หรือใช้ live media
3. เครื่องมือช่วยวิเคราะห์
- ncdu: NCurses Disk Usage - UI แบบ TUI เร็ว สวย (
sudo apt install ncdu) - baobab (GNOME Disk Usage Analyzer) - GUI
- filelight (KDE) - GUI แบบ concentric rings
4. ป้องกันล่วงหน้า
- ตั้งค่า logrotate สำหรับ /var/log
- จำกัด journal size:
SystemMaxUse=500Mใน /etc/systemd/journald.conf - ตั้งค่า cron ทำความสะอาด /tmp, cache ทุกวัน
- Monitor ด้วย
df -hและdf -iใน cron/scheduler
ส่วนใหญ่ "No space left" แต่อยู่ที่ Inodes หมด หรือ deleted file ถูกถือครอง ไม่ใช่ disk จริงเต็ม!