sviluppo-web-qa.it

Come faccio a far riconoscere a Linux una nuova unità SATA / dev / sda in cui ho sostituito a caldo senza riavviare?

Lo scambio a caldo di un'unità SATA/dev/sda guasta ha funzionato bene, ma quando sono andato a scambiare una nuova unità, non è stato riconosciuto:

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

Ho provato un paio di cose per far trovare al server il nuovo/dev/sda, come rescan-scsi-bus.sh ma non hanno funzionato:

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

Ho finito per riavviare il server./dev/sda è stato riconosciuto, ho corretto il software RAID e ora tutto è a posto. Ma per la prossima volta, come posso fare in modo che Linux riconosca una nuova unità SATA in cui ho effettuato l'hot swap senza riavviare?

Il sistema operativo in questione è RHEL5.3:

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

Il disco rigido è un Seagate Barracuda ES.2 SATA 3.0-Gb/s 500 GB, modello ST3500320NS.

Ecco l'output di 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)

Aggiornamento : in forse una dozzina di casi, siamo stati costretti a riavviare i server perché hot swap non "ha appena funzionato". Grazie per le risposte a guardare di più nel controller SATA. Ho incluso l'output lspci per il sistema problematico sopra (nome host: fs-2). Potrei ancora usare un po 'di aiuto per capire cosa non è esattamente supportato dal punto di vista hardware in termini di hot swap per quel sistema. Per favore fatemi sapere quali altri output oltre a lspci potrebbero essere utili.

La buona notizia è che hot swap "ha funzionato" oggi su uno dei nostri server (nome host: www-1), il che è molto raro per noi. Ecco l'output di 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 il tuo controller SATA supporta hot swap, dovrebbe "funzionare (tm)".

Per forzare una nuova scansione su un BUS SCSI (ogni porta SATA viene visualizzata come BUS SCSI) e trovare nuove unità, dovrai utilizzare:

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

Quanto sopra, <n> è il numero BUS.

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

Quando un disco si guasta in alcune circostanze, Linux non capirà di averlo effettivamente estratto fisicamente dall'array. Se hai questo problema (come ho fatto stamattina) puoi fare quanto segue:

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

Per esempio. nel mio caso/dev/sda era fallito e non volevo riavviare il server, quindi ho fatto:

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

Dopo averlo fatto, il nuovo disco (che era già stato aggiunto fisicamente) era immediatamente visibile.

Se non è visibile a questo punto, puoi anche farlo per forzare una nuova scansione:

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

Quel "- - -" è jolly per canale, id e LUN rispettivamente, quindi puoi limitare la scansione ad alcuni sottoinsiemi, se lo desideri, specificando invece i numeri.

Prima di iniziare, puoi anche:

readlink /sys/block/<devnode>

Che ti mostrerà il percorso con il giusto numero di Host per archiviare/proc/scsi/scsi per la scomparsa dopo la rimozione.

14
karora

Che ne dici di questo (sembra funzionare in Ubuntu):

Sudo partprobe

8
user59282

Non riesco a credere che nessuno abbia ancora menzionato AHCI ... il tuo controller SATA deve essere in modalità AHCI per abilitare l'hot swap. Controlla questo guardando il driver che stai 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

Guarda come dice "ahci" lì.

In caso contrario, abilitalo nel BIOS. Inoltre, alcuni BIOS, specialmente su server o UEFI, hanno un'impostazione "Hot Swap = abilitato/disabilitato" per disco che dovresti abilitare anche se esiste.

6
Peter

Ecco perché avevo bisogno di riavviare il computer ...

Ho appena cambiato il mio/dev/sdc. Ho usato scsiadd -r 3 0 0 per spegnere il vecchio disco prima di estrarlo. Quindi, dopo aver installato il nuovo disco, il nuovo disco non appariva come/dev/sdc ma piuttosto/dev/sdd. Dopo un riavvio, il disco riapparirà nuovamente come/dev/sdc.

Quindi sembra che l'hotswap funzioni Ok, potrebbe essere solo che/dev/sd * non sia più lo stesso.

Potrebbe essere una risposta al tuo problema?

2
Peter

