さくらのクラウドでインスタンスを立ててLXDを使った検証をしていて、とりあえずディスクを20GBにして使っていたら気がついたらディスクの空きがなくなってしまい、検証をある程度進めていてインスタンス作り直して手動で構築しなおすのも面倒だったのでディスク拡張をやってみました。
OSはUbuntu16.04で、ファイルシステムはext4です。
問題発覚
$ df -h Filesystem Size Used Avail Use% Mounted on udev 983M 0 983M 0% /dev tmpfs 201M 8.4M 192M 5% /run /dev/vda3 16G 16G 0 100% / tmpfs 1001M 0 1001M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
/dev/vda3
が空きがないのが見てわかります。LXD用のzfsイメージのサイズを大きく割当すぎたのが原因でした。
この時最悪だったのが、適当にコマンドを打つとそのコマンドが刺さって応答がなくなってしまうようになったことでした…。
ディスク拡張作業
インスタンスをシャットダウン
シャットダウンしないと操作できないので一旦シャットダウンします。
容量を大きくした新しいディスクを作成する
ディスク一覧より、新しいディスクを作成します。
この時、空のディスクを作るのではなく、ディスクのソースに20GBの元のディスクを指定します。 こうすることで元のディスクの内容が新しいディスクにクローンされます。
ステータスが完了になるまで(コピーが完了するまで)待ちましょう。
元のディスクをインスタンスから取り外す
停止させたサーバから元のディスクを取り外します。
新しいディスクをインスタンスに接続する
停止させたサーバに新しいディスクを接続します。
サーバ上で認識されるディスクサイズを拡張する
新しいディスクが接続できたら、サーバを起動します。
この状態ではまだファイルシステム上はディスクは拡張されていませんし、 df -h
してもリサイズ後のサイズで認識されていません。
$ df -h Filesystem Size Used Avail Use% Mounted on udev 983M 0 983M 0% /dev tmpfs 201M 11M 190M 6% /run /dev/vda3 16G 16G 0 100% / tmpfs 1001M 0 1001M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
parted -l
コマンドでパーティションを確認しますが、この時に拡張済のディスクのサイズとGPT上のディスクのサイズが違う事をpartedが検知してくれるので、ここで修正を行います。
$ sudo parted -l Warning: Not all of the space available to /dev/vda appears to be used, you can fix the GPT to use all of the space (an extra 41943040 blocks) or continue with the current setting? Fix/Ignore? Fix Model: Virtio Block Device (virtblk) Disk /dev/vda: 42.9GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 4297MB 4295MB linux-swap(v1) 3 4297MB 21.5GB 17.2GB ext4
修正ができたら、 /dev/vda
(接続したディスクの名前) のパーティションサイズを変更します。
$ sudo parted /dev/vda GNU Parted 3.2 Using /dev/vda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) p Model: Virtio Block Device (virtblk) Disk /dev/vda: 42.9GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 4297MB 4295MB linux-swap(v1) 3 4297MB 21.5GB 17.2GB ext4 (parted) resizepart 3 Warning: Partition /dev/vda3 is being used. Are you sure you want to continue? Yes/No? Yes End? [21.5GB]? 42.9GB (parted) p Model: Virtio Block Device (virtblk) Disk /dev/vda: 42.9GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 4297MB 4295MB linux-swap(v1) 3 4297MB 42.9GB 38.6GB ext4 (parted) Information: You may need to update /etc/fstab.
パーティションの拡張ができました。
次はファイルシステムの拡張です。 resize2fs
コマンドがよしなにやってくれます。
$ sudo resize2fs /dev/vda3 resize2fs 1.42.13 (17-May-2015) Filesystem at /dev/vda3 is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 3 The filesystem on /dev/vda3 is now 9424544 (4k) blocks long.
確認
最後に確認をします。
$ df -h Filesystem Size Used Avail Use% Mounted on udev 983M 0 983M 0% /dev tmpfs 201M 14M 187M 7% /run /dev/vda3 36G 16G 19G 47% / tmpfs 1001M 0 1001M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
拡張できたようです。めでたしめでたし。
追記 (2016/12/09)
前佛さんに自動ディスク容量拡張機能について教えて頂きました!
@kuro_m88 こんにちは、記事を拝見しました! アーカイブ作成時に「@size-extendable」というタグを付けておけば、自動でディスク容量を拡張できます。よろしければ次回からお使い下さい。詳しくはこちらの記事もどうぞ>https://t.co/fNoaJSuBED
— 前佛雅人@さくらインターネット (@zembutsu_works) 2016年12月9日
さくらのクラウドに実装されている「ディスクの修正」機能に対応したパブリックアーカイブのOS
から起動した場合にこの機能が使えるようです。
この機能があればサーバ上での作業が減って楽できますね!