몇 십분이 지나도 XenCenter에서 노란색으로 변한 상태 그대로, Logs 탭의 Progress bar가 찰 기미가 보이지 않을 때가 있다. 급한 마음에 force reboot/shutdown 을 해보아도 변화가 없고, cancel 버튼을 누를 수 없게 처리가 되거나 눌러도 아무 일도 일어 나지 않는다면, XenServer 상에서 처리를 해주어야 한다. 그런 경우에 몇 가지 처리 해주는 step이 있다. 대체로 회사에서의 경험을 토대로 쓰는 거라 정보보호 차원에서 텍스트로만 서술한다.
Step 1. task cancel 해당 VM이 올라가 있는 Host 서버나 그냥 같은 Pool 안에 있는 서버에 putty 등을 이용해 서버에 접속한 후, hang 걸려 있는 task를 찾는다.
위의 uuid는 task 자체의 uuid 이며 name-label에 clean reboot/shutdown 이라는 말이 씌여 있는 것 중 status가 pending 인 것을 찾는다. uuid를 copy 한 후 아래의 명령어를 수행한다.
# xe task-cancel uuid=<위에서 copy한 uuid>
그러면 task 자체가 취소되면서 노란색으로 보이던 VM power 상태가 다시 녹색으로 변한다. 이 때 force reboot/shutdown 을 수행하면 제대로 명령이 먹을 것이다.
Step 2. 위의 방법으로 안될 때, 특히 한 서버에 여러 VM이 위와 같은 상태로 있을 때, 그리고 VM이 XenCenter의 콘솔 창에서 하얗게 보일 뿐 작동을 시킬 수 없을 때 등등
여러 VM 들이 말을 안 듣고 Migration 도 안될 때, 주로 처음 시도해 볼 수 있는 command 는 아래일 것이다.
# xe-toolstack-restart
주요 프로세스들을 restart 해주는 명령어라고 생각하면 된다. 다행히 서비스에 영향은 없다. 이 것으로 해결이 되는 경우도 종종 발생을 한다. 하지만 그럼에도 불구하고 여전히 VM들이 말썽이라면, VM이 zombie 상태가 되어 있다고 보면 된다. 그럴 때는 XenServer 에서 그 zombie를 없애 버린다.
# xe vm-list name-label=<그 VM 이름> params=uuid --minimal abcdefgh-ikjl-mnop-qrst-uvwxyz12
문제가 생긴 VM의 uuid를 copy 한 후 그 VM에 해당하는 Domain 찾는다.
# list_domains | grep <그 VM uuid> 1234 | abcdefgh-ikjl-mnop-qrst-uvwxyz12 | H
제일 마지막 column이 H 로만 보인다면 비정상이다. 대체로 정상인 아이들은 B H 로 보인다. zombie 상태가 되었을 때 해당 VM에 대해 두 개의 결과가 보일 때가 있는데, 이 경우에도 제일 마지막 컬럼(domain state)이 H 인 domain 을 죽이면 된다.
맨 앞에 있는 숫자가 domain ID 이다. 이 숫자를 copy 해두었다가, 아래의 두 가지 명령 중 하나를 실행한다.
# /usr/lib/xen/bin/crash_guest <domid>
이 명령어는 해당 VM을 강제로 Crash 시킨다. OS상에 문제가 있는 VM의 crash dump를 얻고 싶을 때도 유용하게 사용할 수 있다. 이걸 해도 반응이 없으면 아래를 해본다.
만약 한 서버에서 여러 VM이 이와 같은 증세를 보이고 있다면, 가급적 VM들을 위의 방식으로 죽인 후 다른 Host 서버에서 기동시키고 XenServer 를 rebooting 하는 것이 좋다. 현재는 정상적으로 사용중인 것으로 보이는 VM 들도 시간이 지나면 점차 연결이 끊어지고 다시 연결이 안되는 경우가 있다.
덤으로, XenServer 자체가 버벅버벅해서 xe-toolstack-restart 를 수행하거나, 그냥 짤없이 xapi 서비스만 restart 시켰는데, xapi가 안 올라오는 때도 있다. 무조건 XenServer 를 rebooting 하기 전에, 한 번 시험 삼아 zombie 상태가 된 Domain 0 를 위의 방법으로 destroy 시켜 보는 것도 바람직하다.
list_domains 명령어 수행시 나오는 domain state에 대해 좀 더 연구를 해보면, 사용자로부터 직접 장애 접수가 들어오기 전에 뭔가 조치를 취해줄 수도 있을 것 같다. opensource xen 에 있는 명령어 인 것도 같은데, 이쁘게 각 state 가 의미하는 바가 뭔지 정리된 건 영 찾기가 힘들다ㅠㅠ