it-swarm-es.com

¿Cómo hago para que Linux reconozca una nueva unidad SATA / dev / sda que cambié en caliente sin reiniciar?

El intercambio en caliente de una unidad SATA/dev/sda fallida funcionó bien, pero cuando fui a cambiar una nueva unidad, no se reconoció:

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

Intenté un par de cosas para hacer que el servidor encuentre el nuevo/dev/sda, como rescan-scsi-bus.sh pero no funcionaron:

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

Terminé reiniciando el servidor./dev/sda fue reconocido, arreglé el RAID de software, y todo está bien ahora. Pero para la próxima vez, ¿cómo puedo hacer que Linux reconozca una nueva unidad SATA que he intercambiado en caliente sin reiniciar?

El sistema operativo en cuestión es RHEL5.3:

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

El disco duro es un Seagate Barracuda ES.2 SATA 3.0-Gb/s 500-GB, modelo ST3500320NS.

Aquí está la salida de 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)

Actualización : En quizás una docena de casos, nos hemos visto obligados a reiniciar los servidores porque el intercambio en caliente no "ha funcionado". Gracias por las respuestas para mirar más en el controlador SATA. He incluido la salida lspci para el sistema problemático anterior (nombre de host: fs-2). Todavía podría usar algo de ayuda para comprender qué es exactamente lo que no es compatible con el hardware en términos de intercambio en caliente para ese sistema. Avíseme qué otra salida, además de lspci, podría ser útil.

La buena noticia es que el intercambio en caliente "simplemente funcionó" hoy en uno de nuestros servidores (nombre de host: www-1), lo cual es muy raro para nosotros. Aquí está la salida de 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

Si su controlador SATA admite el intercambio en caliente, "debería funcionar (tm)".

Para forzar una nueva exploración en un BUS SCSI (cada puerto SATA se muestra como un BUS SCSI) y buscar nuevas unidades, utilizará:

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

En lo anterior, <n> es el número de BUS.

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

Cuando una unidad ha fallado en algunas circunstancias, Linux no se dará cuenta de que la ha extraído físicamente de la matriz. Si tiene ese problema (como lo hice esta mañana) puede hacer lo siguiente:

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

P.ej. en mi caso/dev/sda había fallado y no quería reiniciar el servidor, así que hice:

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

Después de hacer eso, la nueva unidad (que ya se había agregado físicamente) fue inmediatamente visible.

Si no está visible en este punto, también puede hacer esto para forzar un nuevo escaneo:

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

Ese "- - -" son comodines para canal, id y LUN respectivamente, por lo que puede restringir el escaneo a algún subconjunto si lo desea especificando números en su lugar.

Antes de comenzar, también podría:

readlink /sys/block/<devnode>

Lo que le mostrará la ruta con el número de Host correcto para registrar/proc/scsi/scsi para la desaparición después de la eliminación.

14
karora

¿Qué tal esto (parece funcionar en Ubuntu):

Sonda parcial de sudo

8
user59282

No puedo creer que nadie haya mencionado AHCI todavía ... su controlador SATA tiene que estar en modo AHCI para habilitar el intercambio en caliente. Verifique esto mirando el controlador que está utilizando:

