热插拔磁盘识别

案例

本案例是处理故障磁盘 /dev/sdh ,先下线磁盘之后,维修替换新磁盘,然后再识别磁盘

df -h
...
/dev/sdg1             1.8T  568G  1.3T  31% /mnt/disk6
/dev/sdh1             1.8T  568G  1.3T  31% /mnt/disk7
/dev/sdi1             1.8T  566G  1.3T  31% /mnt/disk8
...

卸载磁盘方法

  • 首先将文件系统卸载

sudo umount /mnt/disk7
  • 此时已经可以安全拔掉故障磁盘 /dev/sdh 了。不过,为了更为小心些,可以执行以下命令,将磁盘设备从内核中注销掉

echo 1 > /sys/block/sdh/device/delete

上述步骤可以确保当拔除磁盘/dev/sdh时没有进程在使用该设备。此时你会听到磁盘磁头停止(park)的声音,此时内核已经告知磁盘准备断电。如果你使用的是AHCI控制器,它可以自行处理设备拔出响应操作,所以会非常顺畅。

识别新添加的磁盘

当新磁盘插入,需要在操作系统中扫描识别磁盘。

检查磁盘

可以看到磁盘添加以后并没有被识别出来,没有找到新磁盘。

  • 强制SCSI BUS扫描和发现设备

要明确知道自己的设备SCSI BUS编号,可以使用如下命令 - 参考[Rescanning your SCSI bus to see new storage](https://blogs.it.ox.ac.uk/oxcloud/2013/03/25/rescanning-your-scsi-bus-to-see-new-storage/)

可以看到输出如下

所以这里就证明使用的设备是 host0

使用以下命令扫描新添加的设备

这里<n>是SCSI BUS的编号。可以看到前面案例的SCSI BUS是0,所以这里使用命令

"- - -"表示所有的控制器,所有的通道和所有的LUN

不过上述命令没有生效,再次使用 lsscsi 还是看不到设备。

参考 Vmware Linux Guest Add a New Hard Disk Without Rebooting Guest

要想知道SCSI的路径,可以通过命令 cat /proc/scsi/scsi 检查详细的通道

可以看到依然没有识别磁盘。

参考文档How do I make Linux recognize a new SATA /dev/sda drive I hot swapped in without rebooting?提到需要在BIOS中激活Hot Swap = enabled/disabled,否则不能识别新添加的磁盘。

不过在buzilla.kernel.org #11619 中提出了 kernels >= 2.6.37 不再出现这个问题。

使用lsiutil

参考 LSI Fusion MPT SAS

LSI提供了一个工具用来处理其提供的存储设备卡 - lsiutil

但是扫描以后依然没有识别出设备 0 7 0 (B T L),对于操作系统来说,还是没有看到 `/dev/sdh

对于lsiutil工具,交互命令80是用来Set port offline的,赌赢有一个81Set port online,但是我尝试了失败

sas2ircu 工具

sas2ircu 是LSI提供的工具进行卷管理的工具,不过没有使用RAID卷可能无法使用

  • 检查LSI存储卡

显示输出

没有建立RAID似乎无法使用

参考

Last updated

Was this helpful?