IDCFクラウドのDebian Jessieにディスクを追加してDockerのディレクトリを移動する

　IDCFクラウドでDebian Jessieの仮想マシン上にDockerを動かしています。Dockerを使っているとすぐにディスク容量を消費します。IDCFクラウドの仮想マシンはデフォルトで15GBしかありません。[Ubuntu](http://qiita.com/masato/items/e967e531e75101796c30)の時の手順とほぼ同じですが、大きめのディスクを追加してDockerのディレクトリを移動しようと思います。

```bash
$ cat /etc/debian_version
8.2
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
```

　現在のファイルシステムとディスクの状態です。

```bash
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        15G   12G  2.7G  81% /
udev             10M     0   10M   0% /dev
tmpfs           1.6G  110M  1.5G   7% /run
tmpfs           4.0G  740K  4.0G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           4.0G     0  4.0G   0% /sys/fs/cgroup
```

## 管理画面から「ボリューム」をアタッチする

　IDCFクラウドの管理画面の左メニューから「ボリューム」を選択して「ボリューム作成」ボタンをクリックします。IDCFクラウドではディスクを「ボリューム」と呼びます。

<img width="496" alt="volume.png" src="https://qiita-image-store.s3.amazonaws.com/0/43745/c2505597-456f-807a-756f-b16401a7b0b0.png">

　ボリューム作成の画面で「ボリューム名」と「サイズ」、「ゾーン」を入力して「作成する」ボタンをクリックします。

<img width="496" alt="volume-create.png" src="https://qiita-image-store.s3.amazonaws.com/0/43745/3e2d19b6-cde2-488c-93b0-83bf7e80333b.png">

　ボリュームの一覧から作成したボリューム名をクリックします。ボリューム詳細画面の「アタッチ」メニューから仮想マシンを選択して「アタッチする」ボタンをクリックします。

<img width="496" alt="volume-attach.png" src="https://qiita-image-store.s3.amazonaws.com/0/43745/5ecffc16-aa82-e90c-5274-7f56f4ab398f.png">

　ボリュームのアタッチが完了したらOSをrebootします。

```bash
$ sudo reboot
```

## Debianにパーティションを作成

　仮想マシンがrebootしたら、IDCFクラウドの管理画面でアタッチした「ボリューム」がディスクとして追加されたことを確認します。

```bash
$ sudo fdisk -l
Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
```

### パーティションの作成

　fdiskコマンドで`/dev/sdb`にパーティションを作成します。デフォルトの設定で作成する場合は`n、p、Enterキー3回、 w`と入力します。

```bash
$ sudo fdisk /dev/sdb
```

　新しいパーティションが`/dev/sdb1`に作成されました。

```bash
$ sudo fdisk -l
...
Device     Boot Start       End   Sectors  Size Id Type
/dev/sdb1        2048 209715199 209713152  100G 83 Linux
```


### ファイルシステムの作成

　既存ファイルシステムの確認すると`/dev/sda1`はext4です。

```bash
$ df -T
Filesystem     Type     1K-blocks     Used Available Use% Mounted on
/dev/sda1      ext4      15348720 11734892   2811116  81% /
udev           devtmpfs     10240        0     10240   0% /dev
tmpfs          tmpfs      1638236     8672   1629564   1% /run
tmpfs          tmpfs      4095588        0   4095588   0% /dev/shm
tmpfs          tmpfs         5120        0      5120   0% /run/lock
tmpfs          tmpfs      4095588        0   4095588   0% /sys/fs/cgroup
```

　追加したディスクのパーティションにも同じext4でファイルシステムを作成します。
 
```bash
$ sudo mkfs.ext4 /dev/sdb1
```

### パーティションのマウント


　パーティションをマウントするディレクトリを`/media`の下に作成します。

```bash
$ sudo mkdir /media/data
```

　`/dev/sdb1`パーティションのUUIDを`blkid`コマンドで確認します。

```bash
$ sudo blkid /dev/sdb1
/dev/sdb1: UUID="af1e6cc8-6184-4642-9a0d-5ac917e1d9d3" TYPE="ext4" PARTUUID="07a7e924-01"
```

　確認したUUIDを`/etc/fstab`に追加しますが、編集前にバックアップをします。

```bash
$ sudo cp -ip /etc/fstab{,.`date +%Y%m%d`}
```

　`/etc/fstab`に`/media/data`へ`/dev/sdb1`パーティションをマウントする設定を追加します。

```
$ sudo vi /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
UUID=18de9747-f69a-4f98-a80a-3d4b77145eaa /               ext4    errors=remount-ro 0       1
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
UUID=af1e6cc8-6184-4642-9a0d-5ac917e1d9d3 /media/data ext4 defaults 0  2
```

　追加した行の4列目以降は以下のように設定しました。

* <options>: defaults
* <dump>: 0: dumpする
* <pass>: 2: fsckする


　`/etc/fstab`を再マウントします。`/dev/sdb1`パーティションが正常にマウントしました。

```bash
$ sudo mount -a
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        15G   12G  2.7G  81% /
udev             10M     0   10M   0% /dev
tmpfs           1.6G  8.5M  1.6G   1% /run
tmpfs           4.0G     0  4.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           4.0G     0  4.0G   0% /sys/fs/cgroup
/dev/sdb1        99G   60M   94G   1% /media/data
```

## Dockerのディレクトリ移動

　新しく追加したパーティションのファイルシステムにDockerのディレクトリを移動していきます。まずDockerサービスを停止します。

```bash
$ sudo systemctl stop docker
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled)
   Active: inactive (dead) since 木 2015-12-31 06:29:44 JST; 14s ago
     Docs: https://docs.docker.com
  Process: 521 ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS (code=exited, status=0/SUCCESS)
 Main PID: 521 (code=exited, status=0/SUCCESS)
```

　`rsync`でファイルシステムのパーミッションを保持したまま、`/media/data/docker`ディレクトリにコピーします。

```bash
$ sudo mkdir /media/data/docker
$ sudo rsync -aXS /var/lib/docker/. /media/data/docker/
```

　コピー元のディレクトリとコピー先のディレクトリのサイズを比較して一致しているか確認します。

```bash
$ sudo du -sch /var/lib/docker/*
9.6G	/var/lib/docker/aufs
6.8M	/var/lib/docker/containers
11M	/var/lib/docker/graph
8.0K	/var/lib/docker/linkgraph.db
72K	/var/lib/docker/network
4.0K	/var/lib/docker/repositories-aufs
4.0K	/var/lib/docker/tmp
4.0K	/var/lib/docker/trust
447M	/var/lib/docker/volumes
11G	total
$ sudo du -sch /media/data/docker/*
9.9G	/media/data/docker/aufs
6.8M	/media/data/docker/containers
11M	/media/data/docker/graph
8.0K	/media/data/docker/linkgraph.db
68K	/media/data/docker/network
4.0K	/media/data/docker/repositories-aufs
4.0K	/media/data/docker/tmp
4.0K	/media/data/docker/trust
443M	/media/data/docker/volumes
11G	total
```

　オリジナルの`/var/lib/docker`はバックアップして、ディレクトリを作り直します。

```bash
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo mkdir /var/lib/docker
```

　`/media/data/docker`ディレクトリを`/var/lib/docker` にマウントします。ディレクトリのサイズも同じです。

```bash
$ sudo mount -o bind /media/data/docker /var/lib/docker
$ sudo du -sch /var/lib/docker/*
9.9G	/var/lib/docker/aufs
6.8M	/var/lib/docker/containers
11M	/var/lib/docker/graph
8.0K	/var/lib/docker/linkgraph.db
68K	/var/lib/docker/network
4.0K	/var/lib/docker/repositories-aufs
4.0K	/var/lib/docker/tmp
4.0K	/var/lib/docker/trust
443M	/var/lib/docker/volumes
11G	total
```

　dfでディレクトリのマウントを確認します。

```bash
$ df -ha
Filesystem       Size  Used Avail Use% Mounted on
...
/dev/sdb1        99G   11G   83G  12% /media/data
/dev/sdb1        99G   11G   83G  12% /var/lib/docker
```

　`/etc/fstab`にOSのreboot後もディレクトリがマウントするように追加して再度マウントします。

```bash
$ sudo vi /etc/fstab
/media/data/docker /var/lib/docker  none bind 0 0
$ sudo mount -a
```

　Dockerを起動します。

```bash
$ sudo systemctl start docker
sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled)
   Active: active (running) since 木 2015-12-31 06:44:08 JST; 5s ago
     Docs: https://docs.docker.com
 Main PID: 1060 (docker)
   CGroup: /system.slice/docker.service
           └─1060 /usr/bin/docker daemon -H fd:// --cluster-store=consul://lo...
```

　`docker ps`でDockerの起動を確認します。停止しているコンテナはstartします。Dockerのディレクトリの移動が終了したのでバックアップを削除しておきます。

```bash
$ sudo rm -r /var/lib/docker.bak/
```