物理HDDやSSDをVMに直接アタッチしてストレージとして使う、いわゆるRDM (Raw Device Mapping)をProxmox VEで行う方法。
RDMはVMware用語っぽい雰囲気で、Proxmoxではディスクパススルーと呼んでいる。厳密には仕組みも違うっぽい気がするけど、RDMの方が通りがいいので本記事ではRDMと呼ぶことにする。
RDMしたいストレージのホスト側デバイスファイルを、仮想ディスクまたは仮想ブロックデバイスとしてゲストにくっつけるだけで行ける。
Proxmoxのストレージ画面でRDM対象のHDDを確認する。重要なのはHDDのモデル名とシリアル番号。
CLIからはls -l /dev/disk/by-id/
で確認すると良いだろう。
# ls -l /dev/disk/by-id/ total 0 lrwxrwxrwx 1 root root 9 Jan 20 22:53 ata-MARSHAL_MAL38000NS-T72_37F5K073FDMF -> ../../sdc lrwxrwxrwx 1 root root 10 Jan 20 22:53 ata-MARSHAL_MAL38000NS-T72_37F5K073FDMF-part1 -> ../../sdc1 lrwxrwxrwx 1 root root 9 Jan 20 23:24 ata-ST10000NM0086-2AA101_ZA210RT9 -> ../../sdb lrwxrwxrwx 1 root root 10 Jan 20 23:24 ata-ST10000NM0086-2AA101_ZA210RT9-part1 -> ../../sdb1 (略) lrwxrwxrwx 1 root root 9 Jan 26 13:41 ata-WDC_WD160EDGZ-11B2DA0_2BJBRUZN -> ../../sdh lrwxrwxrwx 1 root root 10 Jan 26 13:41 ata-WDC_WD160EDGZ-11B2DA0_2BJBRUZN-part1 -> ../../sdh1
PVEのシェルを開きqm set
コマンドでHDDをVMにくっつける。書式は見れば分かると思うが、qm set 仮想マシンID アタッチ先仮想デバイス アタッチ元ホスト側デバイス
である。
# qm set 100 -virtio0 /dev/disk/by-id/ata-HGST_HUH728080ALE604_VKHV9Z7X # qm set 100 -virtio1 /dev/disk/by-id/ata-HGST_HUH728080ALE604_VLG7NZGY # qm set 100 -virtio2 /dev/disk/by-id/ata-MARSHAL_MAL38000NS-T72_37F5K073FDMF # qm set 100 -virtio3 /dev/disk/by-id/ata-TOSHIBA_MD05ACA800_37H1K0KYFYZD
アタッチ元のHDDのデバイスファイルは、上記のように/dev/disk/by-id/
以下の製品名・シリアル番号を含むパスを使うのが良いとされている。
/dev/sda
のような昔ながらのデバイスファイルも使えるが、sdX
と物理HDDの対応は変化する可能性があるので(例えばHDDを繋ぐ物理SATAポートが変わった時とか)、確実に一意に定まる/dev/dis/by-id/ata-MODELNAME_SERIALNO
の方が安全というわけ。アタッチしたデバイスはVM側で直接読み書きされちゃうので(それを望んでるわけだけど)、あずかり知らぬところで意図せぬストレージが読み書きされたら目も当てられない状況になってしまう。
アタッチ先仮想デバイスは、上記では-virtio0
でブロックデバイスとして接続している。SCSIなら-scsi0
、SATAなら-sata0
って感じで使いたい方式で置き換えてください。
なお、2021年現在、RDMに限らず仮想ディスクの接続は、virtio-scsiによるSCSI接続がよさげな雰囲気。理由は以下のとおり。
問題なくアタッチできれば、VM管理画面で「ハードディスク」が追加されているのが確認できる。
以上で、VM側から追加したHDD全体が仮想ストレージとして見える。
勘の良い人はお気づきだろうが、同じ方法で物理ディスク全体だけではなく、特定のパーティションのみをRDMすることもできる。この場合も、VM側からは1台の仮想ディスクに見えるため、VM側でパーティションを切ると物理パーティションの中に仮想パーティションテーブルが存在する入れ子状態となる(仕組み上当然ですわな。)
既存のデータ入りパーティションをVMにRDMし、仮想ディスク上の有効なパーティションとしてそのまま使いたい場合は、Linuxのデバイスマッパーを使うと実現できる。手前みそですけど参考記事:Device Mapperで物理パーティションを仮想パーティションに偽装