Ripristino più rapido da un disco con settori danneggiati


13

Di recente ho provato a passare ddda un disco rigido non sano a un file. Ho usato dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Il mio problema è stato quello di aver ddperso molto tempo quando si è verificato un brutto blocco. Nel mio caso d'uso pagherei volentieri una perdita di dati per un risultato più veloce.

Esiste un modo per velocizzare la gestione degli errori? Forse una modifica del kernel (che dice all'HDD di fare meno sforzi per leggere un blocco)? O un altro programma?

Risposte:


29

Innanzitutto, per il software da utilizzare: è possibile provare a utilizzare ddrescueinvece di dd.

ddrescueha un interruttore per fare solo un numero limitato di tentativi. Può anche usare un file di log, quindi registra quali blocchi sono danneggiati. Se in seguito si desidera eseguire più tentativi, è possibile utilizzare lo stesso file di registro per eseguire ddrescue nuovamente con opzioni diverse (come più tentativi) e riprovare solo i blocchi necessari.

Esempio di utilizzo:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

Dalla ddrescuepagina informativa:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Ecco alcune fonti aggiuntive per l'utilizzo ddrescue:


modificare

Nel caso in cui il disco fisso si sta prendendo troppo a lungo, si può provare ad abilitare una funzione chiamata TLER ( T ime L imited E rror R ecupero) o CCTL ( C ommand C ompletion T empo L imit). Non tutti gli HDD ce l'hanno, ma puoi usarlo per limitare il tempo sul controller HDD stesso. Questo approccio può essere combinato con l'uso ddrecue, ovviamente.

Linux ha uno strumento chiamato smartctl(nel smartmontoolspacchetto).

Per verificare l'impostazione corrente ("disabilitato" significa un tempo illimitato, che non si desidera):

# smartctl -l scterc /dev/sda

Per impostarlo su un valore fisso (5.0 secondi in questo esempio. Impostandolo su 0 disabilita TLER):

# smartctl -l scterc,50,50 /dev/sda

Fonte per TLER: http://en.wikipedia.org/wiki/TLER


2
Un altro strumento da guardare è dc3dd che è una versione forense di dd
fpmurphy

oh bello, non conoscevo quello strumento!
Slizzered

2
Non avevo idea di quel TLER, ma mi ha davvero salvato la giornata. Sul mio disco sono stati disabilitati e ogni volta che ho eseguito ddrescue il mio disco si è bloccato dopo un paio di secondi. Spegnimento, accensione e prova successiva. Ora lo imposto a 2 secondi con il comando che menzioni e non si blocca mai più, salta alcuni settori, ma continua senza interruzioni.
Sven Rieke,

2

Ho avuto buoni risultati da dischi altrimenti illeggibili con questo software.

http://www.cgsecurity.org/wiki/TestDisk

Il prossimo è anche un solido strumento di recupero. Può ottenere file anche se la tabella dei file è rotta o se sono stati eliminati. È uno strumento dannatamente buono per la medicina legale. Scarica le cose in un modo davvero non organizzato, ma puoi spostare tutti i dati.

http://www.cgsecurity.org/wiki/PhotoRec


2

Per un'opzione rapida e veloce per salvare il disco è possibile utilizzare un file di script sh ed eseguire il file con sh. Contiene questa riga, basta ripetere sudo ddrescuee sleep 3poche altre volte. La sospensione viene utilizzata per far riposare l'unità alcuni secondi:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

Le opzioni utilizzate sopra:

  • -r0 : senza tentativi
  • -e +0: esci al primo errore
  • -T 1s: uscita con lettura di 1 secondo non riuscita
  • -d : I / O diretto
  • -n : nessun graffio

È possibile utilizzare una -Rvolta terminato con l'opzione -Auna volta, per invertire e rimuovere tutte le dimensioni degli errori e ricominciare indietro. Significa che leggerà gli errori in modo diverso.


0

Dipende dalle dimensioni del tuo disco rigido e da quanti blocchi danneggiati ha. Di solito mi ci vogliono 20 minuti per il backup usando DD a 1 tera hd sano. Con i blocchi danneggiati mi sono appena ripreso stamattina, mi ha preso il doppio del tempo. Ho avuto problemi con la duplicazione (backup di un disco) con circa 30 blocchi danneggiati. La prima cosa che ho fatto è il backup dei file usando Filezilla regolari per il backup di tutti i dati validi. Ho notato che un grosso file non veniva copiato correttamente (arresto nel mezzo e riavvio del trasferimento). Fortunatamente ho un backup precedente dello stesso file. Per duplicare il disco, ho dovuto trovare i blocchi danneggiati sul disco usando questa procedura:

Per prima cosa scopri il problema del disco che identifica le informazioni HD usando fdisk -l

2 ° se diciamo che il tuo disco è / dev / sdb, allora devi eseguire il comando badblocks -v / dev / sdb che elencherà tutti i tuoi blocchi danneggiati sul disco. Fortunatamente ce ne saranno alcuni. Se non vengono trovati blocchi danneggiati, i blocchi unità sono OK e devono scoprire qualcos'altro. La mia dimensione del blocco è 512 quindi uso quel numero predefinito per eseguire DD

3 ° ogni blocco ha una dimensione di 512, quindi quello che ho fatto è impostare bs = 512

Ogni volta che ho eseguito DD regolarmente come faccio sempre, i miei dati, dopo gli errori, verranno danneggiati. Quindi uso i parametri come spiegato nella pagina https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html per cercare la parte "Dischi guasti".

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Ci è voluto del tempo. Ogni blocco difettoso rilevato suona come un battito sul disco difettoso. Fa copia blocco per blocco, e attraverso tutti i miei blocchi danneggiati ha fatto lo stesso rumore. La quantità di volte che ha fatto un rumore, è perché ha trovato un altro blocco difettoso e ti dice sul messaggio di errore di visualizzazione. Quello che fa 'conv = noerror, sync' è riempire le letture sbagliate con i NUL, mentre 'iflag = fullblock' provvede a letture brevi, ma mantiene sincronizzati i dati fino alla fine. Nessuna corruzione, semplicemente non copia i blocchi difettosi e lo riempie di NUL vuoti.

Dopo che la copia con DD è stata completata, ho appena sostituito quel file danneggiato ripristinando Filezilla da un backup passato e tutto ha funzionato bene. Spero che ciò sia utile per gli altri che cercano di eseguire il backup di unità guaste.

NOTA: i miei blocchi danneggiati erano praticamente vicini l'uno all'altro. Circa 4 blocchi alla volta insieme in gruppi dove rilevati male. Se i blocchi si trovano su tutto il disco, potrebbero essere interessati diversi file. Fortunatamente, nel mio caso, è stato interessato solo un grande file di database da 4 GB.


1
Se la stessa risposta risponde a più domande, è probabile che le domande siano duplicate. In tal caso, è meglio rispondere a uno e contrassegnare l'altro come possibile duplicato. Ciò evita il gonfiarsi di risposte ripetitive e il collegamento delle domande rende più facile per i lettori trovare tutte le risposte.
fixer1234,

Non proprio, ma se la pensi così, fammi sapere così cancellerò la mia risposta. Ho cercato ovunque la soluzione giusta, ma ho trovato un modo per risolvere un problema con il mio server. Ci sono molte altre domande simili, che non hanno risposto al mio problema. Finora ho trovato una dozzina di domande simili o simili dappertutto. Ho appena risposto a un paio per scrivere la mia esperienza e come sono stato in grado di risolverlo. Fammi sapere se vuoi che cancelli la mia risposta e sarò felice di farlo. Saluti.
Luis H Cabrejo,
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.