投稿日:
更新日:

【Oracle VirtualBox】マウントした VM ストレージを拡張する

Authors

目次

はじめに

開発の中で Linux 環境での検証が必要になったので、macOS に VirtualBox をインストールし、Ubuntu を仮想マシンとして立てて利用していました。 ところが Docker を多用していたところ、Docker イメージが思いの他ストレージを占領するため、あっという間にオーバーフローしました。 ちょっと酷使し過ぎたかな 🤔 ということでそれまで 20 GB の仮想 HDD をアタッチしていましたが、これを機に一気に 64 GB までストレージを拡張していきたいと思います。

今回は調べた内容を元に、Ubuntu 仮想マシンのストレージ拡張方法について書き残しておきたいと思います。

環境

以下のような環境で仮想マシンを利用しています。 20 GB という少ない容量の中で作業をしていると一瞬で、オーバーフローします。(初めから余裕をもって確保しておけばよかったと後悔 😔)

ということで 64 GB にストレージを拡張していきます。

  • 【HostOS】
    • OS:macOS Catalina Version 10.15.6
    • CPU:4 コア 2.30GHz Intel(R) Core i7-1068NG7 64bit
    • RAM:32 GB
    • ディスク容量:Macintosh HD 500 GB
  • 【GuestOS (VM)】
    • OS:Ubuntu 20.04.4 LTS (Focal Fossa)
    • CPU:4 コア 2.30GHz Intel(R) Core i7-1068NG7 64bit
    • RAM:8 GB
    • ディスク容量:Ubuntu 20.04.vdi 『20 GB』⬅︎ こいつを 64 GB に拡張したい

手順の確認

記憶域やパーティションを触る場合、一つ手順をミスるとすべてのデータが吹っ飛ぶ可能性があるので、手順を確認しながら慎重に作業を進めます。 また、作業を始める前に必ずスナップショットを作成しておき、万が一ミスってもロールバックできるようにしておきます。

【手順】

  1. スナップショットの作成
  2. 仮想 HDD の作成
  3. データの移行
  4. ストレージの確認
  5. パーティションの拡張
  6. 後処理:物理ストレージの解放

1. スナップショットの作成

  • VirtualBox を立ち上げてバックアップを作成する仮想マシンを選択し、スナップショットの画面へ移動 screenshot01.png

  • 『作成』からスナップショットの作成を行う screenshot02.png スナップショット名は自分が判断できればなんでも良いと思います。

自分の場合はいつ作成したバックアップかを一眼で判断できるように -年-月-日-時:分 のような命名規則に従ってスナップショット名を設定しました。

  • スナップショットが作成されたことを確認 screenshot03.png

2. 仮想 HDD の作成

今回は新たに 64 GB の仮想 HDD を作成し、既存の 20 GB 仮想 HDD データを移行するやり方で作業を進めます。

  • 64 GB 仮想 HDD の作成 『ストレージ』→『コントローラー: SATA』→『右側の+』を選択 screenshot04.png

  • 『作成(C)』から仮想 HDD を新規作成 screenshot05.png

  • 特に拘りがなければ VDI(VirtualBox Disk Image)タイプを選択 screenshot06.png

  • サイズを選択 screenshot07.png

【それぞれの特徴 (今回は『固定サイズ』を使用)】

  • 可変サイズ
    • 読み書き速度は固定サイズに比べて遅い
    • 物理 HDD サイズを上限として、データの使用量に応じて HDD サイズを拡張可能
  • 固定サイズ
    • データの読み書きが高速
    • ストレージサイズは固定長
  • 仮想 HDD のサイズを指定 screenshot08.png
    • 注意:既存のディスクサイズよりも大きい容量を確保すること!
    • 今回は 64 GB の仮想 HDD を作成しましたが、ここで設定する記憶域はリアルに PC(Macintosh HD)の物理ストレージを食うので、ストレージ使用量を見ながら設定する必要があります。
  • 作成された仮想 HDD を確認 screenshot09.png

