Como faço para o Linux reconhecer uma nova unidade SATA / dev / sda que executei a troca sem reinicializar?

35

O hot swap de uma unidade SATA / dev / sda com defeito funcionou bem, mas quando fui trocar uma nova unidade, ela não foi reconhecida:

[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

Eu tentei algumas coisas para fazer o servidor encontrar o novo / dev / sda, como rescan-scsi-bus.sh mas eles não funcionaram:

[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

Acabei de reiniciar o servidor. / dev / sda foi reconhecido, eu consertei o software RAID, e está tudo bem agora. Mas, da próxima vez, como posso fazer com que o Linux reconheça uma nova unidade SATA em que fiz a troca sem reinicializar?

O sistema operacional em questão é o RHEL5.3:

[root@fs-2 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.3 (Tikanga)

O disco rígido é um modelo Seagate Barracuda ES.2 SATA de 3,0 GB / s 500 GB, modelo ST3500320NS.

Aqui está a saída do 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)

Atualização : Em talvez uma dúzia de casos, fomos forçados a reiniciar servidores porque a troca a quente não "funcionou". Obrigado pelas respostas para ver mais sobre o controlador SATA. Eu incluí a saída lspci para o sistema problemático acima (hostname: fs-2). Eu ainda poderia usar alguma ajuda para entender o que exatamente não é suportado em termos de hardware em termos de hot swap para esse sistema. Por favor, deixe-me saber que outras saídas além do lspci podem ser úteis.

A boa notícia é que a troca a quente "acabou de funcionar" hoje em um de nossos servidores (hostname: www-1), o que é muito raro para nós. Aqui está a saída do 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)
    
por Philip Durbin 06.05.2009 / 16:47

11 respostas

40

Se o seu controlador SATA suportar hot swap, ele deve "apenas funcionar (tm)".

Para forçar uma nova varredura em um SCSI BUS (cada porta SATA mostra como um SCSI BUS) e encontrar novas unidades, você usará:

echo "0 0 0" >/sys/class/scsi_host/host<n>/scan

Acima, < n > é o número do BUS.

    
por 06.05.2009 / 17:01
17
echo "- - -" >/sys/class/scsi_host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.
    
por 07.12.2009 / 04:10
11

Quando uma unidade falha em algumas circunstâncias, o Linux não percebe que você realmente a extraiu fisicamente da matriz. Se você tem esse problema (como fiz esta manhã), você pode fazer o seguinte:

echo 1 > /sys/block/<devnode>/device/delete

Por exemplo no meu caso / dev / sda falhou e eu não queria reiniciar o servidor, então eu fiz:

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

Depois disso, a nova unidade (que já tinha sido fisicamente adicionada) ficou imediatamente visível.

Se não estiver visível neste ponto, você também pode fazer isso para forçar uma nova varredura:

echo "- – -" > /sys/class/scsi_host/host<n>/scan

Isso "- - -" é curingas para canal, id & LUN, respectivamente, para que você possa restringir a varredura a algum subconjunto, se desejar, especificando números.

Antes de começar, você também pode:

readlink /sys/block/<devnode>

Que mostrará o caminho com o número de host correto para fazer check-in / proc / scsi / scsi para desaparecimento após a remoção.

    
por 29.04.2013 / 00:57
7

Que tal isso (parece funcionar no Ubuntu):

sudo partprobe

    
por 05.11.2010 / 10:06
6

Eu não acredito que ninguém tenha mencionado o AHCI ainda ... seu controlador SATA tem que estar no modo AHCI para ativar o hot swap. Verifique isso olhando para o driver que você está usando:

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

Veja como está escrito "ahci" aqui.

Se isso não acontecer, basta ativá-lo na sua BIOS. Além disso, alguns BIOSses, especialmente em servidores ou UEFI, têm uma configuração "Hot Swap = ativado / desativado" por disco, que você também deve ativar se ele existir.

    
por 13.08.2015 / 20:09
2

Veja por que precisei reiniciar o computador ...

Eu acabei de fazer hot-swap no meu / dev / sdc. Eu usei scsiadd -r 3 0 0 para desligar o disco antigo antes de retirá-lo. Então, depois de instalar o novo disco, o novo disco não apareceu como / dev / sdc, mas como / dev / sdd. Após a reinicialização, o disco reapareceria como / dev / sdc novamente.

Então parece que o hotswap funciona Ok, pode ser que o / dev / sd * não seja mais o mesmo.

Esta pode ser uma resposta para o seu problema?

    
por 04.03.2011 / 11:52
1

Meu DVD na minha máquina do Fedora 16 está conectado a uma interface SATA. Estava trancado e não abriria nem fecharia. Executar o partprobe como root fez meu cdrom / DVD funcionar novamente. Eu acho que vai ajudar na máquina antera onde eu tenho o problema de troca de calor ocasional. Obrigado!

    
por 13.03.2012 / 05:01
1

O controlador SAS Fusion-MPT que você possui é um controlador RAID de baixo nível. Se você não estiver usando-o para RAID, ele ainda pode estar fornecendo uma camada inútil de obstrução / abstração.

Você pode precisar cutucar o controlador RAID com mpt-status ou lsiutil para fazer com que ele realmente examine o barramento.

O

link tem uma boa quantidade de documentação, mas não posso dizer que verifiquei.

    
por 21.01.2014 / 02:14
1

Em alguns casos, a troca a quente pode precisar ser ativada no BIOS da placa-mãe e / ou do controlador SATA. Isso depende completamente da marca e modelo de ambos, mas se você tiver controladores SATA on-board que devem suportar o hotswap, então vale a pena vasculhar o BIOS da placa-mãe. Os cartões SATA podem ou não ter suas próprias configurações de BIOS, muitas placas de menor valor não têm, mas os cartões de nível de servidor normalmente fazem isso.

Se bem me lembro, precisei disso com várias placas-mãe Gigabyte e talvez outras marcas. Eu precisava disso para uma bandeja SATA hot-swap funcionar; com o recurso desativado, a remoção da unidade não causou problemas, mas uma nova unidade não seria registrada até a reinicialização. Ativando a configuração como esperado, as unidades que foram colocadas na bandeja foram imediatamente ativadas e disponibilizadas para o SO.

    
por 30.12.2014 / 19:57
1

Eu sei que esta pergunta é antiga, mas tive algum sucesso que não vi relatado em outro lugar. Teve problemas semelhantes em um Dell Precision 380 hoje. Por fim, funcionou fazendo uma combinação dos seguintes itens:

echo "- - -" > /sys/class/scsi_host/host2/scan
echo 1 > /sys/class/scsi_device/2:0:0:0/device/reset
echo 1 > /sys/devices/pci0000:00/0000:00:1f.2/rescan
echo 1 > /sys/devices/pci0000:00/0000:00:1f.2/reset

AVISO: Isso também pode atrapalhar outros dispositivos ATA no sistema. Se você montou sistemas de arquivos nesses dispositivos, é provável que acabe mal. Minha situação não importava, mas a sua pode.

Exatamente quais dos comandos acima são necessários, e em que ordem, é desconhecido para mim neste momento. Alguns comandos podem precisar ser repetidos. Se eu tivesse que adivinhar, eu diria fazer na ordem mostrada acima, então outra varredura scsi_host novamente no final. Fiz mais algumas em minhas explorações.

O primeiro comando (scsi_host scan) diz à midlayer SCSI para escanear todos os barramentos para dispositivos novos / alterados. O segundo comando tenta redefinir o destino SCSI (dispositivo de disco). Os dois últimos estão trabalhando com o driver para o próprio controlador AHCI.

Eu encontrei os itens em questão principalmente por meio de exame detalhado e experimentos audazes.

Você pode combinar os nós scsi_device à marca e modelo do dispositivo com (usando grep para imprimir os nomes dos arquivos na frente do conteúdo):

grep . /sys/class/scsi_device/*/device/model

O primeiro dígito do ID do dispositivo SCSI deve ser o número scsi_host. Você pode então combinar os nós scsi_host aos nós de seus dispositivos com:

ls -l /sys/class/scsi_host

Eu suspeito que nunca vou ter a chance de me aperfeiçoar ainda mais, então eu queria compartilhar essa informação na esperança de aproximar os outros. Se eu obtiver mais informações, vou editar esta resposta para refletir.

Espero que isso ajude.

    
por 27.11.2017 / 23:36
0

Para o hotplug funcionar, você deve ter o módulo acpiphp carregado.

[root@example ~]# modprobe acpiphp

obviamente, se você quiser que isso funcione na inicialização, você terá que configurar isso para ser carregado no momento da inicialização - uma forma é criar / editar /etc/rc.modules (que é chamado pelo rc.sysinit) e adicionar a linha:

modprobe acpiphp

lembre-se de criar este arquivo para chmod + x, como é chamado dessa maneira.

    
por 24.02.2012 / 15:16