*

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

公開日: : 投稿者: GCE

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のストレージ運用と言うことも可能になると思われます。

この記事を書いた人

ayatoshi
ayatoshi
徳島県出身、吉積情報株式会社最高技術責任者
愛光高校、東京大学卒業後、アクセンチュアにて5年間システム開発を経験。
CP300のアジア初取得者。
Google基盤上でのシステム開発の普及を目標として日々活動中。

関連記事

2016年 GCE vs AWS:何故Amazonを絶対使ってはイケナイのか!

本文章は以下の記事の超訳(著者の許可を得て)に一部私のコメントを付加したものになります。 GC

記事を読む

【Disk I/O比較】Google Compute Engine vs Amazon EC2

みなさんこんにちわ。 世間でIaaSといえば、もっぱらAmazon AWS EC2とういうような状

記事を読む

Windowsファイルサーバをアジアと東京で比較してみた!

皆さん、Windowsファイルサーバ使ってますか?もうGoogleクラウドに行けます!GCEも東京に

記事を読む

Google Cloud SQL APIのサンプルプログラムを動かしてみた

今回は、去年の6月にリリースされたGoogle Cloud SQL APIについてご紹介します。

記事を読む

Windowsサーバ on Google Compute Engine

ついに、WindowsサーバがGCEでα公開されました。LocalSSDも使えるし、どのリージョンで

記事を読む

2016/07/26 GCE vs AWS vs Azure ベンチマーク

2016/07/26 GCE vs EC2 vs Azureベンチマーク 本シリ

記事を読む

2015/12/4 GCE vs AWS vs Azure ベンチマーク

2015/12/04 GCE vs EC2 vs Azureベンチマーク 本シリ

記事を読む

2015/10/16 GCE vs AWS ベンチマーク

2015/10/16 GCE vs AWS ベンチマーク 本シリーズでは定期的に

記事を読む

SendGridを使ってGCEからメールを確実に送る方法

Webサービスにはメール送信がつきもので、Google Compute Engine のインスタンス

記事を読む

GCP愛を語る

RGCP(GCP好き以外お断り) 技術的な話ばかりの中のAdventCalendarですが、本

記事を読む

PAGE TOP ↑