PVE特有の話ではなくLinuxのホットスワップ方法なんですけどね。
自分の環境ではHDDをRDMでVMにくっつけてるので、VMはあらかじめ落としておく。VM側でQEMUディスクをデタッチ→PVE側で物理ディスクをデタッチの流れで、VMを落とさずにホットスワップできそうな気がするが、試してはない。
以下の作業はPVEのシェルで行う。
ディスクID(/dev/disk/by-id/以下の識別子)でRDMしている場合、デタッチ対象のディスクのデバイスファイル(/dev/sdaってやつ)を特定する必要がある。
ディスクIDはデバイスファイルへのリンクなので、/dev/disk/by-id/をlsすればOK。
# ls -al /dev/disk/by-id/ total 0 drwxr-xr-x 2 root root 1120 Feb 13 11:06 . drwxr-xr-x 8 root root 160 Feb 4 00:31 .. lrwxrwxrwx 1 root root 9 Feb 4 00:31 ata-WDC_WD80EMAZ-00WJTA0_7HKJKU1N -> ../../sda (略)
ここではsdaを切り離し対象のディスクとする。
ホットスワップ対象のディスクをアンマウントする。
RDMの場合はVMのハードウェア設定からディスクをデタッチする。ふと思ったが、ライトキャッシュ有効の状態で物理ディスクを切り離すとやべー気がするので、やっぱりVMは落として、syncしといたほうがいい気がする。
/sys/block/sda/device/deleteに1を書き込んでディスクを切り離す。
# echo 1 > /sys/block/sda/device/delete
以下のようなログが記録される。
Feb 13 11:38:15 siso kernel: [817607.573389] sd 0:0:0:0: [sda] Synchronizing SCSI cache Feb 13 11:38:15 siso kernel: [817607.575096] sd 0:0:0:0: [sda] Stopping disk Feb 13 11:38:19 siso kernel: [817610.745145] ata1.00: disabled
引っこ抜くと以下のログが記録される。
Feb 13 11:40:04 siso kernel: [817715.711131] ata1: SATA link down (SStatus 0 SControl 300)
物理ディスクを交換する。
うちの環境では新しいディスクを挿すと自動的に認識され、以下のようなログが記録された。
Feb 13 12:38:47 siso kernel: [821238.903194] ata1: link is slow to respond, please be patient (ready=0) Feb 13 12:38:57 siso kernel: [821248.923237] ata1: link is slow to respond, please be patient (ready=0) Feb 13 12:38:59 siso kernel: [821251.071237] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300) Feb 13 12:38:59 siso kernel: [821251.164123] ata1.00: ATA-9: HGST HUH728080ALE604, A4GNWxxx, max UDMA/133 Feb 13 12:38:59 siso kernel: [821251.164869] ata1.00: 15628053168 sectors, multi 0: LBA48 NCQ (depth 32), AA Feb 13 12:38:59 siso kernel: [821251.173808] ata1.00: configured for UDMA/133 Feb 13 12:38:59 siso kernel: [821251.175561] scsi 0:0:0:0: Direct-Access ATA HGST HUH728080AL W907 PQ: 0 ANSI: 5 Feb 13 12:38:59 siso kernel: [821251.177349] sd 0:0:0:0: [sda] 15628053168 512-byte logical blocks: (8.00 TB/7.28 TiB) Feb 13 12:38:59 siso kernel: [821251.177392] sd 0:0:0:0: Attached scsi generic sg0 type 0 Feb 13 12:38:59 siso kernel: [821251.178905] sd 0:0:0:0: [sda] 4096-byte physical blocks Feb 13 12:38:59 siso kernel: [821251.181271] sd 0:0:0:0: [sda] Write Protect is off Feb 13 12:38:59 siso kernel: [821251.182468] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA Feb 13 12:38:59 siso kernel: [821251.639420] sda: sda1 Feb 13 12:39:00 siso kernel: [821251.644867] sd 0:0:0:0: [sda] Attached SCSI disk
ちなみに、明示的なスキャンは以下のようにする。
# echo "- - -" > /sys/class/scsi_host/host0/scan
SATAの場合?、コマンドライン中のhost0というのがSATAポートに1対1で対応しているようだ。なので、入れ替えた分だけ対応するSATAポートをピンポイントで指定しなければならない。試した限りでは、認識済みのhostXをscanしても問題はなさそうなので、ポートとhostの対応がわからなければ全hostXをscanしてもよいだろう。
host0
の部分は適宜読み替えてくだしあ。sd 0:0:0:0
の最初の数字がHBA番号だと思われる。
興味本位で稼働中のFreeBSD VMに対し、qm set vmid -scsi0 /path/to/disk
でディスクを追加してみたら、ふつーにVM側でも追加が検出された。
VMのオプション設定で、ディスクのホットプラグが有効になってる必要があるとは思うが、VM側で仮想ディスクデタッチ→VM設定で仮想ディスクデタッチ→PVEで物理ディスクデタッチ、という流れでVMを動かしたままディスクのホットスワップができると思われる。
なお、VMのホットプラグはSCSIデバイスしか対応してないっぽい(virtio-scsiとの組み合わせで確認)。qm set vmid -sata0
で後付けしてもVM側では検出されなかった。