Help us understand the problem. What is going on with this article?

xenstore コマンドで、管理情報をゲストVMからチョコっと覗き見

More than 5 years have passed since last update.

この文書はなに?

http://qiita.com/advent-calendar/2014/softlayer
http://qiita.com/advent-calendar/2014/softlayer2

に参加するのに書いたものです。是非、他のURLもご参照ください!

xenstoreって?

xenstoreは、xenstored を通じて、dom0とdomU間で情報をやり取りするための仕組みです。

それが SoftLayer にどう関係するの?

SoftLayerで利用されているハイパーバイザーは、XenServer です。各ゲストVMには、xentools がインストール済みの状態で引き渡されますが、この中に、xenstoreコマンドが含まれます。
この xenstoreコマンドを利用すると、ハイパーバイザー側の情報を少し引っ張ってこれるので、どんな情報が取れるのかをご紹介。

xenstoreコマンドの実際

私が知らないだけだと思いますが、ゲスト側から叩く場合には、あまり参考になるドキュメントが見当たらないのですが、下記のように実行することで、いくつか情報を得ることができます。

VMのuuidを知る

[root@vm ~]# xenstore-read vm
/vm/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

ここで表示される xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx が XenServer上での管理用の UUID になります。

VM名を知る

先ほどのコマンドの結果をそのまま xenstore-ls の引数として指定します。

[root@vm ~]# xenstore-ls /vm/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
uuid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
name = "999999-labs.kunitake.org"

ここで表示される name が、XenServer上で設定されている仮想マシン名になります。
先頭の6桁の数字に、SL をつけると、SoftLayerでのユーザ名になります。

なので、SoftLayerでは、仮想マシン名を

6桁の数字(アカウント番号)+ - + 最初に設定したホスト名

で管理しているようですね。なお、途中でSoftLayerの管理画面やゲストOS側でホスト名を変更しても、XenServer上でのVM名は変わらないようです。

VMに割り当てられたCPU個数を知る

[root@vm ~]# xenstore-ls cpu
0 = ""
 availability = "online"

この場合だと、1つです。

VMに割り当てられたメモリ情報を知る

XenServerは、メモリをオーバコミットする仕組みを持ってますが、ちゃんと 1GBしっかりと割り当てられていることが確認できます。

[root@vm ~]# xenstore-ls memory
initial-reservation = "1058816"
static-max = "1048576"
target = "1048576"
dynamic-min = "1048576"
dynamic-max = "1048576"
memory-offset = "0"

VMのデバイス情報を知る

xenstore-ls deviceを実行することで、そのVMにアタッチされている Disk/NIC情報が得られます。

[root@vm ~]# xenstore-ls device
vbd = ""
 51712 = ""
  backend = "/local/domain/0/backend/vbd/67/51712"
  protocol = "x86_64-abi"
  state = "4"
  backend-id = "0"
  device-type = "disk"
  virtual-device = "51712"
  ring-ref = "8"
  event-channel = "8"
 51728 = ""
  backend = "/local/domain/0/backend/vbd/67/51728"
  protocol = "x86_64-abi"
  state = "4"
  backend-id = "0"
  device-type = "disk"
  virtual-device = "51728"
  ring-ref = "9"
  event-channel = "9"
vif = ""
 0 = ""
  backend = "/local/domain/0/backend/vif/67/0"
  backend-id = "0"
  state = "4"
  handle = "0"
  mac = "06:1e:9f:XX:XX:XX"
  disconnect = "0"
  protocol = "x86_64-abi"
  tx-ring-ref = "768"
  rx-ring-ref = "769"
  event-channel = "10"
  request-rx-copy = "1"
  feature-rx-notify = "1"
  feature-sg = "1"
  feature-gso-tcpv4 = "1"
 1 = ""
  backend = "/local/domain/0/backend/vif/67/1"
  backend-id = "0"
  state = "4"
  handle = "1"
  mac = "06:99:cf:YY:YY:YY"
  disconnect = "0"
  protocol = "x86_64-abi"
  tx-ring-ref = "1280"
  rx-ring-ref = "1281"
  event-channel = "11"
  request-rx-copy = "1"
  feature-rx-notify = "1"
  feature-sg = "1"
  feature-gso-tcpv4 = "1"

OS情報を知る

下記コマンドで、XenServerから見えているゲストOSのメモリ、OS、uptime などの情報が得られます。

[root@vm ~]# xenstore-ls data
meminfo_total = "1016228"
meminfo_free = "859048"
os_name = "CentOS release 6.6 (Final)"
os_majorver = "6"
os_minorver = "6"
os_uname = "2.6.32-504.1.3.el6.x86_64"
os_distro = "centos"
updated = "Sun Nov 30 19:44:29 CST 2014"

XenServerとしてサポートされている機能を知る

知ったところで意味ないですが

[root@vm ~]# xenstore-ls control
platform-feature-multiprocessor-suspend = "1"
feature-balloon = "1"

XenToolsのバージョン情報およびアドレス情報を知る

ゲストOSにインストールされたXenToolsのバージョン情報と、ホスト側に見えているゲストOSのIPアドレス(IPv4/IPv6)の情報を知ることができます。

attr = ""
 PVAddons = ""
  MajorVersion = "6"
  MinorVersion = "2"
  MicroVersion = "0"
  BuildVersion = "83676"
  Installed = "1"
 eth0 = ""
  ip = "192.0.2.1"
  ipv6 = ""
   0 = ""
    addr = "fe80::41e:9fff:feXX:XXXX"
 eth1 = ""
  ip = "203.0.113.1"
  ipv6 = ""
   0 = ""
    addr = "fe80::499:cfff:feYY:YYYY"

