====== 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をホットリリース(取り外し可能)にするホットプラグで抜き差し対応 - それマグで!]]