Ridurre i tempi di tentativi / tentativi di blocco errati in Ubuntu


10

Come posso ridurre i tempi di attesa e i tentativi di IO in modo che il sistema operativo non tenti continuamente di scrivere su un'unità guasta?

Ho un sistema che uso per fare copie di contenuti demo che vengono prestati ai clienti su normali dischi rigidi desktop SATA. Colleghiamo molte unità contemporaneamente tramite SAS e copiamo il contenuto su di esse utilizzando uno script.

Poiché le unità vengono prestate, a volte alcuni ritorni danneggiati ma non so che sono danneggiati, quindi la volta successiva che l'unità viene riutilizzata in un'operazione di copia, rallenta altre unità mentre il sistema ritenta IO su quell'unità. A volte possono volerci ore prima di notare l'unità difettosa e rimuoverla. Dopo aver rimosso l'unità, le altre unità iniziano a scrivere a velocità normale.

Non mi interessa recuperare i dischi difettosi. Devo solo eliminarli in modo che non rallentino tutto il resto.

Sto anche ricercando badblock e smartmontools e sto pensando di scrivere un controllo preliminare sui drive prima di iniziare a scrivere.

Sistema operativo: Ubuntu Linux (12.04 lts)


Cosa c'è di sbagliato nel controllo dei dati SMART tramite udisks/ smartmonctl? Un classico problema XY qui, pensa.
Deer Hunter,

2
Grazie, cercherò di più su smartmonctl. Nella mia esperienza, se i settori danneggiati si sono verificati durante l'ultima spedizione, lo stato SMART mostra che l'unità è ancora buona e funziona bene fino a quando una parte casuale durante la copia, quindi rallenta fino a una scansione, influenzando anche altre unità fino a quando viene rimosso.
Ryan Sorensen,

La domanda non ha ricevuto una risposta diretta, quindi non sappiamo se sia possibile in Linux: come posso ridurre i tempi di attesa IO e i tentativi?
imz - Ivan Zakharyaschev,

@ imz - IvanZakharyaschev unix.stackexchange.com/a/147304/25985 Tuttavia, il kernel registra questi errori, quindi se tutto ciò che vuoi fare è catturare un disco guasto prima che diventi più un problema, puoi scansionare i log di sistema su intervalli regolari.
Riccioli d'oro,

@gol E se volessi prenderlo più velocemente? Senza aspettare Dio sa quanto tempo prima che l'operazione IO si sblocchi segnalando un errore? (In realtà, sto tentando di salvare i dati da un disco con errori, ma il mio problema è simile: correre in questi settori "errati" provoca enormi ritardi ... Forse potrei anche seguire i consigli e inventare un modo per alimentare le informazioni dal test SMART in ddrescuemodo che non tocchino nemmeno i settori segnalati da SMART.)
imz - Ivan Zakharyaschev

Risposte:


7

Non ho mai usato questo parametro sintonizzabile prima, ma probabilmente vorresti regolare eh_timeout (timeout di gestione degli errori) per l'unità in questione:

[root@localhost device]# cat /sys/block/sda/device/eh_timeout
10
[root@localhost device]# 

Quanto sopra mostra sdaimpostato su 10 secondi. Dalla knowledge base di Red Hat:

In alcune configurazioni di archiviazione (ad esempio configurazioni con molti LUN), il codice di gestione degli errori SCSI può impiegare molto tempo a inviare comandi come TEST UNIT READY a dispositivi di archiviazione che non rispondono. Un nuovo parametro sysfs, eh_timeout, è stato aggiunto all'oggetto dispositivo SCSI, che consente la configurazione del valore di timeout per i comandi TEST UNIT READY e REQUEST SENSE utilizzati dal codice di gestione degli errori SCSI. Ciò riduce la quantità di tempo impiegato a controllare questi dispositivi che non rispondono. Il valore predefinito di eh_timeout è 10 secondi, che era il valore di timeout utilizzato prima di aggiungere questa funzionalità.


Lo sto verificando ora. Ubuntu non ha un eh_timeout, ma ha un file di timeout che può essere la stessa cosa. Il valore predefinito di Ubuntu sembra essere di 30 secondi. Lo ridurrà a 5 secondi e riporterà indietro.
Ryan Sorensen,

1
Per curiosità, qual è stato il tuo risultato?
Bratchley,

L'impostazione del flag di timeout su 12.04 non sembra fare nulla. Sto programmando di aggiornare un sistema di test alla 14.04 questo fine settimana perché ha eh_timeout (e anche timeout).
Ryan Sorensen,

@RyanSorensen, quindi hai avuto la possibilità di vedere se questo parametro funziona mai?
Nat

Non sono stato in grado di modificare, eh_timeoutma sono stato in grado di cambiare timeoutper eseguire l'attività a portata di mano.
GuitarPicker,

2

Controlla /sys/block/<dev>/stati dispositivi che ti interessano e confronta il decimo parametro (io_ticks).

per esempio, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

Questa è la percentuale di tempo disponibile che il disco ha trascorso in attesa del disco io.

Vale la pena controllare quasi il 100%, altrimenti diventa davvero intelligente e confrontalo con la media di tutti i tuoi dischi e scegli su uno o più dischi sopra la media.

Vedere la documentazione delle statistiche del livello di blocco .

Altrimenti usa qualcosa come Munin e disegnalo graficamente. Puoi far avvisare Munin se supera una soglia, ad es. Il 90% o qualunque cosa mostri il tuo grafico è una buona cifra di allerta.

ad esempio, vedi questi due grafici Munin che mostrano che / dev / sdi deve essere guardato. In questo esempio se / dev / sdi fa parte di un array, l'intero array ne risentirebbe.

Utilizzo del disco per dispositivo - di giorno

Utilizzo del disco per dispositivo - per settimana

Se guardi il grafico settimanale, vedrai che / dev / sdc potrebbe anche essere lento.

Dovrei aggiungere che / dev / sdi sopra non è rotto, è solo un disco lento (in realtà un disco verde che qualcuno ha aggiunto a un array di dischi sata di livello enterprise) che ha rallentato l'array. Un vero disco guasto si sporgerebbe come un pollice dolente.

In sintesi, probabilmente avrei scelto uno script se avessi avuto il tempo, ma Munin se volevo solo una soluzione rapida e collegarmi al server era facile.


Grazie! Le informazioni sulle statistiche io in Linux sono davvero nuove e sembrano utili (per me) in tali situazioni.
imz - Ivan Zakharyaschev,
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.