AWS EBSのパーティション拡張でおなじみgrowpartをAWS以外で使ってみる

はじめまして
自宅でできる趣味が欲しくてウクレレを購入した栩野です。

技術ブログ初登場ですが
これからAWS関連の記事多めで投稿したいと思っているのでよろしくお願いします。

AWS EBSのパーティション拡張でおなじみgrowpartをAWS以外で使ってみる

早速題材についてですが
growpartコマンドはAWSでおなじみのEBSのパーティション拡張を行う時に使うコマンドで
AWSのドキュメントでもEBSのパーティション拡張方法として紹介されているコマンドになります。

このgrowpartコマンドはEBSのパーティション拡張で必ずと言っていいほど使いますが
AWS以外の環境では使ったことがありませんでした。
(fdiskコマンドで対話式にオプション入力してやってました)

ただgrowpartコマンドがyumでインストールするだけで簡単に使えるコマンドみたいだったので
今回はVMware上の仮想サーバのパーティション拡張をgrowpartコマンド使ってやってみました。

growpartを使ってみる

検証環境

  • VMware上の仮想サーバ
  • CentOS Linux release 7.6

まずはVMware側でディスク拡張

今回対象サーバにマウントしてる4GBの追加ディスクを8GBに拡張します。

VMwareのコントロールパネルから画面をぽちぽちしてディスクを4GBから8GBに変更し
サーバ側で4GBから8GBにディスクが拡張されていることをlsblkコマンドで確認

// 今回拡張対象のディスクはsdb
# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    8G  0 disk  // ディスクは8GBに拡張されている
└─sdb1            8:17   0    4G  0 part  // パーティションはまだ4GBのまま

従来使ってたfdiskでのパーティション拡張方法

growpartを使う前に、fdiskでの拡張が面倒なことを伝えるために
fdiskでの拡張方法も書いておきます。

// 今回対象のディスクはsdb
# fdisk /dev/sdb

// dコマンドで拡張前の状態であるパーティションを一度削除してしまう(削除なのでちょっとヒヤヒヤする)
コマンド (m でヘルプ): d

// 拡張後の容量でパーティションを新規作成していく
コマンド (m でヘルプ): n

// 今回は一つのパーティションに全容量使うのでdefaultのままEnterを入力して進めていく
Select (default p): Enter
パーティション番号 (1-4, default 1): Enter
最初 sector (2048-8388607, 初期値 2048): Enter
Last sector, +sectors or +size{K,M,G} (2048-8388607, 初期値 8388607): Enter

// 最後にwで変更内容を保存する
コマンド (m でヘルプ): w

パーティション拡張後にlsblkコマンドを叩いてパーティションも8GBに拡張されていることを確認します。

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    8G  0 disk 
└─sdb1            8:17   0    8G  0 part // パーティションも8GBに拡張されている

fdiskでの拡張だと、上記のように対話式でオプションを入力していく面倒な作業と
パーティション削除と再作成のところで操作を誤るとデータが消えてしまう危険性もあります。

growpartコマンドでのパーティション拡張方法

次はgrowpartコマンドでパーティションの拡張をやってみます。

まずはサーバにコマンドをインストールする必要があるので、yumでgrowpartコマンドをインストールします。

# yum install cloud-utils-growpart

これだけでインストール完了!
growpartコマンドでのパーティションの拡張を行なっていきます。

# growpart /dev/sdb 1
CHANGED: partition=1 start=2048 old: size=8386560 end=8388608 new: size=16775135 end=16777183

これでパーティション拡張完了!手軽。

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    8G  0 disk 
└─sdb1            8:17   0    8G  0 part // パーティションも8GBに拡張されている

しかもgrowpartはドライランのオプションも用意されているので
以下のように--dry-runをのオプションをつけてコマンドを実行することで、拡張前にエラーがないか確認することができて安心できます。

# growpart --dry-run /dev/sdb 1

あとはファイルシステムの拡張を実施

パーティション拡張後はファイルシステムの拡張を行ってディスク増設作業は完了になります。

# df -hT
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/sdb1               xfs        4.0G   33M  4.0G    1% /add_disk // まだ4GBのまま

// CentOS7系なのでxfs_growfsコマンドでファイルシステムを拡張
# xfs_growfs /dev/sdb1 
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=262080 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1048320, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1048320 to 2096891

# df -hT
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/sdb1               xfs        8.0G   33M  8.0G    1% /add_disk // ファイルシステムも8GBに拡張された

あとがき

AWS以外の環境でもyumでインストールするだけで手軽に使えるので
fdiskやpartedコマンドより、growpartの方が圧倒的使いやすくて便利だと感じました。

ちなみにgrowpartコマンドを使うとパーティションのスタイルがMBRとGPTどちらであっても
特に意識せず、うまい具合に拡張してくれます。

growpartコマンドの動きとしては、裏ではシェルスクリプトが実行されており
fdiskと同様に拡張時は一度パーティションを削除してから、パーティションの再作成が行われているみたいです。

次回以降はもう少しAWSよりな内容を投稿していこうと思います。

参考記事:ボリュームサイズ変更後の Linux ファイルシステムの拡張