So, you have a xen server, but the virtual machine is not responding, what do you do? You login to the hypervisor and fix it, all right!
Please note for sanitation that random strings have been used instead of real life UUID.
Step 1: Connect Hypervisor
ssh root@somehypervisoriporhostname
Step 2: Check Running Tasks (Task List)
[root@10-1-1-1 ~]# xe task-list uuid ( RO) : ff9ca1a3-fc29-a245-1f28-2adc646114a2 name-label ( RO): Async.VM.clean_reboot name-description ( RO): status ( RO): pending progress ( RO): 0.371 uuid ( RO) : aff56852-6db4-1ab3-b2b1-33e48c797dbb name-label ( RO): Connection to VM console name-description ( RO): status ( RO): pending progress ( RO): 0.000 [root@10-1-1-1 ~]# xe task-list params=all uuid ( RO) : ff9ca1a3-fc29-a245-1f28-2adc646114a2 name-label ( RO): Async.VM.clean_reboot name-description ( RO): subtask_of ( RO):subtasks ( RO): resident-on ( RO): 43b6096b-09cd-4890-b51b-56e50de573ff status ( RO): pending progress ( RO): 0.372 type ( RO): result ( RO): created ( RO): 20151014T15:01:17Z finished ( RO): 19700101T00:00:00Z error_info ( RO): allowed_operations ( RO): Cancel uuid ( RO) : aff56852-6db4-1ab3-b2b1-33e48c797dbb name-label ( RO): Connection to VM console name-description ( RO): subtask_of ( RO): subtasks ( RO): resident-on ( RO): 43b6096b-09cd-4890-b51b-56e50de573ff status ( RO): pending progress ( RO): 0.000 type ( RO): result ( RO): created ( RO): 20151014T15:57:48Z finished ( RO): 19700101T00:00:00Z error_info ( RO): allowed_operations ( RO):
I could see that there were two tasks running on this slice:
[root@10-1-1-1 ~]# xe vm-list name-label=slice10011111 uuid ( RO) : 4a9a5dfb-3c4a-b2bb-be7b-db3be6297fff name-label ( RW): slice10011111 power-state ( RO): running
This told me that the slice was running OK. So I am going to cancel the task pending for it
$ xe task-cancel uuid=ff9ca1a3-fc29-a245-1f28-2adc646114a2
Shutdown the server (HALT IT)
[root@10-1-1-1 ~]# xe vm-shutdown --force uuid=4a9a5dfb-3c4a-b2bb-be7b-db3be6297fff [root@10-1-1-1 ~]# xe vm-list name-label=slice10011111 uuid ( RO) : 4a9a5dfb-3c4a-b2bb-be7b-db3be6297fff name-label ( RW): slice10011111 power-state ( RO): halted
Start the Virtual Machine
[root@10-1-1-1 ~]# xe vm-start uuid=4a9a5dfb-3c4a-b2bb-be7b-db3be6297fff
At the end I wanted to check if the instance was still causing a large swap as it was when it was running out of memory! That is the reason why I had to start the server.
(echo "Slice IO_Read IO_Write Total"; (for uuid in $(xe vbd-list params=uuid | awk '$5{print $5}'); do xe vbd-param-list uuid=$uuid | grep -P "^\s*(io_|vm-name-label|vdi-name-label|vdi-uuid|device)" | awk '{if($1=="vdi-uuid") {hasswap="no";vdi_uuid=$4;}}{if($1=="vm-name-label") name=$4; if($1=="vdi-name-label") {if ($4 ~ /swap/) {hasswap="yes";name=name"-swap"}; if ($5 ~ /ephemeral/) name=name"-eph";} if($1=="device"){if($4=="hda" || $4=="xvda") name=name"-root"; if($4=="xvdc" && hasswap=="no") {vdicmd="xe vdi-list uuid="vdi_uuid" params=name-description --minimal | grep swap >> /dev/null"; swpname=system(vdicmd); if(swpname==0) name=name"-swap"};} if($1=="io_read_kbs") ioread=$4; if($1=="io_write_kbs") iowrite=$4}END{if(substr(name,0,9)!="XenServer") print name" "ioread" "iowrite" "ioread+iowrite}'; done) | sort -k4n) | column -t
Job done!