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


41

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

[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

Ho provato un paio di cose per fare in modo che il server trovasse il nuovo / dev / sda, come rescan-scsi-bus.sh ma non hanno funzionato:

[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

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 sostituito a caldo senza riavviare?

Il sistema operativo in questione è RHEL5.3:

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

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

Aggiornamento : forse in 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:

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

Verificherei lo stato del tuo controller SATA nella versione del kernel Linux che stai utilizzando. Potrebbe essere un bug o semplicemente non supportato
Nathan,

Era 0 il numero BUS o 1?

3
Era il bus 0. / sys / class / scsi_host contiene da host0 a host5. dmesg mostra da ata1 a ata6. ata1 corrisponde a host0, ata2 corrisponde a host1, ecc.
Philip Durbin,

Risposte:


43

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.


Spiacente, nessuna gioia; l'esecuzione di quel comando innesca solo lo stesso rescan automatico che viene attivato quando collego inizialmente l'unità. Grazie comunque!
Hakamadare,

È possibile che sia necessario eseguire alcune configurazioni sul controller raid per vedere il disco. Nel mio caso era necessario aggiungere nuovamente il nuovo disco nel raid.
MikeKulls

Mi viene negata l'autorizzazione anche durante l'utilizzo sudoe il passaggio all'utente root.
Aaron Franke,

Sul mio sistema che si è avviato da un SSD NVMe, ha funzionato per rilevare un HD SATA appena collegato. Uso powertopper lasciare che più cose si spengano, quindi forse la porta SATA in cui ho collegato l'unità era completamente addormentata. (Il sistema ha un'unità ottica SATA collegata e rilevata all'avvio, ma probabilmente era anche addormentata.) Come altri suggeriscono, per evitare di ripristinare il collegamento SATA per le unità attive, capire quali hostID sono già in uso e non scanquelli , solo quello in cui è stata inserita una nuova unità. (O uno inutilizzato se non si conosce la numerazione.)
Peter Cordes,

18
echo "- - -" >/sys/class/scsi_host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.

5
Fai attenzione: dmesg ha dimostrato di aver ripristinato a fondo tutti i miei collegamenti SATA. Forse vale la pena testarlo prima di eseguirlo in produzione e perdere tonnellate di scritture.
Ivan Kozik,

12

Quando un disco si guasta in alcune circostanze, Linux non si rende conto 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

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


7

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

sudo partprobe


Potresti anche aver bisogno di 'yum install parted'
Antonio,

partedFTW ... si dovrebbe sapere bene oltre i soliti sospetti piace fdisk, gdisk, cgdisk, testdisk.
sabato

6

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:

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

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.


1
Sei il mio nuovo migliore amico: D
allyourcode

2

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?


Hmmm, beh, rescan-scsi-bus.sh funziona già su / proc / scsi / scsi, proprio come sembra scsiadd. Stiamo comunque provando un altro fornitore di server, quindi forse hot swap "funzionerà" per noi in futuro.
Philip Durbin,

4
Sì, non puoi aggirarlo, come posso dire. Questo è il motivo per cui usi l'etichetta del disco o l'UUID e monti il ​​tuo fs da quello (manualmente o in fstab), puoi impostarlo e quindi non cambia. L'unico trucco è far installare il tuo boot loader sulla nuova unità, ma funziona ancora quando si riavvia, anche se da alcuni rapidi esperimenti con GRUB (stavo sostituendo sda su una macchina con sd [a, b, c, d] e software raid1 per tutta la parte di sistema di fs).
Ronald Pottol,

1
Non dovresti mai usare i dispositivi / dev / sd * nei file di configurazione come fstab. Non dovresti mai presumere che i nomi siano sempre gli stessi. Invece, dovresti usare la sintassi UUID = ... (senza virgolette), come vedi in man fstab. Per scoprire l'UUID, usa il comando blkid. (in alternativa, potresti preferire l'etichetta o l'id; vedi anche / dev / disk / by- *)
Peter

1

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 di nuovo funzionare il mio cdrom / DVD. Credo che aiuterà su un'altra macchina dove ho il problema occasionale di hot swap. Grazie!


1

Il controller SAS Fusion-MPT che hai è un controller RAID di fascia bassa. Se non lo si utilizza 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 effettivamente scansionare il bus.

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


1

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 supportare l'hotswap, vale la pena esaminare il BIOS della scheda madre. Le schede SATA possono o meno avere 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.


Ho appena controllato internamente una macchina che so avere questo; è in esecuzione una scheda madre Gigabyte Z77X-UD3H con controller Marvell 88SE9172 e Intel serie 7 / C210 integrati
STW

1

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

ATTENZIONE: 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 sopra elencati 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'altra scansione scsi_host alla fine. Ne ho fatte molte altre nelle mie esplorazioni.

Il primo comando (scsi_host scan) dice 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.


0

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

[root@example ~]# 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.


Interessante. Non avevo mai sentito parlare di acpiphp. Grazie. Sembra indicare Configurazione avanzata e Power Plug PCI Hot Interface. Naturalmente PCI è Peripheral Component Interconnect.
Philip Durbin,

2
acpiphp è per hotplug PCI, vale a dire l'aggiunta e la rimozione a caldo di schede PCI. Alcuni sistemi costosi lo supportano. E anche molti hypervisor.
derobert,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.