はじめに
Linode (Akamai のクラウドコンピュートサービス)の仮想マシンはシンプルな構成と価格のパッケージで提供されており、選択したパッケージにはローカルディスクが含まれています。ローカルディスクは root
含む必要なファイルシステムが構成されています。固定のサイズのローカルストレージに対して、 ブロックストレージはサイズを決めて自由にインスタンスにアタッチし、追加のディレクトリとしてマウントできるストレージです。次のページも参照してください。
本記事はインスタンスをリブートすることなく、アタッチしたブロックストレージのサイズを増やす方法についての説明です。
ローカルディスクのサイズを変更するためには、インスタンスのパッケージ変更が伴います。つまり、CPU 数、メモリ数なども同時に変更することになります。一方、外付けとなるブロックストレージは、ストレージサイズの変更ができます。
ブロックストレージの変更は増加のみです。縮小はできません。
ブロックストレージはインスタンスの Backup 機能の対象ではありませんので、別途考慮が必要になります。
https://techdocs.akamai.com/cloud-computing/docs/backup-service
ブロックストレージを初期設定するフロー
ブロックストレージを利用可能にする初期設定は、一部省略していますが、大枠次のフローです。
詳細については、上記に紹介した記事を参照ください。
ブロックストレージをリサイズするフロー
利用中のブロックストレージのサイズ変更は、次のフローにになります。
OS 上の resize2fs
を実行する前に、インスタンスからブロック・ストレージをデタッチしないとリブートが必須になります。もし リブートが許容されるなら、デタッチする必要はありません。
ブロック・ストレージをリサイズする
ここからリサイズの手順を解説していきますが、リサイズに関するドキュメントも見ながら作業してください。
このドキュメントにはリブートするフローが書かれていますが、本記事はデタッチすることでリブートを回避する方法を解説します。
必須ではないですが、筆者はクローンをして、不測の事態に備えました。2 TB (95% 利用)のクローン時間は 2 分弱でした。
初期状態 (OS)
ブロック・ストレージを OS 内でマウントした状態です。/dev/sdc
として見えています。
> df
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 98044 964 97080 1% /run
/dev/sda 25202692 2707536 21194276 12% /
tmpfs 490208 0 490208 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 98040 4 98036 1% /run/user/0
/dev/sdc 2112657248 1903482696 101783988 95% /mnt/bs
# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 96M 992K 95M 2% /run
/dev/sda 25G 3.7G 20G 16% /
tmpfs 479M 0 479M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 96M 4.0K 96M 1% /run/user/0
/dev/sdc 2.0T 1.8T 98G 95% /mnt/bs
初期状態 (UI)
Cloud Manager の画面です。ブロック・ストレージは Volumes
のメニューとなっています。bs
とラベル化されたストレージをこれからリサイズしていきます。
OS 上でアンマウントする
最初に OS 上でアンマウントして、ディスクを切り離します。/mnt/bs
は 1.8 TB ほど利用されていたのですが、マウントポイントが外れたあとは、空となっています。
> umount /mnt/bs
> df /mnt/bs -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda 25G 3.7G 20G 16% /
> ls -l /mnt/bs
total 0
プロセスが対象ディレクトリ上のファイルを使用していた場合はロックされアンマウントできないため、確認の上該当プロセスを終了してください。
インスタンスからデタッチする
ブロックストレージをインスタンスからデタッチする作業は、API, CLI からもできますが、ここでは Cloud Manager の UI を使って説明します。
Volumes から bs
ラベルをデタッチします(割当済みのインスタンスからを切り離します)。
確認メッセージを注意深く読んで実行します。
デタッチが終了すると、ストレージがどのインスタンスにも紐づけされていない状態となります (Unattached)。
ブロック・ストレージをリサイズする
変更はすぐに完了します。数秒です。UI では Status が Resizing
にしばらくなりますが、画面をリロードすると Active
になります。Active になっていれば、通知が届きます。
通知イベントの例です。
インスタンスに再アタッチする
ハードウェアを仮想マシンから切り離し、ストレージサイズの変更したあと、再度仮想マシンに接続するようなイメージです。
ブロックストレージは一つのインスタンスにのみアタッチできます。
OS 上で e2fsck の実行
ファイルシステムのチェックを行います。デバイス名はマウントされていた場所となります。分からなければ、Show config
のリンクから確認してください。
> e2fsck -f /dev/disk/by-id/scsi-0Linode_Volume_bs
e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/disk/by-id/scsi-0Linode_Volume_bs: 1855822/134217728 files (0.0% non-contiguous), 484577274/536870912 blocks
OS 上で resize2fs の実行
> resize2fs /dev/disk/by-id/scsi-0Linode_Volume_bs
resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/disk/by-id/scsi-0Linode_Volume_bs to 671088640 (4k) blocks.
The filesystem on /dev/disk/by-id/scsi-0Linode_Volume_bs is now 671088640 (4k) blocks long.
OS 上で mount の実行
> mount "/dev/disk/by-id/scsi-0Linode_Volume_bs" "/mnt/bs"
> df /mnt/bs
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdc 2641097552 1903482696 603380748 76% /mnt/bs
> df -h /mnt/bs
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 2.5T 1.8T 576G 76% /mnt/bs
ディスク容量が増え、使用量が95% から76% になっています。Used のサイズは変わっていません。
これらの作業をしたときに記録された dmesg
のメッセージです。
[ 4689.689164] scsi 6:0:0:0: Direct-Access Linode Volume 2.5+ PQ: 0 ANSI: 5
[ 4689.691544] sd 6:0:0:0: Power-on or device reset occurred
[ 4689.691590] sd 6:0:0:0: Warning! Received an indication that the LUN assignments on this target have changed. The Linux SCSI layer does not automatical
[ 4689.691950] sd 6:0:0:0: [sdc] 5368709120 512-byte logical blocks: (2.75 TB/2.50 TiB)
[ 4689.691988] sd 6:0:0:0: [sdc] Write Protect is off
[ 4689.691992] sd 6:0:0:0: [sdc] Mode Sense: 63 00 00 08
[ 4689.692060] sd 6:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 4689.694148] sd 6:0:0:0: Attached scsi generic sg2 type 0
[ 4689.770195] sd 6:0:0:0: [sdc] Attached SCSI disk
[ 5341.532369] EXT4-fs (sdc): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
作業時間
2.5 TB から 3 TB にしたときの e2fsck
, resize2fs
の実行時間です。9.7 秒、 13.6 秒費やしています。
# time e2fsck -f /dev/disk/by-id/scsi-0Linode_Volume_bs
e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/disk/by-id/scsi-0Linode_Volume_bs: 1855822/167772160 files (0.0% non-contiguous), 486684926/671088640 blocks
real 0m9.774s
user 0m6.083s
sys 0m0.483s
# time resize2fs /dev/disk/by-id/scsi-0Linode_Volume_bs
resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/disk/by-id/scsi-0Linode_Volume_bs to 805306368 (4k) blocks.
The filesystem on /dev/disk/by-id/scsi-0Linode_Volume_bs is now 805306368 (4k) blocks long.
real 0m13.628s
user 0m8.248s
sys 0m0.288s
UI からディスクのリサイズは数秒で終わるので、ボリュームを外してリサイズして再アタッチするまでの作業は数分で終了すると思います。
まとめ
ブロックストレージはローカルストレージよりは遅いですが、他の大手クラウドサービスと比較すると高速です。ローカルストレージが速すぎるとも言えます。今後必要なストレージサイズが増加する可能性があるなら、リサイズが容易なブロック・ストレージの利用がおすすめです。
本記事執筆中に Linode の Doc が Akamai TechDoc に統合されました。TechDoc は Google Translate と統合されていますので、日本語でもドキュメントが読むことできます。