doridoridoriand’s diary

主に技術的なことを書いていく予定(たぶん)

CentOS7でXFSフォーマットされたルートボリュームを拡張する

会社で使用しているサーバーの1台でルートボリュームを拡張する必要が出てきたので、実施した。 CentOS7での拡張は経験がなかったので、忘備録としてブログに記載。

サーバーはAWS上に存在。今年の2月にEBSのサイズが自由に変更出来るようになった。 https://aws.amazon.com/jp/blogs/news/amazon-ebs-update-new-elastic-volumes-change-everything/

検証に利用していたサーバーのルートボリュームは20GBだったのだが、ログのサイズが予想よりも大幅に大きかったため、99%まで逼迫していた。

今回は私物のAWSアカウントにサーバーを立てて会社で行った操作を記録。 何も考えずにウィザードに則ってインスタンス立てたりすると8GBのルートボリュームになっちゃったりする。 以下のようにすぐに逼迫してしまう。

[centos@dorian ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvda1       8.0G  7.6G  499M   94% /
devtmpfs         477M     0  477M    0% /dev
tmpfs            496M     0  496M    0% /dev/shm
tmpfs            496M   13M  483M    3% /run
tmpfs            496M     0  496M    0% /sys/fs/cgroup
tmpfs            100M     0  100M    0% /run/user/0
tmpfs            100M     0  100M    0% /run/user/1000

これでは生きていけないので、EBSを変更する。 マネコンからは以下のように変更できる。

対象のインスタンスを選択し、ルートデバイスのところをクリック。

sc-1

するとブロックデバイスのポップアップが表示されるので、EBS IDの部分をクリックして、ボリュームのページに移動する。

sc-2

対象のボリュームが選択された状態になっているので、上部にあるアクションボタンからボリュームの変更を選択。

sc-3

sc-4

必要としているサイズに変更する。今回は100GBととしてみた。

sc-5

実行をするとボリュームの状態がin-use - modifyingとなり、サイズの変更が行われれていることがわかる。

sc-6

この作業には数分掛かるので、待つ。変更中でもボリュームはオンラインであるので、以下のように読み書きは可能(性能劣化はしていると思うけれども)

[centos@dorian ~]$ mkdir works
[centos@dorian ~]$ cd works/
[centos@dorian works]$ ll
合計 0
[centos@dorian works]$ touch file
[centos@dorian works]$ ll
合計 0
-rw-rw-r--. 1 centos centos 0  8月 19 08:40 file
[centos@dorian works]$

変更が完了すると、 in-use - completed(100%)と表示される。

sc-7

サーバーに戻ってパーティーション変更の作業を行う。 もちろん拡張したことは認識されていない。

[centos@dorian works]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvda1       8.0G  7.6G  499M   94% /
devtmpfs         477M     0  477M    0% /dev
tmpfs            496M     0  496M    0% /dev/shm
tmpfs            496M   13M  483M    3% /run
tmpfs            496M     0  496M    0% /sys/fs/cgroup
tmpfs            100M     0  100M    0% /run/user/0
tmpfs            100M     0  100M    0% /run/user/1000

ただしディスク自体が100GBになっていることは再起動なしで反映されていた。

[centos@dorian works]$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  100G  0 disk
└─xvda1 202:1    0    8G  0 part /

よってパーティーションの変更をすればおk まずはボリュームとパーティーションの現状確認をするため、 fdisk コマンドを利用して情報を引き出す。

[centos@dorian works]$ sudo fdisk -l /dev/xvda1

Disk /dev/xvda1: 8588 MB, 8588886016 bytes, 16775168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

[centos@dorian works]$ sudo fdisk -l /dev/xvda

Disk /dev/xvda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000b2270

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/xvda1   *        2048    16777215     8387584   83  Linux

次にfdiks使用して、現在のパーティーションの削除と再作成を行う。 この作業の途中でインスタンス障害などでリブートが掛かると多分二度と起動しなくなるので要注意。

[centos@dorian works]$ sudo fdisk /dev/xvda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): p

Disk /dev/xvda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000b2270

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/xvda1   *        2048    16777215     8387584   83  Linux

コマンド (m でヘルプ): d
Selected partition 1
Partition 1 is deleted

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-209715199, 初期値 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, 初期値 209715199): 209715199
Partition 1 of type Linux and of size 100 GiB is set

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。

WARNING: Re-reading the partition table failed with error 16: デバイスもしくはリソースがビジー状態です.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
ディスクを同期しています。

緊張の一瞬。最後にWARNING出るのが普通にビビる。OSがまだ古い情報保持したままだよってことなのでことなので問題ないはず。

一旦再起動。

[centos@dorian works]$ sudo shutdown -r now
packet_write_wait: Connection to 52.38.77.75 port 22: Broken pipe
/Users/dorian/AWS_keys ssh centos@example.com
Last login: Sat Aug 19 08:36:55 2017 from nttkyo888131.tkyo.nt.ngn.ppp.infoweb.ne.jp
[centos@ip-172-31-26-162 ~]$

無事に再起動した。ボリュームを確認してみる。

[centos@ip-172-31-26-162 ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvda1       100G  7.6G   93G    8% /
devtmpfs         477M     0  477M    0% /dev
tmpfs            496M     0  496M    0% /dev/shm
tmpfs            496M   13M  483M    3% /run
tmpfs            496M     0  496M    0% /sys/fs/cgroup
tmpfs            100M     0  100M    0% /run/user/1000

無事に増えている。元の8GBを超えて追加出来るか試してみる。

[centos@ip-172-31-26-162 ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvda1       100G   12G   88G   12% /
devtmpfs         477M     0  477M    0% /dev
tmpfs            496M     0  496M    0% /dev/shm
tmpfs            496M   13M  483M    3% /run
tmpfs            496M     0  496M    0% /sys/fs/cgroup
tmpfs            100M     0  100M    0% /run/user/1000

無事に出来た模様。

今回はサーバーに搭載しているアプリケーションの関係でルートボリュームを拡張したが、ログのボリュームを別途用意し、LVMを組むなどの工夫をするほうが本来取るべき作業内容だとは思う。

つか緊張するのでもうやりたくないですね(^ν^)