it-swarm-pt.tech

Como faço para o Linux reconhecer uma nova unidade SATA / dev / sda que eu troquei a quente sem reiniciar?

A troca a quente de uma unidade SATA/dev/sda com falha funcionou bem, mas quando fui trocar em uma nova unidade, ela não foi reconhecida:

[[email protected] ~]# 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:

[[email protected] ~]# echo "---" > /sys/class/scsi_Host/host0/scan
-bash: echo: write error: Invalid argument
[[email protected] ~]#
[[email protected] ~]# /root/rescan-scsi-bus.sh -l
[snip]
0 new device(s) found.
0 device(s) removed.
[[email protected] ~]#
[[email protected] ~]# ls /dev/sda
ls: /dev/sda: No such file or directory

Acabei reiniciando o servidor./dev/sda foi reconhecido, consertei o RAID do software e está tudo bem agora. Mas, da próxima vez, como posso fazer o Linux reconhecer uma nova unidade SATA em que troquei a quente sem reinicializar?

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

[[email protected] ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.3 (Tikanga)

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

Aqui está a saída lscpi:

[[email protected] ~]# 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 o hot swap não "apenas funcionou". Obrigado pelas respostas para pesquisar mais sobre o controlador SATA. Eu incluí a saída lspci para o sistema problemático acima (nome do host: 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 outra saída além de lspci pode ser útil.

A boa notícia é que o hot swap "apenas funcionou" hoje em um de nossos servidores (nome do host: www-1), o que é muito raro para nós. Aqui está a saída lspci:

[[email protected] ~]# 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)
44
Philip Durbin

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

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

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

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

45
user1797
echo "- - -" >/sys/class/scsi_Host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.
19
Noah

Quando uma unidade falha em algumas circunstâncias, o Linux não percebe que você realmente a retirou fisicamente da matriz. Se você tiver esse problema (como eu 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 fiz:

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

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

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

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

Esse "- - -" é um curinga para canal, ID e LUN, respectivamente, para que você possa restringir a varredura a algum subconjunto, se desejar, especificando os números.

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

readlink /sys/block/<devnode>

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

14
karora

Que tal isso (parece funcionar no Ubuntu):

Sudo partprobe

8
user59282

Não acredito que ninguém mencionou AHCI ainda ... seu controlador SATA precisa estar no modo AHCI para ativar o hot swap. Verifique isso olhando o driver que você está usando:

[email protected]:~ # 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

[email protected]:~ # readlink /sys/devices/pci0000:00/0000:00:11.0/driver
../../../bus/pci/drivers/ahci

[email protected]:~ # lspci -k | less
[... big long output... search for ahci or your pci address, or use the awk below ...]

[email protected]:~ # lspci -k | awk '$1 == "00:11.0" {x=1}; x && /in use/ {print $0; exit}'
    Kernel driver in use: ahci

Veja como ele diz "ahci" lá.

Caso contrário, ative-o no seu BIOS. Além disso, algumas BIOSs, especialmente em servidores ou UEFI, possuem uma configuração "Hot Swap = enabled/disabled" por disco, que você também deve habilitar se existir.

6
Peter

Aqui está o porquê eu precisava reiniciar o computador ...

Eu apenas troquei a quente meu/dev/sdc. Eu usei o scsiadd -r 3 0 0 para desligar o disco antigo antes de removê-lo. Depois de instalar o novo disco, o novo disco não apareceu como/dev/sdc, mas como/dev/sdd. Após uma reinicialização, o disco reapareceria como/dev/sdc novamente.

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

Esta poderia ser uma resposta para o seu problema?

2
Peter

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

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

http://hwraid.le-vert.net/wiki/LSIFusionMPT possui uma boa quantidade de documentação, mas não posso dizer que a verifiquei.

1
aij

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 integrados que deveriam suportam hotswap, vale a pena vasculhar o BIOS da placa-mãe. As placas SATA podem ou não ter suas próprias configurações de BIOS, muitas placas de gama baixa não, mas normalmente as placas de servidor.

Se bem me lembro, eu precisei disso com várias placas-mãe Gigabyte, e talvez outras marcas. Eu precisava disso para que uma bandeja SATA de troca a quente funcionasse; 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. Habilitando a configuração como esperado, as unidades colocadas na bandeja foram imediatamente ativadas e disponibilizadas para o sistema operacional.

1
STW

Meu DVD na minha máquina Fedora 16 está conectado a uma interface SATA. Estava trancado e não abria nem fechava. Executando partprobe como root, meu cdrom/DVD voltou a funcionar. Eu acho que isso vai ajudar na máquina de anteras onde eu tenho um problema ocasional de troca a quente. Obrigado!

1
Stuart Edge

Sei que essa pergunta é antiga, mas tive algum sucesso que não vi relatado em nenhum outro lugar. Teve problemas semelhantes em um Dell Precision 380 hoje. Eventualmente, conseguiu que ele funcionasse, fazendo uma combinação do seguinte:

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 interromper outros dispositivos ATA no sistema. Se você montou sistemas de arquivos nesses dispositivos, é provável que termine mal. Minha situação não se importava, mas a sua pode.

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

O primeiro comando (scsi_Host scan) informa ao midslayer do SCSI que varre 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.

Encontrei os itens em questão principalmente por meio de exames detalhados e experimentação ousada.

Você pode combinar nós scsi_device com a marca e o modelo do dispositivo (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 nós scsi_Host com os nós de seus dispositivos com:

ls -l /sys/class/scsi_Host

Eu suspeito que nunca vou ter a chance de refinar ainda mais, então eu queria compartilhar essas informações na esperança de aproximar os outros. Se eu receber mais informações, editarei esta resposta para refletir.

Espero que isto ajude.

1
Ben Scott

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

[[email protected] ~]# modprobe acpiphp

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

modprobe acpiphp

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

0
nox