公式UTMのGalleryでは、22.xのUbuntu(ARM64)がDisk:64GiBと大きいため、軽量のminimalで構成してみました。
インストールイメージのダウンロード
arm用ubuntuのISOファイルをここからダウンロードする
UTMで新規仮想マシン作成
・仮想化 - Linux
・仮想化エンジン: デフォルト(Apple仮想化は使わない)
・起動ISOイメージ: ダウンロードしたISOファイルを指定
・Memory: 2048MiB
・Disk: 8GiB
・共有ディレクトリ: 任意の場所を指定
・「仮想マシン設定を開く」にチェックを入れて保存
・情報 - 名前: 仮想マシン名を設定 - 保存
この状態だと、仮想マシンファイル (*.utm) はデフォルトの~/Library/Containers/com.utmapp.UTM/Data/Documentsに保存される。変更したい場合は、仮想マシンを右クリック - 移動 で保存先を変更する
変更すると、下記のようにパスが表示されるようになる

初期インストール
・仮想マシンを起動
・[Try or Install Ubuntu server] *Default
・Language - English *Default
・Keyboard Layout/Variant :English(US) *Default
・Type of Installation: Ubuntu Server (minimized)
・Network Configuration *Default
enp0s1 eth
DHCPv4 <ip address>
・Proxy configuration *Default
blank
・Ubuntu archive mirror configuration *Default
・Guided storage configuration *Default
Use an entire disk - Set up this disk as an LVM group
・Storage configuration *Default

・Confirm destructive action: Continue
・Profile Configuration: お好みで設定してください
・Upgrade to Ubuntu Pro: Skip for now *Default
・SSH Configuration: [x] Install OpenSSH server
*ここではinstallのみ
・Featured server snaps *Default

Installation complete!でReboot Now
・VMコンソール右上の「ドライブイメージのオプション」アイコンをクリックする

・ISOファイルを取り出す

・CUIモードで起動するので、設定したユーザーでログインする
vimインストール
・viが使えないのでインストールする
sudo apt update
sudo apt install vim
コンソール表示が見づらい時、コマンド実行前にclearを打って一旦初期化すると見やすいです。
仮想Linux用パッケージ追加と共有ディレクトリの設定
参照先: Linux | UTM Documentation
・SPICE Agent, QEMU Agent, SPICE WebDAV をインストールする
sudo apt install spice-vdagent qemu-guest-agent spice-webdavd
・共有ディレクトリの設定を/etc/fstabに追加する
share /mnt/utm 9p trans=virtio,version=9p2000.L,rw,_netdev,nofail,auto 0 0
マウントポイント(/mnt/utm)は変更可能
Apple仮想化を有効にした場合はfstabの記述が下記のようになります。
share [mount point] virtiofs rw,nofail 0 0
・マウントポイントを作成
sudo mkdir /mnt/utm
・設定を反映・確認
sudo mount -a
systemctl list-units --type=mount
systemctl daemon-reloadでは反映されないのでmount -aを使います。設定が反映されない時はRebootしてください。
sshの設定
・hostname -IコマンドでDHCPから割り当てられたIPを確認しておく
・ここを参照して設定する
・ssh用ユーザーは初期インストールで作成したものをそのまま使う
[設定Tips] .ssh/authorized_keysが空ファイルとして既にあるので上書きする
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[設定Tips] 共有ディレクトリへの秘密鍵コピーはsudoで実行する
sudo cp -p .ssh/id_rsa /mnt/utm/path/to/dir
・macOSからsshで接続確認できればOK
Chronyによる時刻同期の設定
ChronyがUbuntuの標準NTPクライアントになったことが公式ページでも明記されています。
Synchronize time using Chrony - Ubuntu Server documentation
・chronyインストール
sudo apt install chrony
・サービス有効化+起動
sudo systemctl enable --now chrony
・サービス起動確認
systemctl status chrony
・時刻同期の状態確認
chronyc tracking
・タイムゾーンの設定
sudo timedatectl set-timezone Asia/Tokyo
・確認
timedatectl status
・NTP同期の有効化
sudo timedatectl set-ntp true
set-ntp true は chronyd を通じて同期を有効化する
・同期の確認
chronyc sources
^* は現在の同期先
Reach が 377 なら正常(現在の同期先が377に更新されるまで少し時間がかかる)
377(8進数) → 直近8回全て同期が成功している
Last sample の +/- は誤差範囲
qemu-imgでスナップショットを作成
ここまでの状態をバックアップするため、qemu-imgコマンドでスナップショットを作成します。この機能はメモリ状態までは保存されないため、事前にVMをシャットダウンしておく必要があります。
・対象VMの仮想ディスク(*.qcow2ファイル)のフルパスを確認する
UTM画面の仮想マシンを右クリック - 「Finderに表示」をクリックする
さらに、*.utmを「パッケージの内容を表示」で開くとDataフォルダが見えて、その中にqcom2ファイルがある


Finderでqcom2を選択して、右下のファイル名を右クリックするとパスをコピーできる

・macOSでqemuをインストールする
brew install qemu
・スナップショットを作成する
qemu-img snapshot -c <スナップショット名> <qcow2ファイルのパス>
例:
qemu-img snapshot -c snapshot-2025-10-21 ~/ubuntu.utm/Data/xxxxxx.qcow2
・スナップショット一覧を確認する
qemu-img snapshot -l <qcow2ファイルのパス>
スナップショットは QCOW2ファイルに内包されるメタデータとして保存されます。
Finderからファイルとして見ることはできません。
・スナップショットから復元する (optional)
qemu-img snapshot -a <スナップショット名> <qcow2ファイルのパス>
・スナップショットを削除する (optional)
qemu-img snapshot -d <スナップショット名> <qcow2ファイルのパス>
作成・復元・削除はオプション-c|-a|-dが変わるだけです。
参考資料:
