====== 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を切り離し対象のディスクとする。
==== FSのアンマウント ====
ホットスワップ対象のディスクをアンマウントする。
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番号だと思われる。
===== 参考:稼働中のVMでホットスワップ =====
興味本位で稼働中のFreeBSD VMに対し、''qm set vmid -scsi0 /path/to/disk''でディスクを追加してみたら、ふつーにVM側でも追加が検出された。
VMのオプション設定で、ディスクのホットプラグが有効になってる必要があるとは思うが、VM側で仮想ディスクデタッチ→VM設定で仮想ディスクデタッチ→PVEで物理ディスクデタッチ、という流れでVMを動かしたままディスクのホットスワップができると思われる。
なお、VMのホットプラグはSCSIデバイスしか対応してないっぽい(virtio-scsiとの組み合わせで確認)。''qm set vmid -sata0''で後付けしてもVM側では検出されなかった。
===== 参考サイト =====
* [[https://piro791.blog.ss-blog.jp/2010-08-20|LinuxでHDDをホットリリース(電源切らずにディスクを抜き取る):ぴろにっき:SSブログ]]
* [[https://takuya-1st.hatenablog.jp/entry/2016/12/19/205950|SATAの物理HDDをホットリリース(取り外し可能)にするホットプラグで抜き差し対応 - それマグで!]]