GCEではなんと、ディスクを割り当てしたまま拡張することが可能です。
通常良くあるクラウド等では一度スナップショットを取り、そこから拡張した別ディスクとして割り当てて切り替える、と言うような手順を踏むのが一般的でしたし、GCEでも以前はそうでした。
gcloud compute disks resize
が追加されたのです。いつからかはちょっと不明ですが。誰か教えてください。
さて、実際の手順ですが。当記事ではDebianで紹介したいと思います。Windows以外ではほぼ同様の手順で可能と思われます。
- インスタンスの立ち上げ
- gcloudコマンドの認証
- gcloudコマンドでディスクを拡張
- 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のストレージ運用と言うことも可能になると思われます。