ブログを動かしているVPSのディレクトリ整理をしました。実は使ってないディスク領域があったので、これを使うようにしました。
そういえば、このブログのVPSは200GBプランなんですが、今までrootボリュームしか使っていなかったと。それで足りてたし。さすがに手狭になってきたので、ディスク整理して、elasticsearchとdockerのデータディレクトリを移動しました。
作業前はこんな感じ。77%になって、newrelicがWARNINGを言ってきた。
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_vx-lv_root 18G 13G 3.8G 77% / tmpfs 939M 0 939M 0% /dev/shm /dev/vda1 477M 124M 329M 28% /boot
これはVPSのデフォルト設定のままで、LVMにはなっていますが、varもhomeも分かれていません。LVMの中はSWAPとこのrootボリュームだけです。じゃあ200GBの拡張領域はどこにあるかと言いますと、vdbにあります。
% cat /proc/partitions ... 252 16 188743680 vdb ...
これです。ここにパーティションを切って使います。
まずはfdiskでパーティションを切ります。開始を2048にするのは一種のおまじないです。嘘です。vdaのパーティションテーブルを見ると開始が2048になっており、もしやパーティションフラグメントを踏むかな、と思い踏襲しています。これは自宅サーバーでも散々ハマったポイントですので。
# fdisk /dev/vdb コマンド (m でヘルプ): u セクタ数 の表示/項目ユニットを変更します コマンド (m でヘルプ): p ディスク /dev/vdb: 193.3 GB, 193273528320 バイト ヘッド 16, セクタ 63, シリンダ 374491, 合計 377487360 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x5d03e176 デバイス ブート 始点 終点 ブロック Id システム /dev/vdb1 2048 377487359 188742656 8e Linux LVM コマンド (m でヘルプ):
結果だけですが、こんな感じにします。
そのまま使っても良いのですが、あとでいろいろ分けたくなるかな、とも思い、LVMでVGを作成します。とりあえず64GB割り当て。
# pvcreate /dev/vdb1 # vgcreate vg_disk1 /dev/vdb1 # lvcreate -L 64G -n lv_disk1 vg_disk1 # lvdisplay --- Logical volume --- LV Path /dev/vg_disk1/lv_disk1 LV Name lv_disk1 VG Name vg_disk1 LV UUID PTPPgE-qLEI-vE8p-Un2u-UvRY-uJFV-D2Icl1 LV Write Access read/write LV Creation host, time XXXXXXXXX.myvps.jp, 2015-07-04 21:10:28 +0900 LV Status available # open 0 LV Size 64.00 GiB Current LE 16384 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
これで64GBのLVができました。
あとはファイルシステムを作ってマウントすれば使えます。inode ratioは、ちょっと考えて64kにしました。おそらく足りなくなることは無いはず、と。ext4はジャーナリングFSなので、定期チェックは無効にします。これは起動時間の安定化(高速化)にもなります。
# mkfs.ext4 -i 65536 -j -m 0 /dev/mapper/vg_disk1-lv_disk1 # tune2fs -i 0 -c 0 /dev/mapper/vg_disk1-lv_disk1
これでマウントできる準備はできました。fstabはUUIDで指定して、/disk1にマウントしておきます。
まずはelasticsearchのデータ移動から。データの移動は、bindマウントで見た目を変えずに実施します。bindマウントとは、既存フォルダツリーに別ツリーをマウントする方法で、こうすることで、プログラムや設定の変更無しに別ボリュームにデータを配置したりすることがあります。メリットは、見た目の変更が無いこと、デメリットはぱっと見で容量が分かりづらいこと。実はあまり受けが良くないこともあるんですが、個人的には好んで使っています。
elasticsearchのデータ領域は/var/lib/elasticsearchです。これをそのままコピーして移動します。ディレクトリのパーミッション等が狂わないよう注意です。elasticsearchのサービスを停止した状態で、移動してマウントしなおします。
# ls -ld /var/lib/elasticsearch drwxr-xr-x 3 elasticsearch elasticsearch 4096 11月 17 17:09 2014 /var/lib/elasticsearch # mkdir -p /disk1/var/lib/ # rsync -av /var/lib/elasticsearch /disk1/var/lib # cd /var/lib/ # mv elasticsearch/ elasticsearch.orig # chmod -x elasticsearch.orig/ # mkdir elasticsearch # chown elasticsearch:elasticsearch elasticsearch # ls -ld elasticsearch* drwxr-xr-x 2 elasticsearch elasticsearch 4096 7月 4 21:21 2015 elasticsearch drw-r--r-- 3 elasticsearch elasticsearch 4096 11月 17 17:09 2014 elasticsearch.orig # echo "/disk1/var/lib/elasticsearch /var/lib/elasticsearch none bind 0 0" >> /etc/fstab # mount /var/lib/elasticsearch # df -a ... /disk1/var/lib/elasticsearch 66711292 1098044 65613248 2% /var/lib/elasticsearch ...
これでOK。elasticsearchは新しいディレクトリで元気に動き出しました。
続いてdockerです。同じ手順で行こうと思いましたが、rsyncで失敗しました。
# rsync -av /var/lib/docker /disk1/var/lib docker/devicemapper/devicemapper/data rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32) rsync: write failed on "/disk1/var/lib/docker/devicemapper/devicemapper/data": No space left on device (28) rsync error: error in file IO (code 11) at receiver.c(301) [receiver=3.0.6] rsync: connection unexpectedly closed (218 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]
どうにも、このdataファイルのコピーでサイズを間違える?ようで、ファイルシステムフルまでデータを書き続けてしまいます。どうしたものかとググったら、同じように移動している例があったので、これを参考にrsyncのオプションを調整したらうまくいきました。どうにもこのファイル、普通のファイルでは無いようです。また、カーネルも掴んでいる可能性があったので、最終的にはsingle userで実施しました。
# rsync --progress -aXS /var/lib/docker /disk1/var/lib
これでdockerも移動完了。無事動き出しました。
念のため、元ディレクトリのファイルが移動後更新されていないことをfindで確認しておきます。何も更新されていなければ問題ありません。
# find /var/lib/elasticsearch.orig -mmin -10 # find /var/lib/docker.orig -mmin -10
結果、ディスクがすっきりしました。
# df -ah Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_vx-lv_root 18G 2.9G 14G 18% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys devpts 0 0 0 - /dev/pts tmpfs 939M 0 939M 0% /dev/shm /dev/vda1 477M 124M 329M 28% /boot /dev/mapper/vg_disk1-lv_disk1 64G 19G 45G 30% /disk1 /disk1/var/lib/elasticsearch 64G 19G 45G 30% /var/lib/elasticsearch /disk1/var/lib/docker 64G 19G 45G 30% /var/lib/docker none 0 0 0 - /proc/sys/fs/binfmt_misc
次はWordpressの自動バックアップとか仕込みたいと思います。
コメント