multipassをWindows上でHyper-Vと組み合わせて使うとき、必要なディスク容量をインスタンス作成時に必ず確保しておく

# 要約
　`multipass launch`コマンドにてインスタンス作成する時には、**ディスク容量の変更は後から利かない**ので、`multipass launch ～ --disk 20GiB　～`などとして必要なディスク容量を明示する必要があります。
　明示を忘れると、たった5GiBのディスクでインスタンスが作成され / が簡単に100%に到達して、`sudo apt upgrade`がこけたりします。

# 経緯
　プロジェクト上でUbuntuサーバーが必要になりました。
　WSL2は除外して、簡便にWindows上でUbuntuサーバーを立ち上げるために、canonical製ツールの[Multipass](https://multipass.run/)を使うことにしました。

　multipassをインストールして、タスクトレイに常駐しているのを確認したのですが、まだ意図的にインスタンス作成していないのに、primaryという名前のインスタンスがあることに気づきました。 ふつうに22.04.3 LTSなので、それでいいやとプロジェクトに使い始めたのがよくありませんでした。

　ある日、primaryインスタンスのディスクの空きがほとんどなく使用率が100%近くになっていることに気づきます。
![ubuntu起動画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45595/19f17839-3e01-a5ca-0162-0ddf4f97bfeb.png)

　dfコマンドの出力も確認します。
![dfで100%表示.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45595/6f6b0d7d-a0ff-d051-db96-0c2951c2efe2.png)

　この状態で`sudo apt update`を試すと、無情な「No space left on device」の文字が表示されます。
![apt_updateでエラー（disk不足）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45595/c49d0ee9-c611-2612-ea8e-7aa56ac421c3.png)

# ディスクが足りないときに、空き容量を確保する技を試す

　(この件は単なる悪あがきなので、お急ぎの際は読み飛ばしてください。)

## 悪あがき、journalctlコマンドによる古いログの削除

　「ubuntu /var/log 削除」としてネット検索してたどり着いたのが、journalctlコマンドによるログ削除でした。
　この記事を参考に、`sudo journalctl --vacuum-time=1d`などとして整理しましたが、/ は100%→99%に変わった程度でした。 初めて実行した時は結構空いたのに、もう普段から整理していると効き目は当然なくなってきます。
　参考：[Linux環境設定/ジャーナルファイルを削除したい場合・journalctl - Linuxと過ごす](https://linux.just4fun.biz/?Linux%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A/%E3%82%B8%E3%83%A3%E3%83%BC%E3%83%8A%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%83%BBjournalctl)

## 悪あがき、aptのキャッシュ削除

　そもそも`sudo apt update`して`sudo apt upgrade`したいのに、元も子もないのですが、一応99%くらいから97%くらいにはなります。 ですが、これで`sudo apt update`が進んでも、`sudo apt upgrade`の場面でダウンロードしたパッケージファイルのダウンロードに失敗するとか、ダウンロードできても展開したりする際にコケることになります。

![apt-get_cleanを試す.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45595/432a54cf-d9ed-2423-92ae-440f2c29d92a.png)

　あと、消せそうなものって、何があるんだろう？ もうわからない。

## そもそもaptコマンドもうまく動作しなくなる

　ディスクの空きがなくて、`sudo apt update`でダウンロードするカタログ？もディスクに保存できなくて、まともに動かなくなってきて、お手上げです。

## multipass setコマンドでインスタンスの構成変更を試みるも、失敗

　公式ドキュメントのHow-to guidesにある、[Set the CPU, RAM or disk of an instance](https://multipass.run/docs/modify-an-instance#heading--set-the-cpu-ram-or-disk-of-an-instance)の記事を参考に、インスタンスの構成変更を試しました。
　結論としては、ディスク変更は通りません。 コマンドの実行で特にエラーメッセージもなくプロンプトに戻るのですが、インスタンスの状態をmultipass infoコマンドで確認してもディスク容量は増えません。
　想像するに、Hyper-Vマネージャー上でインスタンスを確認すると、**「自動チェックポイント」機能が有効になっている**ために、変更が効かないのだと思います。

# 結論、もう別インスタンスを作るしかない

　ディスク容量を増やせないなら、はじめから大きめのディスク容量で作っておけばいいじゃない。
　そこで、こんなふうにしました：

```
C:\Users\m6u>multipass launch --cpus 1 --disk 20GiB --memory 4GiB --name streaming-proxy
```

　CPUは1つ、ディスクは20GB、メモリは(そんなに要らないけど)4GBとしました。 インスタンスの名称はプロジェクトにちなんで「streaming-proxy」としています。

```
C:\Users\m6u>multipass info streaming-proxy
Name:           streaming-proxy
State:          Running
IPv4:           172.19.41.1
Release:        Ubuntu 22.04.3 LTS
Image hash:     870bd58b5c1e (Ubuntu 22.04 LTS)
CPU(s):         1
Load:           0.08 0.02 0.01
Disk usage:     11.4GiB out of 19.3GiB
Memory usage:   274.3MiB out of 3.8GiB
Mounts:         --
```

　もちろん、新しいインスタンスなので、最初からaptコマンドで必要なパッケージをインストールして、プロジェクトファイルもアップロードし直して、同じ状態に持ってきて問題なく動作しています。
　もう11GB以上も使っているので、20GBくらいってのは妥当だったのかなと、安心しています。

# 参考記事
[How to create an instance \| Multipass documentation](https://multipass.run/docs/create-an-instance#heading--create-an-instance-with-custom-cpu-number-disk-and-ram)

# 余談：Hyper-Vマネージャー上で直接、Ubuntuインスタンス作成したら良いのではないか？

　かっちりきっちり、ちゃんとやるなら、isoイメージファイルを用意して、Ubuntu ServerのインストールをHyper-Vマネージャー上でやればいいんでしょうけれど、意外と面倒だし、判断に迷うような。
　その点、multipassなら最小限のサーバーが比較的すぐ立ち上がるから、開発用サーバーを立てるのに重宝すると思って使っています。