Proxmox VE 6.3でHDDをホットスワップ

  • ProxmoxVE 6.3-3

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側では検出されなかった。

  • virtualization/proxmox_ve_6_3_hotswap_hdd.txt
  • 最終更新: 2021-03-11 16:09
  • by Decomo