virtualization:proxmox_ve_6_2_rdm

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
virtualization:proxmox_ve_6_2_rdm [2020-12-28 09:26]
Decomo ↷ 移動操作に合わせてリンクを書き換えました。
virtualization:proxmox_ve_6_2_rdm [2022-04-07 11:51] (現在)
Decomo
行 1: 行 1:
-====== Proxmox VE 6.2でHDDをRDM (Raw Device Mapping) ======+====== Proxmox VEのVMからHDDを直接読み書き(いわゆるRDM) ======
  
-物理HDDやSSDをVMに直接アタッチしてストレージとして使う、VMwareで言うところのRDMをProxmox VEで行う方法。+物理HDDやSSDをVMに直接アタッチしてストレージとして使う、いわゆるRDM (Raw Device Mapping)をProxmox VEで行う方法。
  
-RDMはVMware用語っぽ、Proxmoxではディスクパススルーと呼んでいる。厳密には仕組みも違うっぽい気がするけど、RDMの方が通りがいいので本記事ではRDMと呼ぶことにする。+RDMはVMware用語っぽい雰囲気で、Proxmoxではディスクパススルーと呼んでいる。厳密には仕組みも違うっぽい気がするけど、RDMの方が通りがいいので本記事ではRDMと呼ぶことにする。
  
 ===== 試した環境 ===== ===== 試した環境 =====
行 11: 行 11:
 ===== 手順 ===== ===== 手順 =====
  
-ホスト側デバイスファイルを、ブロックデバイスないし仮想ディスクとしてゲストにくっつけるだけで良いっぽい+RDMしたいストレージのホスト側デバイスファイルを、仮想ディスクまたは仮想ブロックデバイスとしてゲストにくっつけるだけで行ける
  
 Proxmoxのストレージ画面でRDM対象のHDDを確認する。重要なのはHDDのモデル名とシリアル番号。 Proxmoxのストレージ画面でRDM対象のHDDを確認する。重要なのはHDDのモデル名とシリアル番号。
行 17: 行 17:
 {{ virtualization:proxmox_ve_6_2_rdm_target_hdds.png |}} {{ virtualization:proxmox_ve_6_2_rdm_target_hdds.png |}}
  
-シェルを開いてHDDをVMにくっつける。+CLIからは''ls -l /dev/disk/by-id/''で確認すると良いだろう。 
 + 
 +<code> 
 +# 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 
 +</code> 
 + 
 +PVEのシェルを開き''qm set''コマンドでHDDをVMにくっつける。書式は見れば分かると思うが、''qm set 仮想マシンID アタッチ先仮想デバイス アタッチ元ホスト側デバイス''である。
  
 <code> <code>
行 26: 行 40:
 </code> </code>
  
-HDDを指定するパスは''/dev/disk/by-id/''以下のものを使う。''/dev/sda''みたいなパスでもRDM自体は出来るだが、デバイス名とストレージの対応付けが変化する可能性があるため、確実に一意に定まる''by-id''のパスの方が良いというわけ+アタッチ元のHDDのデバイファイル、上記のように''/dev/disk/by-id/''以下の製品名・シリアル番号を含むパスを使うのが良いとされて
  
-''-virtio0''部分はVMへ接続方法を表す。上記ではVirtIOのブロックデバイスとして出しているが、SCSIして出したければ''-scsi0''という風にする。+''/dev/sda''ような昔ながらのデバイスファイルも使えるが、''sdX''物理HDDの対応は変化する可能性があるので(例えHDDを繋ぐ物理SATAポートが変わった時とか)、確実に一意に定まる''/dev/dis/by-id/ata-MODELNAME_SERIALNO''の方が安全というわけ。アタッチしたデバイスはVM側で直接読み書きされちゃうので(それを望んでわけだけど)、あずかり知らぬところで意図せぬストレージが読み書きされたら目も当てられない状況になってしまう
  
-問題なくアタッチできれば、VM管理画面で「ハードディスク」が追加されているのが確認できる。+アタッチ先仮想デバイスは、上記では''-virtio0''でブロックデバイスとして接続している。SCSIなら''-scsi0''、SATAなら''-sata0''って感じで使いたい方式で置き換えてください。 
 + 
 +なお、2021年現在、RDMに限らず仮想ディスクの接続は、virtio-scsiによるSCSI接続がよさげな雰囲気。理由は以下のとおり。 
 + 
 +  * virtio-blkの開発が停滞しており、性能面でvirtio-scsiが優位になってきた。 
 +  * virtio-blkはPCIデバイス扱いなのでデバイス数制限がキツイく、virtio-scsiの方がユルイ。 
 +  * virtio-scsiはゲスト側でのホットプラグ対応が望める。 
 + 
 +問題なくアタッチできれば、VM管理画面で「ハードディスク」が追加されているのが確認できる。
  
 {{ virtualization:proxmox_ve_6_2_attached_hdds_with_rdm.png |}} {{ virtualization:proxmox_ve_6_2_attached_hdds_with_rdm.png |}}
  
-以上で、VM側から追加したHDDが仮想ストレージとして見える。+以上で、VM側から追加したHDD全体が仮想ストレージとして見える。 
 + 
 +勘の良い人はお気づきだろうが、同じ方法で物理ディスク全体だけではなく、特定のパーティションのみをRDMすることもできる。この場合も、VM側からは1台の仮想ディスクに見えるため、VM側でパーティションを切ると物理パーティションの中に仮想パーティションテーブルが存在する入れ子状態となる(仕組み上当然ですわな。) 
 + 
 +既存のデータ入りパーティションをVMにRDMし、仮想ディスク上の有効なパーティションとしてそのまま使いたい場合は、Linuxのデバイスマッパーを使うと実現できる。手前みそですけど参考記事:[[virtualization:how_to_simulate_ppartition_as_one_of_vpartitions_in_vdisk]]
  
 ===== 参考サイト ===== ===== 参考サイト =====
  • virtualization/proxmox_ve_6_2_rdm.1609115196.txt.gz
  • 最終更新: 2020-12-28 09:26
  • by Decomo