HDDのホットスワップ

 RAID arrayの不良HDD交換作業とその都合でのRAID再構築があったのでその作業の備忘録として、幾つかの作業の記録を残していきます。今回はPCの電源を入れたままHDDを入れ替えるホットスワップに挑戦します。
 対象となるHDDは/dev/sdaです。

 まず、取り外すHDDの情報を控えます。dmesgでカーネルが認識したときの情報を拾い上げるか、lsscsiを用いてSCSIアダプタ番号(ホスト番号)を控えます。

# lsscsi
[0:0:0:0]    disk    ATA      WDC WD30EZRX-00D 0A80  /dev/sda
(以下略)

 この[0:0:0:0]は[host:bus:target:lun]の並びで、後ほどhost番号を使うので控えておいてください。

取り外すHDDのI/Oフラッシュ

 HDDへの操作がキャッシュされたまま残っていると不具合が出るかもしれないので、I/Oバッファの書き出しを行います。今回は不良HDDの交換ですので必要は無いとは思いますが、何かのプロセスがデバイスを握っていないかの確認でもあります。

 RAIDのarrayから外したり、マウントされているドライブであればumountを行います。その後、描きのコマンドで握っているプロセスが無いか確認をします。

# lsof /dev/sda

 デバイスを握っているプロセスが無い事を確認し、bufferをflushさせます。

# blockdev --flushbufs /dev/sda

取り外すHDDのSCSI subsystemからの削除

 次にHDDをカーネルの管理から外し、システムから削除します。

# echo 1 > /sys/block/sda/device/delete

 この操作でドライブが管轄下から消えているはずです。lsblklsscsi等でドライブ(/dev/sda)自体が無くなっていることを確認してください。

HDDの取り外しと取り付け

 システムとしては以上で取り外しが可能です。電気製品的に通電のままで抜き差しが可能かどうかは対象の製品によるところはありますが、マザーボードによってはBIOS/UEFIでSATAの設定として選択が可能のようです。それぞれ確認してみてください。

 取り付けも同様です。

新規HDDの認識

 今回はスワップなので、取り外したコントローラに新規HDDが取り付けられたという前提です。

 最初にdmesgで見たように、host0に接続されているとします。

# echo "- - -" > /sys/class/scsi_host/host0/scan

 これで、新規HDDが認識されます。ただ、/dev/sdaとして再認識されるのでは無く/dev/sdfなどの新規HDDとして認識されます。再起動後は/dev/sdaに戻りますので、各種操作・設定はUUID等での指定が楽かと思われます。

 ちなみに、これらのコマンド操作はスクリプト化されより簡便に使えるようになって至ります。Debianであればsg3-utilsパッケージ含まれるrescan-scsi-bus.shがそれに該当します。

コメント