始める前に
Linux の NVMe ホットプラグでは適切な MPS (MaxPayloadSize) および MRR (MaxReadRequest) を取得するため、カーネルブート引数 "pci=pcie_bus_perf" の設定が必要になります。この引数がないと致命的なエラーが発生します。
オペレーティングシステムが NVMe ドライブとして認識している仮想 PCIe スロットの一覧は、NVMe Storage Drive Virtual PCIe Slot Designationを参照してください。仮想 PCIe スロット名はサーバーのフロントパネルのラベルに記載されている名前と一致しません。
# find /sys/devices |egrep 'nvme[0-9][0-9]?$'
このコマンドにより、次のような出力が返されます。
/sys/devices/pci0000:00/0000:00:02.2/0000:10:00.0/0000:11:04.0/0000:12:00.0/misc/nvme0 /sys/devices/pci0000:00/0000:00:02.2/0000:10:00.0/0000:11:05.0/0000:13:00.0/misc/nvme1 /sys/devices/pci0000:00/0000:00:02.2/0000:10:00.0/0000:11:06.0/0000:14:00.0/misc/nvme2 /sys/devices/pci0000:00/0000:00:02.2/0000:10:00.0/0000:11:07.0/0000:15:00.0/misc/nvme3
たとえば、0000:12:00.0 はシステムフロントパネル上で NVMe0 というラベルの付いたドライブの PCIe アドレスに対応します。
# egrep -H '.*' /sys/bus/pci/slots/*/address
このコマンドにより、次のような出力が返されます。
/sys/bus/pci/slots/100/address:0000:12:00 /sys/bus/pci/slots/101/address:0000:13:00 /sys/bus/pci/slots/102/address:0000:14:00 /sys/bus/pci/slots/103/address:0000:15:00
たとえば、PCIe アドレス 0000:12:00.0 はシステムフロントパネル上で NVMe0 というラベルの付いたドライブの PCIe スロット番号 (100) に対応します。
Linux の場合、NVMe ドライブは /dev/sd* のような標準のブロック型デバイスラベルを使用しません。たとえば、単一の名前空間ブロック型デバイスを持つ NVMe ドライブ 0 は /dev/nvme0n1 となります。この名前空間をフォーマットして単一パーティションでパーティション化した場合、/dev/nvme0n1p1 となります。
デバイスが LVM ボリュームグループのメンバーの場合、pvmove コマンドを使用してデバイスからデータを移動してから、vgreduce コマンドを使用して物理ボリュームを削除して、(オプションで) pvremove を使用してディスクから LVM メタデータを削除する必要があることがあります。
# echo 0 > /sys/bus/pci/slots/slot_number/power
slot_number は PCIe スロット番号です (例: 100 はシステムフロントパネル上で NVMe0 のラベルが付いたドライブを表します)。