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環境でもディスクイメージとしてファイルが使えるようになる。

ZFS環境では、localストレージでイメージファイルを扱わない設定となっているため、まずはここをどうにかする。

Proxmox VE 6.3-3で確認したところ、GUIで設定できるようになっていた。

データセンター>ストレージで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を追加

仮想ディスクイメージファイルは専用の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ストレージから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)」である。

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に接続できる。
    • まぁ、ちゃんと公式のお作法に則っておきましょうってことで。
  • virtualization/proxmox_ve_6_2_use_external_disk_image_file.txt
  • 最終更新: 2021-01-20 12:58
  • by Decomo