コンソール情報を知る

これも知ったところで意味ないですが、SoftLayerの管理画面のコンソールがどう動いているか、ポート番号に思いを馳せることができます。

[root@vm ~]# xenstore-ls console
port = "2"
ring-ref = "16784082"
tty = "/dev/pts/1"
vnc-port = "5902"
tc-port = "9502"

domidを知る

ゲストOSが稼働しているホスト上内でのみユニークな ID になります。再起動するたびに変わったりします。

[root@vm ~]# xenstore-read domid
67

unique-domain-id を知る

多分プール内でユニークな domid。これも再起動のたびに変わる値です。

[root@vm ~]# xenstore-read unique-domain-id
yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy

VMのUUIDとは異なります。

起動オプション

xenstoreではないですが

[root@vm ~]# cat /proc/cmdline
ro root=UUID=AAAAAAA-BBBB-XXXX-YYYY-ZZZZZZZZZZZZ console=hvc0 SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us

BIOS関連

[root@vm ~]# xenstore-ls bios-strings
bios-vendor = "Xen"
bios-version = ""
system-manufacturer = "Xen"
system-product-name = "HVM domU"
system-version = ""
system-serial-number = ""
hp-rombios = ""
oem-1 = "Xen"
oem-2 = "MS_VM_CERT/SHA1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

その他もろもろ

こんな感じでガッツリ、いままで上に挙げたような自身のゲストOSに関する情報が取得できます。

[root@vm ~]# xenstore-ls /local/domain/`xenstore-read domid`
vm = "/vm/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
vss = "/vss/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
name = "999999-labs.kunitake.org"
cpu = ""
 0 = ""
  availability = "online"
memory = ""
 initial-reservation = "1058816"
 static-max = "1048576"
 target = "1048576"
 dynamic-min = "1048576"
 dynamic-max = "1048576"
 memory-offset = "0"
device = ""
 vbd = ""
  51712 = ""
   backend = "/local/domain/0/backend/vbd/67/51712"
   protocol = "x86_64-abi"
   state = "4"
   backend-id = "0"
   device-type = "disk"
   virtual-device = "51712"
   ring-ref = "8"
   event-channel = "8"
  51728 = ""
   backend = "/local/domain/0/backend/vbd/67/51728"
   protocol = "x86_64-abi"
   state = "4"
   backend-id = "0"
   device-type = "disk"
   virtual-device = "51728"
   ring-ref = "9"
   event-channel = "9"
 vif = ""
  0 = ""
   backend = "/local/domain/0/backend/vif/67/0"
   backend-id = "0"
   state = "4"
   handle = "0"
   mac = "06:1e:9f:XX:XX:XX"
   disconnect = "0"
   protocol = "x86_64-abi"
   tx-ring-ref = "768"
   rx-ring-ref = "769"
   event-channel = "10"
   request-rx-copy = "1"
   feature-rx-notify = "1"
   feature-sg = "1"
   feature-gso-tcpv4 = "1"
  1 = ""
   backend = "/local/domain/0/backend/vif/67/1"
   backend-id = "0"
   state = "4"
   handle = "1"
   mac = "06:99:cf:YY:YY:YY"
   disconnect = "0"
   protocol = "x86_64-abi"
   tx-ring-ref = "1280"
   rx-ring-ref = "1281"
   event-channel = "11"
   request-rx-copy = "1"
   feature-rx-notify = "1"
   feature-sg = "1"
   feature-gso-tcpv4 = "1"
error = ""
drivers = ""
control = ""
 platform-feature-multiprocessor-suspend = "1"
 feature-balloon = "1"
attr = ""
 PVAddons = ""
  MajorVersion = "6"
  MinorVersion = "2"
  MicroVersion = "0"
  BuildVersion = "83676"
  Installed = "1"
 eth0 = ""
  ip = "10.66.201.130"
  ipv6 = ""
   0 = ""
    addr = "fe80::41e:9fff:feXX:XXXX"
 eth1 = ""
  ip = "119.81.117.2"
  ipv6 = ""
   0 = ""
    addr = "fe80::499:cfff:feYY:YYYY"
data = ""
 meminfo_total = "1016228"
 meminfo_free = "812424"
 os_name = "CentOS release 6.6 (Final)"
 os_majorver = "6"
 os_minorver = "6"
 os_uname = "2.6.32-504.1.3.el6.x86_64"
 os_distro = "centos"
 updated = "Sun Nov 30 20:22:32 CST 2014"
messages = ""
platform = ""
 viridian = "true"
 nx = "false"
 acpi = "true"
 apic = "true"
 pae = "true"
 vcpu = ""
  number = "1"
  current = "1"
bios-strings = ""
 bios-vendor = "Xen"
 bios-version = ""
 system-manufacturer = "Xen"
 system-product-name = "HVM domU"
 system-version = ""
 system-serial-number = ""
 hp-rombios = ""
 oem-1 = "Xen"
 oem-2 = "MS_VM_CERT/SHA1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
unique-domain-id = "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
domid = "67"
store = ""
 port = "1"
 ring-ref = "33752022"
serial = ""
 0 = ""
  limit = "65536"
console = ""
 port = "2"
 ring-ref = "16784082"
 tty = "/dev/pts/1"
 vnc-port = "5902"
 tc-port = "9502"
vncterm-pid = "11509"

で、なんの役に立つの?

いや、特に役には立たないですねぇ…大昔、XenServerではゲストOS側から稼働しているホスト名が取得できた気がしてたんですが、もしSoftLayerでそれができるなら、収容先が変わった、変わらないが見えるかと思ったんですが、ちょっと調べたかぎりでは無理そう。残念。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away