GCEディスクのオンライン拡張を試してみた

ご注意

この記事は 2016年5月6日 に書かれたものです。内容が古い可能性がありますのでご注意ください。

GCEではなんと、ディスクを割り当てしたまま拡張することが可能です。

通常良くあるクラウド等では一度スナップショットを取り、そこから拡張した別ディスクとして割り当てて切り替える、と言うような手順を踏むのが一般的でしたし、GCEでも以前はそうでした。

gcloud compute disks resize

が追加されたのです。いつからかはちょっと不明ですが。誰か教えてください。

さて、実際の手順ですが。当記事ではDebianで紹介したいと思います。Windows以外ではほぼ同様の手順で可能と思われます。

  1. インスタンスの立ち上げ
  2. gcloudコマンドの認証
  3. gcloudコマンドでディスクを拡張
  4. OS側での拡張ディスクの認識作業

です。慣れれば2分で出来ます。

1,2については通常良くありますし、3のコマンドが発行出来るならCloud Shellからでも問題ありませんので、省略します。

gcloudコマンドが実行出来て、GCEのインスタンスのroot権限になれるユーザでログインする、と言う所から説明します。本手順では、

  • ユーザ:ayatoshi
  • プロジェクト:cloud-ace-demo
  • インスタンス:disk-extend-demo
  • OS:Debian8

という環境における例になります。

まずは、自分のディスクの確認をしましょう。

gcloud compute disks list

コマンドでディスクの一覧が確認出来ます。デフォルトだと自分のインスタンス名ですね。

ayatoshi@disk-extend-demo:~$ gcloud compute disks list NAME ZONE SIZE_GB TYPE STATUS disk-extend-demo asia-east1-a 10 pd-ssd READY

確実に見分けたければ、gcloud compute instances describe コマンドで見てみるとより確実にdisksのデバイス名の所に明示されていますのでそちらで確認出来ます。

ayatoshi@disk-extend-demo:~$ gcloud compute instances describe disk-extend-demo canIpForward: false cpuPlatform: Intel Ivy Bridge creationTimestamp: ‘2016-05-03T21:42:02.057-07:00’ description: ” disks: – autoDelete: true boot: true deviceName: disk-extend-demo ・・・・・以下省略

さて、上記のdisksコマンドでも確認出来たように、現状10Gですね。

OS上からもdfコマンドで確認してみましょう。

以下の通り、/に9.8Gとして認識されています。デフォルトの10Gですが、OSから認識されているのは少し減ってしまってるという状態が確認出来ると思います。

ayatoshi@disk-extend-demo:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 9.8G 818M 8.5G 9% / udev 10M 0 10M 0% /dev tmpfs 743M 8.3M 735M 2% /run tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

さて、いよいよこの10Gのディスクを取り敢えず15Gに拡張してみましょう。コマンド例は以下です。

gcloud compute disks resize disk-extend-demo –size 15GB

最後に-qを追加すると警告で止まらずバッチ処理でも実行出来ます。

実行例は以下のようになります。

ayatoshi@disk-extend-demo:~$ gcloud compute disks resize disk-extend-demo –size 15GB This command increases disk size. This change is not reversible. For more information, see: https://cloud.google.com/sdk/gcloud/reference/compute/disks/resize Do you want to continue (Y/n)? Y Updated [https://www.googleapis.com/compute/v1/projects/cloud-ace-demo/zones/asia-east1-a/disks/disk-extend-demo]. — creationTimestamp: ‘2016-05-03T21:42:02.272-07:00’ id: ‘8275558643395773301’ kind: compute#disk lastAttachTimestamp: ‘2016-05-03T21:42:02.356-07:00′ name: disk-extend-demo selfLink: https://www.googleapis.com/compute/v1/projects/cloud-ace-demo/zones/asia-east1-a/disks/disk-extend-demo sizeGb: ’15’ sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-8-jessie-v20160418 sourceImageId: ‘441369627834701418’ status: READY type: https://www.googleapis.com/compute/v1/projects/cloud-ace-demo/zones/asia-east1-a/diskTypes/pd-ssd users: – https://www.googleapis.com/compute/v1/projects/cloud-ace-demo/zones/asia-east1-a/instances/disk-extend-demo zone: https://www.googleapis.com/compute/v1/projects/cloud-ace-demo/zones/asia-east1-a