[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

Mira cómo dice "ahci" allí.

Si no es así, habilítelo en su BIOS. Además, algunos BIOS, especialmente en servidores o UEFI tienen una configuración "Hot Swap = habilitado/deshabilitado" por disco que también debe habilitar si existe.

6
Peter

He aquí por qué necesitaba reiniciar la computadora ...

Acabo de cambiar mi/dev/sdc. He usado scsiadd -r 3 0 0 para apagar el disco viejo antes de sacarlo. Luego, después de instalar el nuevo disco, el nuevo disco no apareció como/dev/sdc sino como/dev/sdd. Después de reiniciar, el disco volvería a aparecer como/dev/sdc nuevamente.

Parece que hotswap funciona Ok, puede ser que/dev/sd * ya no sea el mismo.

¿Podría ser esta una respuesta a tu problema?

2
Peter

El controlador Fusion-MPT SAS que tiene es un controlador RAID de gama baja. Si no lo está utilizando para RAID, aún puede proporcionar una capa inútil de obstrucción/abstracción.

Es posible que deba tocar el controlador RAID con mpt-status o lsiutil para que realmente escanee el bus.

http://hwraid.le-vert.net/wiki/LSIFusionMPT tiene una buena cantidad de documentación, pero no puedo decir que la haya verificado.

1
aij

En algunos casos, es posible que sea necesario habilitar el intercambio en caliente en el BIOS de la placa base y/o el controlador SATA. Esto depende completamente de la marca y el modelo de ambos, pero si tiene controladores SATA integrados que deberían admitir hotswap, entonces vale la pena revisar el BIOS de la placa base. Las tarjetas SATA pueden o no tener su propia configuración de BIOS, muchas tarjetas de gama baja no, pero las tarjetas de grado de servidor suelen tener.

Si recuerdo correctamente, he necesitado esto con varias placas base Gigabyte, y tal vez algunas otras marcas. Lo necesitaba para que funcionara una bandeja SATA de intercambio en caliente; con la función desactivada, la eliminación de la unidad no causó problemas, pero una nueva unidad no se registraría hasta el reinicio. Al habilitar la configuración funcionó como se esperaba, las unidades que se colocaron en la bandeja se activaron de inmediato y estuvieron disponibles para el sistema operativo.

1
STW

Mi DVD en mi máquina Fedora 16 está conectado a una interfaz SATA. Estaba cerrado y no se abriría ni cerraría. Ejecutando partprobe como root hizo que mi cdrom/DVD volviera a funcionar. Creo que ayudará en otras máquinas donde tengo el problema ocasional de intercambio en caliente. ¡Gracias!

1
Stuart Edge

Sé que esta pregunta es antigua, pero tuve cierto éxito que no vi reportado en otra parte. Tuve problemas similares en una Dell Precision 380 hoy. Finalmente lo puse a trabajar haciendo una combinación de lo siguiente:

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

ADVERTENCIA: Esto también puede interrumpir otros dispositivos ATA en el sistema. Si ha montado sistemas de archivos en esos dispositivos, es probable que eso termine mal. A mi situación no le importaba, pero a la tuya sí.

Exactamente cuál de los comandos anteriores son necesarios, y en qué orden, es desconocido para mí en este momento. Algunos comandos pueden necesitar ser repetidos. Si tuviera que adivinar, diría que haga en el orden que se muestra arriba, luego otra exploración scsi_Host nuevamente al final. Hice bastantes más en mis exploraciones.

El primer comando (scsi_Host scan) le dice a la capa intermedia SCSI que escanee todos los buses en busca de dispositivos nuevos/modificados. El segundo comando intenta restablecer el objetivo SCSI (dispositivo de disco). Los dos últimos están trabajando con el controlador para el controlador AHCI.

Encontré los artículos en cuestión principalmente mediante un examen detallado y una audaz experimentación.

Puede hacer coincidir los nodos scsi_device con la marca y el modelo del dispositivo (usando grep para imprimir los nombres de los archivos delante del contenido):

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

El primer dígito de la ID del dispositivo SCSI debe ser el número scsi_Host. Luego puede hacer coincidir los nodos scsi_Host con los nodos de sus dispositivos con:

ls -l /sys/class/scsi_Host

Sospecho que nunca tendré la oportunidad de refinar más, por lo que quería compartir esta información con la esperanza de acercar a otros. Si obtengo más información, editaré esta respuesta para reflexionar.

Espero que esto ayude.

1
Ben Scott

Para que hotplug funcione, debe tener cargado el módulo acpiphp.

[[email protected] ~]# modprobe acpiphp

obviamente, si desea que esto funcione en el arranque, tendrá que configurarlo para que se cargue en el momento del arranque; una forma es crear/editar /etc/rc.modules (que es llamado por rc.sysinit) y agregar la línea:

modprobe acpiphp

recuerde si crea este archivo en chmod + x, como se llama de esa manera.

0
nox