อาการของปัญหา
เมื่อพื้นที่ดิสก์ของระบบ โดยเฉพาะพาร์ทิชัน / หรือ /var เต็ม อาจทำให้ระบบไม่สามารถเข้าสู่หน้าจอ GUI ได้ โดยพบอาการดังนี้
- ค้างที่หน้า Boot
- ค้างที่ข้อความ
Started GNOME Display Manager - หน้าจอดำหลังจากบูต
- ล็อกอินเข้า GUI ไม่ได้
- ระบบรีบูตวนซ้ำ
สาเหตุส่วนใหญ่เกิดจากไฟล์ Log ใน /var/log มีขนาดใหญ่มากจนพื้นที่ดิสก์เหลือ 0%
ขั้นตอนที่ 1: เข้าเมนู GRUB
- รีบูตเครื่อง
- เมื่อหน้าจอ GRUB ปรากฏขึ้น ให้เลือก Kernel ที่ต้องการบูต
- กดปุ่ม
eเพื่อแก้ไขรายการบูตชั่วคราว
ขั้นตอนที่ 2: แก้ไข Kernel Parameter
ค้นหาบรรทัดที่ขึ้นต้นด้วย
linux
หรือ
linuxefi
ตัวอย่าง:
linux ($root)/vmlinuz-5.x.x root=/dev/mapper/cs-root ro quiet
เลื่อนไปท้ายบรรทัด แล้วเพิ่มข้อความ:
init=/bin/bash
ตัวอย่าง:
linux ($root)/vmlinuz-5.x.x root=/dev/mapper/cs-root ro quiet init=/bin/bash
ขั้นตอนที่ 3: บูตเข้าสู่ Shell
กด
Ctrl + X
หรือ
F10
ระบบจะบูตเข้าสู่ Command Line โดยตรงและไม่โหลด GUI
ขั้นตอนที่ 4: ทำให้ Root Filesystem เขียนได้
โดยปกติระบบจะ Mount แบบ Read-only จึงต้องเปลี่ยนเป็น Read-Write ก่อน
mount -o remount,rw /
ตรวจสอบว่าใช้งานได้:
mount | grep ' / '
ขั้นตอนที่ 5: ตรวจสอบพื้นที่ดิสก์
df -h
ตัวอย่าง:
Filesystem Size Used Avail Use%
/dev/sda3 20G 20G 0 100%
ขั้นตอนที่ 6: ค้นหาโฟลเดอร์ที่ใช้พื้นที่มาก
ตรวจสอบขนาดของ /var
du -xh /var --max-depth=1 | sort -h
ตัวอย่าง:
5.1G /var/log
ตรวจสอบไฟล์ Log ที่มีขนาดใหญ่
du -ah /var/log | sort -rh | head -30
ขั้นตอนที่ 7: ลบหรือเคลียร์ Log
ลบ Log เก่าที่ไม่จำเป็น:
rm -f /var/log/messages-*
หรือเคลียร์เฉพาะไฟล์ขนาดใหญ่:
truncate -s 0 /var/log/messages
ลบ Journal เก่า:
journalctl --vacuum-time=7d
หรือจำกัดขนาด:
journalctl --vacuum-size=500M
ขั้นตอนที่ 8: ตรวจสอบพื้นที่อีกครั้ง
df -h
เมื่อมีพื้นที่ว่างเพียงพอแล้ว ระบบจะสามารถบูตเข้า GUI ได้ตามปกติ
ขั้นตอนที่ 9: รีบูตเครื่อง
exec /sbin/init
หรือ
reboot -f
ตั้งค่า Logrotate เพื่อป้องกันปัญหาในอนาคต
แก้ไฟล์:
vi /etc/logrotate.d/rsyslog
เพิ่มค่า:
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
daily
rotate 30
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
/usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
endscript
}
ความหมาย:
daily: หมุน Log ทุกวันrotate 30: เก็บย้อนหลัง 30 วันcompress: บีบอัด Log เก่าdelaycompress: บีบอัดหลังจากหมุนครั้งถัดไป
สรุป
- เข้า GRUB และกด
e - เพิ่ม
init=/bin/bash - กด
Ctrl + X mount -o remount,rw /- ตรวจสอบพื้นที่ด้วย
df -h - ค้นหาไฟล์ขนาดใหญ่ใน
/var/log - ลบหรือเคลียร์ Log
- รีบูตเครื่อง
- ตั้งค่า Logrotate เพื่อป้องกันไม่ให้พื้นที่เต็มอีก