Fusion-MPT SAS che hai è un controller RAID di fascia bassa. Se non lo usi per RAID, potrebbe comunque fornire uno strato inutile di ostruzione/astrazione.

Potrebbe essere necessario colpire il controller RAID con stato mpt o lsiutil per farlo scansionare effettivamente il bus.

http://hwraid.le-vert.net/wiki/LSIFusionMPT ha una buona quantità di documentazione, ma non posso dire di averlo verificato.

1
aij

In alcuni casi potrebbe essere necessario abilitare hot-swap sul BIOS della scheda madre e/o del controller SATA. Ciò dipende completamente dalla marca e dal modello di entrambi, ma se si dispone di controller SATA integrati che dovrebbero supportano l'hotswap, vale la pena esaminare il BIOS della scheda madre. Le schede SATA possono avere o meno le proprie impostazioni BIOS, molte schede di fascia bassa no, ma in genere le schede di livello server.

Se ricordo bene ho avuto bisogno di questo con un numero di schede madri Gigabyte, e forse alcune altre marche. Ne avevo bisogno perché un vassoio SATA hot-swap funzionasse; con la funzione disabilitata la rimozione dell'unità non ha causato problemi ma una nuova unità non si registrava fino al riavvio. Abilitando l'impostazione ha funzionato come previsto, le unità che sono state collocate nel vassoio sono state immediatamente rimosse e disponibili per il sistema operativo.

1
STW

Il mio DVD sulla mia macchina Fedora 16 è collegato a un'interfaccia SATA. Era chiuso e non si apriva o chiudeva. L'esecuzione di partprobe come root ha fatto funzionare di nuovo il mio cdrom/DVD. Suppongo che aiuterà su un'altra macchina in cui ho il problema occasionale di hot swap. Grazie!

1
Stuart Edge

So che questa domanda è vecchia, ma ho avuto un certo successo che non ho visto riportato altrove. Oggi ho avuto problemi simili su un Dell Precision 380. Alla fine è riuscito a farlo facendo una combinazione dei seguenti:

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

AVVISO: Ciò potrebbe interrompere anche altri dispositivi ATA sul sistema. Se hai montato filesystem su questi dispositivi, è probabile che finisca male. Alla mia situazione non importava, ma la tua poteva.

Quali dei comandi precedenti sono necessari e in quale ordine non mi è noto in questo momento. Potrebbe essere necessario ripetere alcuni comandi. Se dovessi indovinare, direi di fare nell'ordine mostrato sopra, quindi un altro scsi_Host esegue nuovamente la scansione alla fine. Ne ho fatte molte altre nelle mie esplorazioni.

Il primo comando (scsi_Host scan) indica al midlayer SCSI di scansionare tutti i bus alla ricerca di dispositivi nuovi/modificati. Il secondo comando tenta di ripristinare la destinazione SCSI (dispositivo disco). Gli ultimi due stanno lavorando con il driver per il controller AHCI stesso.

Ho trovato gli articoli in questione principalmente attraverso un esame dettagliato e una sperimentazione audace.

Puoi abbinare i nodi scsi_device alla marca e al modello del dispositivo (usando grep per stampare i nomi dei file davanti al contenuto):

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

La prima cifra dell'ID dispositivo SCSI dovrebbe essere il numero scsi_Host. È quindi possibile abbinare i nodi scsi_Host ai nodi dei loro dispositivi con:

ls -l /sys/class/scsi_Host

Sospetto che non avrò mai la possibilità di perfezionare ulteriormente, quindi ho voluto condividere queste informazioni nella speranza di avvicinare gli altri. Se ricevo ulteriori informazioni, modificherò questa risposta per riflettere.

Spero che sia di aiuto.

1
Ben Scott

Perché hotplug funzioni è necessario che il modulo acpiphp sia caricato.

[[email protected] ~]# modprobe acpiphp

ovviamente se vuoi che funzioni all'avvio, dovrai configurarlo per essere caricato all'avvio - un modo è creare/modificare /etc/rc.modules (che viene chiamato da rc.sysinit) e aggiungere la riga:

modprobe acpiphp

ricorda se crei questo file per chmod + x, come viene chiamato in quel modo.

0
nox