ShinobiLayer: 仮想サーバーで作成されるxvdhは何に使われているのか？

#はじめに

SoftLayerの仮想サーバーで、なぜかxvdhというディスクが出来ていることがあります。これは何に使われているのでしょうかを考えてみるのがこの記事の目的です。

#どういう時にxvdhは作られているか？
仮想サーバーをプロビジョニングする時に、下記のようなUserMetadataを設定した時に作られているようです。
![UserMetaData.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/07d085e5-8dd6-db05-ab53-b42ea93d912d.jpeg)


このUserMetaDataは、特にAPI Keyなどを設定しなくても、プロビジョニング先のサーバーで、以下のようにHTTPリクエストを実行すればアクセスできます。詳細は、以下のリンクも併せてご参照下さい。
http://qiita.com/testnin2/items/7573295d6cb48cd5a3b2

```
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getUserMetadata.json
"companyname=AAA;department=Support;createDate=20150501;"
```

#xvdhにアクセスしてみる

xvdhの構成は以下のようになっています。

```
# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvdb    202:16   0    2G  0 disk
└─xvdb1 202:17   0    2G  0 part [SWAP]
xvda    202:0    0   25G  0 disk
├─xvda1 202:1    0  256M  0 part /boot
└─xvda2 202:2    0 24.8G  0 part /
xvdh    202:112  0   64M  0 disk
└─xvdh1 202:113  0   61M  0 part


# parted -l
（途中略）
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdh: 67.1MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      65.5kB  64.0MB  64.0MB  primary  fat16
```

とりあえず、xvdh1というパーティションが出来ているみたいなので、この領域をmountしてみます。すると、以下のようなメタ情報が含まれていることが分かりました。openstackなんていう意味深なディレクトリも含まれています。

```
# mkdir -p mntxvdh
# mount /dev/xvdh1 /mntxvdh
# ls -lR /mntxvdh
/mntxvdh:
total 2
-rwxr-xr-x 1 root root   59 Apr 30 14:37 meta.js
drwxr-xr-x 4 root root 1024 Apr 30 14:37 openstack

/mntxvdh/openstack:
total 2
drwxr-xr-x 2 root root 1024 Apr 30 14:37 content
drwxr-xr-x 2 root root 1024 Apr 30 14:37 latest

/mntxvdh/openstack/content:
total 1
-rwxr-xr-x 1 root root 282 Apr 30 14:37 interfaces

/mntxvdh/openstack/latest:
total 2
-rwxr-xr-x 1 root root 209 Apr 30 14:37 meta_data.json
-rwxr-xr-x 1 root root  55 Apr 30 14:37 user_data
```

```
# strings /mntxvdh/meta.js
["companyname=AAA;department=Support;createDate=20150501;"]

# strings /mntxvdh/openstack/content/interfaces
auto lo
iface lo inet loopback
iface eth0 inet static
address 10.XXX.XXX.XXX
netmask 255.255.255.192
post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.XXX.XXX.1
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 161.XXX.XXX.XXX
netmask 255.255.255.240
gateway 161.XXX.XXX.XXX

# strings /mntxvdh/openstack/latest/meta_data.json
{"files":[[]],"network_config":{"content_path":"\/content\/interfaces"},"hostname":"xxxxxxxx","name":"xxxxxxxx","domain":"softlayer.com","meta":{"dsmode":"net"},"uuid":"febxxxxx-7137-2xxx!

# strings /mntxvdh/openstack/latest/user_data
companyname=AAA;department=Support;createDate=20150501;

```


#その他の検証結果

* /dev/xvdh1をfdiskを使ってパーティションごと消してみて、OSも再起動してみたのですが、APIを使ってUserMetaDataに依然としてアクセスできました。このパーティション情報を消すことの悪影響は直ちには分かりませんが（分かったら教えてください！）、少なくともこの結果からは、このディスク内の情報はプロビジョニング後には直接参照されていないように思われます。

* StandardImageを取得する際には、ドライブを選択してキャプチャーを取得することができます。この64MBサイズの領域も一緒にStandard Imageを取得しようとしたところ、下記のようなエラーメッセージが出力されました。逆に言うと、Imageから新規にプロビジョニングを行うときには、再度order画面でUserMetaDataを入力して下さいということなのでしょう。

```text:StandardImage取得時にメタデータ領域を選択した時のエラーメッセージ
Invalid block device supplied. Please be sure to not include any metadata disk block devices.
```