XenServer dom0 out of disk space

xen server

เมื่อเช้า upgrade kernel ของ VM หนึ่งใน CloudStack ซึ่งต้องมีการ restart VM แต่พอ restart ไปแล้วไม่สามารถ start ได้ ในใจคิดว่างานเข้าอีกแล้ว ลองตรวจดูคร่าวๆไล่ดูจาก status ต่างๆของ CloudStack ไปเจอว่า host XenServer ทั้งสองตัวแสดงสถานะเป็น Down

Screen Shot 2556-06-06 at 2.08.58 PM

ลองกด reconnect ดูก็ไม่ตอบสนองอะไร อาการแบบนี้เหมือน CloudStack ติดต่อ XenServer host ไม่ได้ แต่จากที่ลองดู VM ทั้งหมดยังทำงานอยู่ แสดงว่ามันไม่สามารถติดต่อ API ของ XenServer ได้

เมื่อลอง remote เข้าไปใน XenServer ลองใช้คำสั่ง xsconsole ดูก็ไม่สามารถติดต่อได้ ซึ่งจะไม่มีสถานะอะไรแสดงขึ้นมาให้เห็นเลย

ลองใช้ command line หลายๆคำสั่งอย่าง xe vm-list ก็จะพบ error ตามด้านล่าง
The server failed to handle your request, due to an internal error. The given message may give details useful for debugging the problem.
message: INTERNAL_ERROR: [ Http_client.Http_request_rejected("{ frame = false; method = POST; uri = /; query = [ ]; content_length = [ ]; transfer encoding = ; version = 1.0; cookie = [ ]; task = ; subtask_of = ; content-type = ; user_agent = xen-api-libs/1.0 }") ]

ลองดู memory usage ด้วยคำสั่ง freemem ก็ไม่เจออะไรผิดปกติ แต่พอลองดู disk usage ก็เจอว่า root partition ใช้พื้นที่ดิสก์จนเต็ม

[root@node01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 4.0G 3.9G 0 100% /
none 380M 0 380M 0% /dev/shm

ถ้าเราแบ่ง partition ไว้ไม่ดีเหมือนในกรณีนี้ก็เดาได้ไม่ยากว่า directory ที่เต็มน่าจะมาจาก /var

# du -sm * | sort -nr
64429 var
537 opt
531 usr
131 tmp
100 lib
28 sbin
15 boot
10 etc
8 root
6 bin
2 tftpboot
2 cli-rt
1 srv
1 selinux
1 Read_Me_First.html
1 mnt
1 media
1 lost+found
1 home
1 EULA
1 dev
0 sys
0 proc

ลองไล่ดูอีกก็เป็นไปตามคาดว่า /var/log ซึ้งเป็นที่อยู่ของ logfile เต็ม โดยปกติแล้ว directory ที่จะโตขึ้นเรื่อยๆในระบบจะมีสองอย่างคือ directory ที่เก็บ logfile และฐานข้อมูล

เท่าที่ลองดูใน directory พบ logfile จำนวนมาก บาง log มีจำนวมากถึง 999 ไฟล์ ซึ่งน่าจะเกิดจากการตั้ง logrotate ผมเลยเข้าไปดูในไฟล์ /etc/logrotate.conf แล้วจัดการแก้ flag rotate จาก 999 เหลือ 99 ก็พอ

# nano -w /etc/logrotate.conf

# see "man logrotate" for details
# CA-53139: rotate log files daily
daily
# CA-53139: compress old logfiles.
compress

# NOTE: removal of excess logs is done by script
# rotate 999
rotate 99

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}

# system-specific logs may be also be configured here.

จากนั้นก็ใช้คำสั่งด้านล่างเพื่อทำการลบ logfile ที่ rotate ไปแล้ว ไฟล์ที่มีเลขลำดับตั้งแต่ 2 เป็นต้นไปจะโดนบีบอัดไว้แล้ว ซึ่งเราจะลบไฟล์พวกนี้ออกทั้งหมด สำหรับ production server ควรจะ backup ไฟล์พวกนี้ก่อนทำการลบ

# rm -f /var/log/*[2-999]*

ตรวจสอบขนาดของดิสก์อีกครังก็พบพื้นที่ว่างขึ้นมา 1.4GB

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 4.0G 2.5G 1.4G 65% /
none 380M 0 380M 0% /dev/shm

ตรวจสอบว่า XenServer ทำงานอยู่ใน emergency mode หรือไม่ด้วยคำสั่ง

# xe host-is-in-emergency-mode

พบว่าทั้งสอง host ทำงานอยู่ใน emergency mode

[root@node01 ~]# xe host-is-in-emergency-mode
true

[root@node02 ~]# xe host-is-in-emergency-mode
true

บังคับให้ XenServer ออกจาก emergency mode โดยการใช้คำสั่งให้ node01 เป็น pool master

# xe pool-emergency-transition-to-master
Host agent will restart and transition to master in 10 seconds…

เสร็จแล้วตรวจสอบอีกครั้งจะพบว่าทั้งสอง host ออกจาก emergency mode แล้ว

[root@node01 ~]# xe host-is-in-emergency-mode
false

[root@node02 ~]# xe host-is-in-emergency-mode
false

เมื่อใช้คำสั่ง xsconsole ใน XenServer host จะสามารถมองเห็น status ต่างๆได้

Screen Shot 2556-06-06 at 3.02.13 PM

กลับมาที่ UI ของ CloudStack จะเห็นว่าสถานะของ host กลับมาเป็น UP เรียบร้อยแล้ว

Screen Shot 2556-06-06 at 3.11.33 PM

จากจุดนี้จะสามารถ start VM ได้ปกติ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s