たけまるの日記

たけまるの日記です。web関係の技術ネタが多いですが、好きなことを適当に書いています。

さくらクラウドでルートパーティションの容量を拡張する方法

追記:この手順を実施する場合の注意を記事中下部に追加しました。

あけましておめでとうございます。

訳あってさくらクラウドを使うことになりました。

250Gのディスクを選択してVMを作成したのだけど、さくらが用意したCentOSのイメージ「[public] 20GB CentOS 6.6 64bit (基本セット)」で起動したらOS上で20Gしか認識されていない…。

それもそのはずで、OSイメージは20Gを前提に作成されたものでした。

別途「100G」というのも用意されていたのですが、今回は250Gにしたかったのでなんとか拡張してみました。

(クリティカルな操作なので自己責任で、バックアップ必須!)

VM作成

  1. 普通にVM作成
    • ディスクソース : [アーカイブ(簡単)]
    • アーカイブ選択 : [public] 20GB CentOS 6.6 64bit (基本セット)
    • ディスクサイズ : [20G]
    • 作成後すぐに起動 : [しない]

追加ディスクの作成(本命ディスク)

  1. 管理画面 [ストレージ] -> [追加]押下
  2. 以下設定
    • ティスクソース : [ブランク]
    • ディスクサイズ : [250GB]
    • 名前 : 「testvm-250G」
  3. [作成]押下

拡張作業

  1. 管理画面 [サーバ] -> 該当VMを選択 -> [詳細] -> [ディスク] -> [接続]押下
  2. [testvm-250G]を選択して[更新]
  3. 接続#1に元の[testvm]、接続#2に[testvm-250G]が接続されているのを確認する
  4. VM起動
  5. 以下コマンド実行
### 起動ドライブはvda、追加したドライブがvdbとして認識されている
# ls /dev/vd*
/dev/vda  /dev/vda1  /dev/vda2  /dev/vdb

### 中身をコピー(3分半程度、速い…!)
# dd if=/dev/vda of=/dev/vdb bs=512M

### パーティションの拡張
# parted /dev/vdb
(parted) unit s
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 524288000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start     End        Size       File system     Name     Flags
 1      64s       8400487s   8400424s   linux-swap(v1)  primary
 2      8400488s  41943006s  33542519s  ext4            primary  boot

(parted) rm 2
(parted) mkpart primary 8400488s -1s

# ※途中パーティションを修復するか聞いてくるので、F(Fix)を選択する
# ※警告が出てきてもyes/Ignoreを選択して進む

(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 268GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name     Flags
 1      32.8kB  4301MB  4301MB  linux-swap(v1)  primary
 2      4301MB  268GB   264GB   ext4            primary
 
(parted) quit

# e2fsck -f /dev/vdb2
# resize2fs /dev/vdb2

一旦パーティションを削除して(!)、再度より大きいパーティションを作るというのがキモですね。こんな事して大丈夫なんですねえ。。

元ディスクをVMから外す、動作確認

  1. 該当VMをシャットダウン
  2. 管理画面 [サーバ] -> 該当VMを選択 -> [詳細] -> [ディスク] -> [接続]押下
  3. 元ディスク(接続#1)の▼を選択して[取外し]
  4. 該当VM起動
  5. 容量が増えてるか確認
  6. 必要なければ元のディスクは削除
[root@testvm ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2       243G  1.4G  229G   1% /
tmpfs           499M     0  499M   0% /dev/shm

参考

http://knowledge.sakura.ad.jp/tech/925/

http://ubuntuforums.org/showthread.php?t=1389429

一応参考サイトと違うのは、参考サイトはMBRパーティションが切られているのでfdiskで作業していましたが、CentOS6のイメージだとGPTでパーティションを切っていたため、partedで作業しました。

最初参考サイトを見て、もうちょっとマシな方法がないかと調べたのですが結局この方法となりました。 なんかもうちょっといい方法はないものでしょうかねえ。。

さくらクラウドについて思ったこと

  • さくらVPSと比べると割高
  • さくらVPSが優秀過ぎる
  • とはいえさくらVPSはスケールアップができないのでその点は安心感がある
  • さくらVPSとローカルネットワークが繋がれば最高だけど戦略上しなそう
  • 石狩第一内のVPSクラウド(グローバルIP)間の通信はほぼ理論値通り(100Mbps)出た

追記 2015.2.2

この手順ではデータ不整合となる可能性について指摘を受けました。

よく見ると参考サイトのさくらナレッジでも下部に追記がありました(^^;;;

以下引用

[※編集部追記:本手順の際、ファイルシステムをマウント中のまま dd するとコピー先で不整合が発生する可能性があるため、レスキューモードもしくはシングルユーザーモードで実行ください]

確かに起動中のパーティションをddでコピーする場合、作業中に他のプロセスがディスクを書き込む可能性があるため、データ整合性を保証できない可能性があります。私は検証環境として手軽に用意したかったので問題ないですが、ミッションクリティカルな用途の場合は正攻法で行ったほうがいいと思います。