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

41

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:

[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 o 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 reiniciando o servidor. / dev / sda foi reconhecido, consertei o software RAID e agora está tudo bem. Mas, da próxima vez, como posso fazer o Linux reconhecer uma nova unidade SATA na qual troquei a quente sem reinicializar?

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

[root@fs-2 ~]# 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:

[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 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:

[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)
Philip Durbin
fonte
Eu verificaria o status do seu controlador SATA na versão do kernel Linux que você está usando. Pode ser um bug ou uma planície não suportada #
Nathan #
0 era o número do BUS ou 1?
3
Era o barramento 0. / sys / class / scsi_host contém host0 a host5. dmesg mostra ata1 a ata6. corresponde a ATA1 host0, corresponde ao Anfitrião1 ata2, etc
Philip Durbin

Respostas:

43

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 é exibida 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 barramento.


fonte
Desculpe, sem alegria; executar esse comando apenas aciona a mesma nova verificação automática que é acionada quando eu conecto a unidade inicialmente. Obrigado, no entanto!
21711 hakamadare
É bem possível que algumas configurações precisem ser feitas no controlador RAID para que ele veja o disco. No meu caso, foi necessário adicionar o novo disco novamente ao ataque.
MikeKulls
Recebo permissão negada, mesmo ao usar sudoe ao alternar para o usuário root.
68568 Aaron Franke
No meu sistema que inicializou a partir de um SSD NVMe, isso funcionou para detectar um HD SATA recém-conectado. Eu uso powertoppara deixar mais coisas desligar, então talvez a porta SATA na qual eu liguei a unidade estivesse totalmente adormecida. (O sistema possui uma unidade óptica SATA conectada e detectada na inicialização, mas provavelmente estava adormecida também.) Como outros sugerem, para evitar a redefinição do link SATA para unidades ativas, descubra quais hostIDs já estão em uso e não scanaqueles , apenas aquele em que você conectou uma nova unidade. (Ou qualquer outro que não seja usado, se você não souber a numeração.)
Peter Cordes
18
echo "- - -" >/sys/class/scsi_host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.

fonte
5
Tenha cuidado com isso: o dmesg mostrou que redefiniu todos os meus links SATA. Possivelmente vale a pena testar antes de executá-lo na produção e perder toneladas de gravações.
Ivan Kozik
12

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ã), faça 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 verificar / proc / scsi / scsi se há desaparecimento após a remoção.

karora
fonte
7

Que tal isso (parece funcionar no Ubuntu):

sudo partprobe


fonte
Você também pode precisar do 'yum install parted'
Antonio
partedFTW ... você deve conhecê-lo bem além dos suspeitos habituais, como fdisk, gdisk, cgdisk, testdisk.
Sj #
6

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:

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 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.

Pedro
fonte
11
Você é meu novo melhor amigo: D
allyourcode 4/16
2

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

Troquei meu / dev / sdc a quente. Usei o scsiadd -r 3 0 0 para desligar o disco antigo antes de retirá-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?

Pedro
fonte
Hmmm, bem, o rescan-scsi-bus.sh já funciona em / proc / scsi / scsi, assim como o scsiadd parece. De qualquer maneira, estamos tentando um fornecedor de servidor diferente, portanto talvez a troca a quente "funcione" para nós no futuro.
precisa
4
Sim, você não pode contornar isso, perto do que eu posso dizer. É por isso que você usa etiqueta de disco ou UUID e monta seu fs por isso (manualmente ou no fstab), você pode configurá-lo e, em seguida, ele não muda. O único truque é fazer com que o seu carregador de inicialização seja instalado na nova unidade, mas ainda funcione quando ele é reiniciado, apesar de algumas experiências rápidas com o GRUB (eu estava substituindo sda em uma máquina por sd [a, b, c, d] e software raid1 para toda a parte do sistema do fs).
Ronald Pottol
11
Você nunca deve usar os dispositivos / dev / sd * em arquivos de configuração como o fstab. Você nunca deve assumir que os nomes são sempre os mesmos. Em vez disso, você deve usar a sintaxe UUID = ... (sem aspas), como você vê no man fstab. Para descobrir o UUID, use o comando blkid. (como alternativa, você pode preferir o rótulo ou o ID; veja também / dev / disk / by- *) #
Peter Peter
1

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

Stuart Edge
fonte
1

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 fazer com 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.

aij
fonte
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 integrados que devem suportar 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 precisava 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.

STW
fonte
Acabei de verificar uma máquina interna que eu sei que tinha isso; está executando uma placa-mãe Gigabyte Z77X-UD3H com controladores Marvell 88SE9172 e Intel 7 Series / C210 integrados
STW
1

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, não me são conhecidos no momento. Alguns comandos podem precisar ser repetidos. Se eu tivesse que adivinhar, eu diria fazer na ordem mostrada acima, então outra scsi_host varre novamente no final. Fiz mais algumas em minhas explorações.

O primeiro comando (scsi_host scan) instrui o midlayer SCSI a verificar todos os barramentos em busca de 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 os nós scsi_host com os nós dos 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.

Ben Scott
fonte
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, 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.

nox
fonte
Interessante. Eu nunca tinha ouvido falar de acpiphp. Obrigado. Parece significar Configuração avançada e Hot Interface PCI Hot Plug. O PCI é a interconexão de componentes periféricos, é claro.
Philip Durbin
2
O acpiphp é para hotplug PCI, ou seja, para adicionar e remover placas PCI a quente . Alguns sistemas caros suportam isso. E também muitos hipervisores.
Derobert