热插拔一个失败的SATA / dev / sda驱动器工作正常,但是当我去交换一个新的驱动器时,它不被识别:
[root@fs-2 ~]# tail -18 /var/log/messages May 5 16:54:35 fs-2 kernel: ata1: exception Emask 0x10 SAct 0x0 SErr 0x50000 action 0xe frozen May 5 16:54:35 fs-2 kernel: ata1: SError: { PHYRdyChg CommWake } May 5 16:54:40 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0) May 5 16:54:45 fs-2 kernel: ata1: device not ready (errno=-16), forcing hardreset May 5 16:54:45 fs-2 kernel: ata1: soft resetting link May 5 16:54:50 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0) May 5 16:54:55 fs-2 kernel: ata1: SRST failed (errno=-16) May 5 16:54:55 fs-2 kernel: ata1: soft resetting link May 5 16:55:00 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0) May 5 16:55:05 fs-2 kernel: ata1: SRST failed (errno=-16) May 5 16:55:05 fs-2 kernel: ata1: soft resetting link May 5 16:55:10 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0) May 5 16:55:40 fs-2 kernel: ata1: SRST failed (errno=-16) May 5 16:55:40 fs-2 kernel: ata1: limiting SATA link speed to 1.5 Gbps May 5 16:55:40 fs-2 kernel: ata1: soft resetting link May 5 16:55:45 fs-2 kernel: ata1: SRST failed (errno=-16) May 5 16:55:45 fs-2 kernel: ata1: reset failed, giving up May 5 16:55:45 fs-2 kernel: ata1: EH complete
我尝试了一些东西,使服务器find新的/ dev / sda,如rescan-scsi-bus.sh,但他们没有工作:
[root@fs-2 ~]# echo "---" > /sys/class/scsi_host/host0/scan -bash: echo: write error: Invalid argument [root@fs-2 ~]# [root@fs-2 ~]# /root/rescan-scsi-bus.sh -l [snip] 0 new device(s) found. 0 device(s) removed. [root@fs-2 ~]# [root@fs-2 ~]# ls /dev/sda ls: /dev/sda: No such file or directory
我结束了重新启动服务器。 / dev / sda被识别了,我修好了软件RAID,现在一切正常。 但下一次, 我如何才能让Linux识别出一个新的SATA驱动器,我已经热插拔而无需重新启动?
有问题的操作系统是RHEL5.3:
[root@fs-2 ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.3 (Tikanga)
硬盘是希捷Barracuda ES.2 SATA 3.0-Gb / s 500-GB,型号ST3500320NS。
这是lscpi输出:
[root@fs-2 ~]# lspci 00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller (rev a2) 00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev a3) 00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a3) 00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller (rev a1) 00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller (rev a2) 00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1) 00:05.0 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3) 00:05.1 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3) 00:05.2 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3) 00:06.0 PCI bridge: nVidia Corporation MCP55 PCI bridge (rev a2) 00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3) 00:09.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3) 00:0a.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:0b.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:0c.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:0d.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:0e.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:0f.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration 00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map 00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller 00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control 00:19.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration 00:19.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map 00:19.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller 00:19.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control 03:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02) 04:00.0 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06) 04:00.1 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)
更新 :在很多情况下,我们被迫重启服务器,因为热交换没有“正常工作”。 感谢您的答案,看更多的SATA控制器。 我已经包括上面有问题的系统的lspci输出(主机名:fs-2)。 我仍然可以使用一些帮助来理解硬件方面不支持该系统的热插拔。 请让我知道除了lspci之外还有什么其他的输出可能是有用的。
好消息是今天在我们的一台服务器(主机名:www-1)上“热切换”了,这对我们来说是非常罕见的。 这是lspci输出:
[root@www-1 ~]# lspci 00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller (rev a2) 00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev a3) 00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a3) 00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller (rev a1) 00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller (rev a2) 00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1) 00:05.0 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3) 00:05.1 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3) 00:05.2 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3) 00:06.0 PCI bridge: nVidia Corporation MCP55 PCI bridge (rev a2) 00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3) 00:09.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3) 00:0b.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:0c.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:0f.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3) 00:18.0 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] HyperTransport Configuration 00:18.1 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Address Map 00:18.2 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] DRAM Controller 00:18.3 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Miscellaneous Control 00:18.4 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Link Control 00:19.0 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] HyperTransport Configuration 00:19.1 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Address Map 00:19.2 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] DRAM Controller 00:19.3 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Miscellaneous Control 00:19.4 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Link Control 03:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02) 04:00.0 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06) 04:00.1 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06) 09:00.0 SCSI storage controller: LSI Logic / Symbios Logic SAS1064ET PCI-Express Fusion-MPT SAS (rev 04)
如果您的SATA控制器支持热插拔,则应该“正常工作(tm)”。
要强制重新扫描SCSI总线(每个SATA端口显示为SCSI总线)并find新的驱动器,您将使用:
echo "0 0 0" >/sys/class/scsi_host/host<n>/scan
在上面, <n>是总线号码。
echo "- - -" >/sys/class/scsi_host/host<n>/scan ^ ^ \_\_______ note spaces between the dashes.
当一个驱动器在某些情况下失败时,Linux不会意识到你实际上是从arrays中拉出来的。 如果你有这个问题(就像我今天上午所做的那样),你可以这样做:
echo 1 > /sys/block/<devnode>/device/delete
例如在我的情况下/ dev / sda失败了,我不想重启服务器,所以我做了:
echo 1 > /sys/block/sda/device/delete
当我这样做后,新的驱动器(实际上已经实际添加了)立即可见。
如果此时不可见,您也可以执行此操作来强制重新扫描:
echo "- – -" > /sys/class/scsi_host/host<n>/scan
这个“ – – – ”分别是channel,id和LUN的通配符,所以你可以通过指定数字来限制扫描到一些子集。
在开始之前,您还可以:
readlink /sys/block/<devnode>
这将显示正确的主机号码的path,以检查/ proc / scsi / scsi消失后删除。
怎么样(似乎在Ubuntu的工作):
sudo partprobe
我不能相信没有人提到AHCI,但是您的SATA控制器必须处于AHCI模式才能启用热插拔。 通过查看您正在使用的驱动程序来检查:
root@peter:~ # find /sys -name sdk /sys/devices/pci0000:00/0000:00:11.0/ata5/host4/target4:0:0/4:0:0:0/block /sdk /sys/block/sdk /sys/class/block/sdk root@peter:~ # readlink /sys/devices/pci0000:00/0000:00:11.0/driver ../../../bus/pci/drivers/ahci root@peter:~ # lspci -k | less [... big long output... search for ahci or your pci address, or use the awk below ...] root@peter:~ # lspci -k | awk '$1 == "00:11.0" {x=1}; x && /in use/ {print $0; exit}' Kernel driver in use: ahci
看看它是如何说“ahci”那里。
如果没有,那么只需在您的BIOS中启用它。 此外,某些BIOS(特别是服务器或UEFI)上的每个磁盘都有一个“热交换=启用/禁用”设置,如果存在,也应该启用。
这就是为什么我需要重新启动计算机…
我只是热插拔我的/ dev / sdc。 我已经使用scsiadd -r 3 0 0closures旧磁盘,然后再拔出。 然后,在安装新磁盘后,新磁盘不会显示为/ dev / sdc,而是显示为/ dev / sdd。 重新启动后,磁盘会再次以/ dev / sdc的forms出现。
所以看起来hotswap工作好吧,可能只是/ dev / sd *是不一样的。
这可以解决您的问题吗?
我的Fedora 16机器上的DVD连接到SATA接口。 它被锁起来,不会打开或closures。 以root身份运行partprobe让我的CD / DVD再次工作。 我认为这将有助于另一台机器,我偶尔会遇到热插拔问题。 谢谢!
要使热插拔工作,您必须加载acpiphp模块。
[root@example ~]# modprobe acpiphp
显然,如果你想让它在启动时工作,你必须将它configuration为在启动时加载 – 一种方法是创build/编辑/etc/rc.modules(由rc.sysinit调用)并添加以下行:
modprobe acpiphp
记住如果你创build这个文件到chmod + x它,就像这样调用它。
您所拥有的Fusion-MPT SAS控制器是低端RAID控制器。 如果你不使用它的RAID,它可能仍然是提供一个无用的阻碍/抽象层。
您可能需要使用mpt-status或lsiutil来访问RAID控制器,才能实际扫描总线。
http://hwraid.le-vert.net/wiki/LSIFusionMPT有很多文档,但是我不能说我已经validation过了。
在某些情况下,可能需要在主板和/或SATA控制器的BIOS上启用热插拔。 这完全取决于两者的品牌和型号,但如果你有板载SATA控制器, 应该支持热插拔,那么值得梳理主板BIOS。 SATA卡可能有也可能没有自己的BIOS设置,许多低端卡没有,但是服务器级卡通常是这样做的。
如果我记得正确的话,我需要一些技嘉主板,也许还有一些其他的。 我需要一个热插拔SATA托盘来工作; 与禁用function删除驱动器不会导致问题,但一个新的驱动器将不会注册,直到重新启动。 启用设置按预期工作,放置在托盘中的驱动器立即启动并可用于操作系统。