3. データの移行

  • 作成した 64 GB 仮想 HDD を Ubuntu にアタッチ screenshot10.png これで 1 つの仮想マシンに 2 つの仮想 HDD がアタッチされたことになりますが、このままでは起動できないので、ローカル PC 上で、データのクローン作業を行い、不要になった既存の仮想 HDD をデタッチします。

  • 仮想 HDD データをクローン

    クローン作業はホスト PC のターミナル上で行います。

  • 先ほど作成した VDI のあるディレクトリへ移動して作業を進める

    デフォルトでは $ /User/[ユーザ名]/VirtualBox\ VMs/[仮想マシン]/***.vdi に作成されます。


### 移動
$ cd /Users/ren/VirtualBox\ VMs/Ubuntu\ 20.04

### 2つの仮想HDDが存在していることを確認
$ ls -a
.
..
Logs
Snapshots
Ubuntu 20.04.vbox
Ubuntu 20.04.vbox-prev
Ubuntu 20.04.vdi
Ubuntu 20.04_1.vdi

### 既存の20 GB 仮想HDD(Ubuntu 20.04.vdi)を64 GB 仮想HDD(Ubuntu 20.04_1.vdi)にクローン
$ VBoxManage clonehd --existing "Ubuntu 20.04.vdi" "Ubuntu 20.04_1.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'VDI'. UUID: 4cc3e925-****-4d78-****-5abfe3e36cf8

これで既存の仮想 HDD に格納されたデータは、新たに作成した 64 GB 仮想 HDD にコピーされました。

  • 不要になった仮想 HDD をデタッチ

    右下の × ボタンから削除できる screenshot11.png

4. ストレージの確認

  • 仮想マシンを立ち上げて、現在の状況を確認
### ディスク使用量を表示
$ df -h

screenshot12.png

### パーティション情報を表示
$ sudo fdisk -l

※ 出力結果が多いので抜粋 screenshot13.png

  • ディスク使用量アナライザで確認 screenshot14.png

現段階では 64 GB 仮想 HDD をマウントできているものの、前半 20 GB のみしか使用できていません。 このままでは 64 GB の仮想 HDD をマウントした意味がないので、続いての作業でパーティション領域を広げる必要があります。

5. パーティションの拡張

  • /dev/sda1 を再作成
$ sudo fdisk /dev/sda

fdisk (util-linux 2.34) へようこそ.
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます.
書き込みコマンドを使用する際は、注意して実行してください.

####################################
### ここで操作するパーティション状態を確認 ###
####################################
コマンド (m でヘルプ): p
ディスク /dev/sda: 64 GiB、68719476736 バイト、134217728 セクタ
Disk model: VBOX HARDDISK
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512バイト / 512バイト
I/Oサイズ (最小 / 推奨): 512バイト / 512バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xae83c32c

デバイス    起動 開始位置  最後から   サイズ  Id  タイプ
/dev/sda1  *      2048  41940991   20G  83  Linux

##############################
### ここでパーティションを一旦削除 ###
##############################
コマンド (m でヘルプ): d   
パーティション 1 を選択
パーティション 1 を削除しました.

#############################
### ここでパーティションを再作成 ###
#############################
コマンド (m でヘルプ): n
パーティションタイプ
  p   基本パーティション (0 プライマリ、0 拡張、4 空き)
  e  拡張領域 (論理パーティションが入ります)
選択 (規定値 p): p   ⬅︎ 基本パーティションを選択
パーティション番号 (1-4、既定値 1): 1
最初のセクタ (2048-134217727、既定値 2048): 2048   ⬅︎ 既定値を入力
Last sector、+/-sector or +/-size{K,M,G,T,P} (2048-134217727、既定値 134217727): 『Enter』キー

新しいパーティション 1 をタイプ Linux、サイズ 64 GiB で作成しました.
パーティション #1 には ext4 著名が書き込まれています.

署名を削除しますか? [Y]es/[N]o: Y   ⬅︎ 署名を削除する

署名は write (書き込み)コマンドを実行すると消えてしまいます.

#####################################
### ここで操作後のパーティション状態を確認 ###
#####################################
コマンド (m でヘルプ): p
ディスク /dev/sda: 64 GiB、68719476736 バイト、134217728 セクタ
Disk model: VBOX HARDDISK
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512バイト / 512バイト
I/Oサイズ (最小 / 推奨): 512バイト / 512バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xae83c32c

デバイス    起動 開始位置  最後から    サイズ  Id  タイプ
/dev/sda1  *      2048  134217727   64G  83  Linux

パーティション 1 にファイルシステム/RAIDの署名が完全に消去されます.

###################################################
### パーティション情報が問題なれば、情報を書き込んで終了する ###
###################################################
コマンド (m でヘルプ): w
パーティション情報が変更されました.
ディスクを同期しています.
  • 再起動
$ sudo reboot
  • resize2fs コマンドでパーティションを拡張
$ sudo resize2fs /dev/sda1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/sda1 is mounted on /; on-lione resizing required
old_desc_blocks = 3、new_desc_blocks = 8
The filesystem on /dev/sda1 is now 16776960 (4k) blocks long.
  • ディスク使用量を確認
$ df -h

screenshot15.png

20 GB 仮想 HDD から 64 GB 仮想 HDD に変更完了し、利用可能なストレージが 3% から 70% に増加しました。

  • 再起動して、問題なく OS が立ち上がることを確認
$ sudo reboot
  • ディスク使用量アナライザで確認 screenshot16.png

ストレージが拡張できていれば作業はおしまい。

6. 後処理:物理ストレージの解放

今回、ストレージを拡張するにあたり、仮想 HDD を新たに作成したことで、不要になった 20 GB の仮想 HDD はデタッチしました。 これだけではローカル PC 上の 20 GB は解放されないため、削除しておきます。

また、作業にあたり作成しておいたスナップショットも、問題なく動作することが確認できれば削除して大丈夫です。

  • 保有している仮想 HDD(物理ストレージを占領している仮想 HDD 一覧)を確認 screenshot17.png

    screenshot18.png

  • 仮想 HDD を選択して解放

    • 注意:解放したストレージ容量及びデータは復元できなくなるので、よく確認してから実行すること! screenshot19.png

まとめ

今回は、一度マウントした仮想 HDD 及び仮想マシンのストレージを拡張する方法について書きました。 ストレージの操作する際は、万が一に備えてデータのバックアップを取ってから作業することを推奨します。

参考・引用