Proxmox VE 6.2のZFSストレージで仮想ディスクをイメージファイルで使う
Proxmox VEをZFS環境として構築すると、仮想マシンのディスクイメージはzvolとして作成される。zvolはブロックデバイス扱いなので、仮想ディスク用途にはピッタリである。
しかし個人的には、ZFSのスナップショットとの相性や、バックアップのし忘れがないとかのしょーもない理由で、仮想ディスクもイメージファイルで扱いたい。
ネット上の情報を参考にしながら試行錯誤したところ割と簡単に実現できた。ZFS環境のみならず、PVE管理外の外部のディスクイメージを使うような場合にも有用だと思う。
試した環境
- Proxmox VE 6.2-4
- ZFS環境
- ディスクイメージ専用のZFSプール zvm を使う
手順
Proxmox VEは仮想マシン用のデータ保管ストレージとして、ローカルストレージやNFS, iSCSIなど様々なタイプのストレージを扱う事ができ、それぞれ機能や特性が異なる。
PVEシステムに必ず存在するlocalストレージとは、それらの一種であるDirectoryタイプのストレージで、その実体は/var/lib/vz/
ディレクトリである。
基本的な考え方としては、このディレクトリ以下にディスクイメージファイルを置けば、ZFS環境でもディスクイメージとしてファイルが使えるようになる。
localストレージの設定変更
ZFS環境では、localストレージでイメージファイルを扱わない設定となっているため、まずはここをどうにかする。
データセンター>ストレージでlocalをダブルクリックし、コンテンツに「Disk image」を含める。
PVE 6.2の時はDisk imageを追加しようとしてもできなかった気が…
/etc/pve/storage.cfg
を編集し、localストレージでファイルイメージを扱えるようにする。
dir: local path /var/lib/vz content vztmpl,iso,backup,images # imagesを追加
仮想HDDファイルの作成
仮想ディスクイメージファイルは専用のZFSプール&データセット、zvm/R/imagesに置くとする。場所はお好みで。
データセットの作成
# zfs create zvm/R/images
空のディスクイメージを作る。ここでは、いわゆるRAW形式で900GiBで確保している。
# dd if=/dev/zero of=/zvm/R/images/hdd.raw bs=1M count=921600
現時点では単なるゼロ埋めデータなので、圧縮率が半端ない。
# ls -alh /zvm/R/images/ total 1.5K drwxr-xr-x 2 root root 3 Dec 26 16:12 . drwxr-xr-x 3 root root 3 Dec 26 16:01 .. -rw-r--r-- 1 root root 900G Dec 26 16:24 hdd.raw # zfs list -r zve NAME USED AVAIL REFER MOUNTPOINT zvm 3.66M 1.06T 96K /zvm zvm/R 192K 1.06T 96K /zvm/R zvm/R/images 96K 1.06T 96K /zvm/R/images
localストレージにイメージを配置
localストレージに作成したディスクイメージファイルを置く。といっても、コピーしたのでは専用プールに作った意味がないので、localストレージからzvmプール上のイメージファイルにシンボリックリンクを張ってやる。
# mkdir -p /var/lib/vz/images/101 # ln -s /zvm/R/images/hdd.raw /var/lib/vz/images/101/vm-101-hdd.raw
上記パス内の「101」はVMのIDなので適宜読み替えのこと。また、イメージファイル(ここではシンボリックリンクだが)の命名規則は「vm-VMのID-任意の英数字.イメージ形式(raw/qcow2/vmdk)」である。
VMにイメージファイルを取り込み
qm rescan
を実行するとイメージファイルのスキャンが行われる。
# qm rescan rescan volumes... VM 101: add unreferenced volume 'local:101/vm-101-hdd.raw' as 'unused0' to config
問題がなければ、VM管理画面のハードウェア構成に「未使用ディスク」として追加される。
こいつをダブルクリックしてVMに接続すれば完了。
落ち葉拾い
- localストレージは
/var/lib/vz/
で辿れさえすればいいので、fstabで別ディスクをマウントしても問題ない。公式リファレンスにも書いてあったりする。- 今回のようにZFS環境なら、それこそmountpointプロパティを使う方が簡単だったりして。
/etc/pve/qemu-server/
にある仮想マシン設定ファイルを編集して、「sata0: /full/path/to/imagefile.raw」という感じで書けば、何も考えずに任意のディスクイメージファイルをVMに接続できる。- まぁ、ちゃんと公式のお作法に則っておきましょうってことで。