この程度だと数秒で終わります。
disks list で確認してみましょう。

ayatoshi@disk-extend-demo:~$ gcloud compute disks list NAME ZONE SIZE_GB TYPE STATUS disk-extend-demo asia-east1-a 15 pd-ssd READY

はい、ちゃんと15GBに変更されてます。

ではOS側からはどう見えているのか。

fdisk でもpartedでも良いですが、partedの方がバッチ実行に向いてますので、ここではpartedでの方法を解説しますが、同じことはfdiskでも出来ると思います。

sudo parted -l でディスクの内容を確認します。

ayatoshi@disk-extend-demo:~$ sudo parted -l Model: Google PersistentDisk (scsi) Disk /dev/sda: 16.1GB Sector size (logical/physical): 512B/4096B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 2097kB 10.7GB 10.7GB primary ext4 boot

はい、16.1GBと認識されてます。これままぁ若干の誤差ですね。

ですが、パーティションとしては10.7GBなのでOSからはこれだけしか認識されてない状態です。

ではこれも拡張してしまいましょう。

コマンドは簡単です。

sudo parted —pretend-input-tty /dev/sda resizepart 1 yes 100%

pretend-input-ttyはmanでは出てこないのですが、警告を無視してくれるものです。/dev/sdaの部分はもし追加ディスク等の場合はsdb等になるでしょう。デフォルトのディスクしか利用してない場合は上記コマンドのままでOKです。20GBでも100GBでも100%まで拡張するというコマンドなので。

ayatoshi@disk-extend-demo:~$ sudo parted —pretend-input-tty /dev/sda resizepart 1 yes 100% Warning: Partition /dev/sda1 is being used. Are you sure you want to continue? Information: You may need to update /etc/fstab.

はい、またpartedコマンドで確認してみましょう。

ayatoshi@disk-extend-demo:~$ sudo parted -l Model: Google PersistentDisk (scsi) Disk /dev/sda: 16.1GB Sector size (logical/physical): 512B/4096B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 2097kB 16.1GB 16.1GB primary ext4 boot

パーティションテーブルが無事16.1GB等になっていればOKです。このあと再起動すればそれはそれで拡張ディスクとして認識してくれますが、せっかくなのでオンラインで認識したい、でも公式のドキュメントには再起動ししろと書いてある、、、と言うことで色々試してみた結果やり方を発見しました。

ファイルシステムとして認識してもらうためにresize2fsを行うのですが、ここがミソです。

resize2fsの対象として、/dev/disk/by-id/google-[Disk Name]-part1 を指定してください。

本環境の場合だと、以下のようになります。

sudo resize2fs /dev/disk/by-id/google-disk-extend-demo-part1

以下、実行例です。

ayatoshi@disk-extend-demo:~$ sudo resize2fs /dev/disk/by-id/google-disk-extend-demo-part1 resize2fs 1.42.12 (29-Aug-2014) Filesystem at /dev/disk/by-id/google-disk-extend-demo-part1 is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/disk/by-id/google-disk-extend-demo-part1 is now 3931648 (4k) blocks long. ayatoshi@disk-extend-demo:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 819M 14G 6% / udev 10M 0 10M 0% /dev tmpfs 743M 8.3M 735M 2% /run tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

df -h の結果でも15GBに反映されており、OSから無事拡張領域を認識されていることが確認出来ると思います。

究極的にはgcloudコマンドでのディスクの拡張、partedでのパーティションの拡張、resize2fsによるファイルシステムの拡張、の3コマンドで終了します。

ディスクの領域監視と組み合わせることで自動拡張による最大64TBのストレージ運用と言うことも可能になると思われます。

Google のクラウドサービスについてもっと詳しく知りたい、直接話が聞いてみたいという方のために、クラウドエースでは無料相談会を実施しております。お申し込みは下記ボタンより承っておりますので、この機会にぜひ弊社をご利用いただければと思います。

無料相談会のお申込みはこちら