coreos-xhyveに外部ストレージをマウントして使いたい

xhyve-coreosを使うと簡単にcoreosが起動できますが，ちょっと使うとすぐにdiskfullになる&再起動すると全部消えてしまう，のでお試し程度にしか使えません．

なので，ディスクイメージを作成してそれをマウントすることで，容量を増やす&再起動しても消えない状態にしてみます．

# 準備
ディスクイメージを作成する

```bash
# ディスクイメージの作成
# サイズは適当に．ここでは16GB
dd if=/dev/zero of=extra.img bs=1g count=16

# 必要なものをインストール
brew install e2fsprogs
brew link --force e2fsprogs

# ext4のディスクイメージ作成
/usr/local/sbin/mkfs.ext4 extra.img
```
coreos-xhyveを起動パラメータを作成
起動するときに使うshellの中で`source`されてるだけ．

```bash:custom.conf
#XHYVE=xhyve
CHANNEL=beta
#VERSION=latest
MEMORY=2048
CPUS=2
# 設定しておくと，IPが固定になる
UUID=2EA0AF50-C413-4692-A971-18D78BA1D174
# 設定しておくと，authorized_keysに書きこんでくれる
SSHKEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKxvJAey2uu2EaV39RgriDWJVFH0TMVtL22nZqkyk5bd uraura"
# 設定しておくと，cloudinitが走るときに読みこまれる
CLOUD_CONFIG=https://gist.githubusercontent.com/mystelynx/dff73645183273e3f30d/raw/coreos-cloudinit.yml
# 設定しておくと，/dev/vdaとして読み込まれる
IMG_HDD="-s 4,virtio-blk,$(pwd)/extra.img"
```
cloudinit
https://gist.github.com/mystelynx/dff73645183273e3f30d

- 起動時には`/var/lib/docker`ディレクトリが存在しないので作成
- `/dev/vda`を`/var/lib/docker`にマウントする

# 実行
```bash
sudo ./coreos-xhyve-run -f custom.conf
```

# 確認
```shell-session
core@localhost ~ $ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=912768k,nr_inodes=228192,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime,seclabel)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
tmpfs on / type tmpfs (rw,relatime,seclabel)
/usr.squashfs (deleted) on /usr type squashfs (ro,relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
tmpfs on /tmp type tmpfs (rw,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
tmpfs on /media type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime,seclabel)
/dev/vda on /var/lib/docker type ext4 (rw,relatime,seclabel,data=ordered) # !!!マウントされてる!!!

core@localhost ~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        892M     0  892M   0% /dev
tmpfs          1003M     0 1003M   0% /dev/shm
tmpfs          1003M   17M  987M   2% /run
tmpfs          1003M     0 1003M   0% /sys/fs/cgroup
tmpfs          1003M  6.8M  997M   1% /
/dev/loop0      195M  195M     0 100% /usr
tmpfs          1003M     0 1003M   0% /tmp
tmpfs          1003M     0 1003M   0% /media
/dev/vda         16G   44M   15G   1% /var/lib/docker # !!!容量を確認!!!

core@localhost ~ $ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
d0ca40da9e35: Downloading 1.052 MB/51.35 MB
d0ca40da9e35: Pull complete
d1f66aef36c9: Pull complete
7d612e4006d3: Pull complete
b2d99375e3b7: Pull complete
392caeba413e: Pull complete
7bae2f5f3bfb: Pull complete
7ff2dbbe5c0d: Pull complete
b8445caa7808: Pull complete
0a8ac22d8fbc: Pull complete
e03b6279eedf: Pull complete
f50f1cc3eb5a: Pull complete
459f24dd1811: Pull complete
9cba95895768: Pull complete
9be83d1073fd: Pull complete
a4814a4a5204: Pull complete
fb86ef4dd8b7: Pull complete
Digest: sha256:43c3231883d1a3a69da1faf594a4c9b7455a9659e946fd677858e71c10d011bd
Status: Downloaded newer image for mysql:latest

core@localhost ~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        892M     0  892M   0% /dev
tmpfs          1003M     0 1003M   0% /dev/shm
tmpfs          1003M   17M  987M   2% /run
tmpfs          1003M     0 1003M   0% /sys/fs/cgroup
tmpfs          1003M  6.8M  997M   1% /
/dev/loop0      195M  195M     0 100% /usr
tmpfs          1003M     0 1003M   0% /media
tmpfs          1003M     0 1003M   0% /tmp
/dev/vda         16G  471M   15G   4% /var/lib/docker !!!マウントしたところが使われてる!!!
```

# 参考
https://coreos.com/os/docs/latest/mounting-storage.html#creating-and-mounting-a-btrfs-volume-file
https://github.com/coreos/coreos-xhyve/issues/14