0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

要約

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

経緯

 プロジェクト上でUbuntuサーバーが必要になりました。
 WSL2は除外して、簡便にWindows上でUbuntuサーバーを立ち上げるために、canonical製ツールのMultipassを使うことにしました。

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

 ある日、primaryインスタンスのディスクの空きがほとんどなく使用率が100%近くになっていることに気づきます。
ubuntu起動画面.png

 dfコマンドの出力も確認します。
dfで100%表示.png

 この状態でsudo apt updateを試すと、無情な「No space left on device」の文字が表示されます。
apt_updateでエラー(disk不足).png

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

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

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

 「ubuntu /var/log 削除」としてネット検索してたどり着いたのが、journalctlコマンドによるログ削除でした。
 この記事を参考に、sudo journalctl --vacuum-time=1dなどとして整理しましたが、/ は100%→99%に変わった程度でした。 初めて実行した時は結構空いたのに、もう普段から整理していると効き目は当然なくなってきます。
 参考:Linux環境設定/ジャーナルファイルを削除したい場合・journalctl - Linuxと過ごす

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

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

apt-get_cleanを試す.png

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

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

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

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

 公式ドキュメントのHow-to guidesにある、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

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?