VirtualBoxでUbuntuゲストのディスクを拡張できない？スナップショットが原因だった話とその対処法

# 要旨
VirtualBoxで仮想HDDの容量を増やしても、スナップショットが存在すると、実際の変更がゲストOSに反映されないことがある。  
この記事では、スナップショットが原因でディスク拡張が反映されなかった事例と、その回避・修正方法を記録している。

# 私の環境
* ホスト：Windows 11  
* ゲスト：Ubuntu 5.15.0-141-generic  
* VM：VirtualBox 7.0  

# やりたかったこと
もともとUbuntuは25GBで使用していたのだけれど、Android Studioを入れようとしたらディスクがぱつぱつになってしまったので、Ubuntuのディスク容量を64GBにしようとした。

# はまりポイント
ディスク容量を増やす前に、スナップショットを取ったのが、失敗だった。
スナップショットがあると、Ubuntuに新しいディスク容量が認識されなかった。
VirtualBox側の各マシンの設定のストレージの説明で「割当：＜マシン名＞.vdi（スナップショット）と書いてあることに違和感をもって、
スナップショットを削除したら解決した。

# はまりからの脱出手順
VirtualBoxの管理画面で
当該マシンを選択すると、右側にスナップショットが表示されるから、右クリックで「削除」する。

# 正しい手順
## (0) （参考）最初の状態
最初はシステム全体で25GBでVMを作ったので、/（ルートディレクトリ）も分けていなかった（df -h参照）。
2022年にubuntu-mateのデフォルト設定作ったVMで、LVMではなかった（lsblkの出力でsda5がいきなりext4と書いてある）。
~~~
# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           197M  1.4M  196M   1% /run
/dev/sda5        24G   23G   99G  38% /
tmpfs           982M     0  982M   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda1       511M  4.0K  511M   1% /boot/efi
<machinename>_share   462G  262G  201G  57% /media/sf_<machinename>_share
tmpfs           197M  172K  197M   1% /run/user/1000
/dev/sr0         51M   51M     0 100% /media/<username>/VBox_GAs_7.0.41

# lsblk -f
/snap/ubuntu-mate-welcome/726
sda                                                                         
├─sda1
│    vfat   FAT32       D5B4-ADBC                               511M     0% /boot/efi
├─sda2
│                                                                           
└─sda5
     ext4   1.0         1f0c5fbd-9def-4972-aeaf-a25d70d565d4  427.4M    93% /var/snap/firefox/common/host-hunspell
                                                                            /
sr0  iso966 Jolie VBox_GAs_7.0.4
                        2022-11-16-17-05-17-10                     0   100% /media/<username>/VBox_GAs_7.0.41
~~~
## (1) VirtualBox側で仮想HDDの容量を増やす
ファイル→ツール→仮想メディアマネージャ
該当する＜マシン名＞.vdiを選択
下の方にサイズの項目があるので、現在の容量（25GB）の欄に増量後の容量(64GB)に書き換えて「適用」をクリック
## (2) ゲストOS内で、パーティションの容量を増やす
growpartってコマンドで一発。コマンドがなかった場合には、エラーメッセージにしたがってapt installでインストールすればよい。/（ルートディレクトリ）が論理パーティションになっているので（デフォルトでインストールしただけなので理由は不明）、sda2を広げて、sda5を広げるという2段階が必要だった。
~~~
# growpart /dev/sda 2
# growpart /dev/sda 5
~~~
## (3) ゲストOS内で、ファイルシステムに認識させる
~~~
resize2fs /dev/sda5
~~~
## (4) （参考）作業後の状態
~~~
df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           197M  1.4M  196M   1% /run
/dev/sda5        63G   23G   38G  38% /
tmpfs           982M     0  982M   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda1       511M  4.0K  511M   1% /boot/efi
<machinename>_share   462G  262G  201G  57% /media/sf_<machinename>_share
tmpfs           197M  172K  197M   1% /run/user/1000
/dev/sr0         51M   51M     0 100% /media/<username>/VBox_GAs_7.0.41
~~~

# 蛇足
* このVMは、プライベートで使っている、ちょっとLinuxが必要なときに使うために作成したVMなので、HDD容量も25GBと小さめで、/（ルートディレクトリ）もわけなかった。
* マシンがHDDをどのサイズで認識しているかを確認する方法は色々ある。例えばdmesgも使える。
~~~
$ dmesg  |grep GB
[    0.147483] Last level dTLB entries: 4KB 2048, 2MB 2048, 4MB 1024, 1GB 0
[    4.185405] sd 2:0:0:0: [sda] 134217728 512-byte logical blocks: (68.7 GB/64.0 GiB)
~~~
# まとめ
- VirtualBoxでディスクサイズ変更しても、ゲストOSで認識されないときは、スナップショットの存在を疑ってみましょう
- スナップショットを削除してから、ゲストOS側で`growpart` → `resize2fs` の手順でディスク拡張ができる
- LVMでない環境でも比較的簡単に拡張可能（むしろ簡単）

仮想環境のトラブルは調べても断片的な情報が多いので、この記事が同じ問題で困っている方の助けになれば嬉しいです。

# 参考にしたサイト
* [ChatGPT](https://chatgpt.com)　全般的に助けてもらいました。はまりポイントから抜けて振り返ってみると、最初に教えてくれたやり方を結果的になぞっていました。
* [VirtualBox で CentOS7 の ディスクを拡張した時の手順 | kiyoblog](https://beanhouse.org/wordpress/?p=1490)  VirtualBox側の設定は、この方と同じやり方をしました。ゲストOS側は、この方はLVMだったので同じにはできませんでした。
* [【Linux】growpartでLVMのシステム領域を拡張する | 技術のないエンジニアのIT備忘録](https://tec-memo.com/linux-growpart/)　growpartの説明です。fdiskやpartedでも同じことができますが、growpartのほうが圧倒的にかんたんです。
* [6.3. Ext4 ファイルシステムのサイズ変更 | ストレージ管理ガイド | Red Hat Enterprise Linux | 6 | Red Hat Documentation](https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/6/html/storage_administration_guide/ext4grow)　resize2fsの説明です。