Lettura di blocchi danneggiati dal disco rigido troppo lenti in Linux


5

Sto cercando di recuperare i dati da un vecchio disco rigido da 320 G (pieno di settori danneggiati) a uno nuovo. Ho scoperto che ddrescue è un buon strumento per questo compito grazie al suo algoritmo intelligente . L'ho già fatto una volta con il seguente comando:

ddrescue -f -n /dev/sda /dev/sdb log

È stato completato in diverse ore con errsize 16G (non recuperato) che può contenere ancora dati importanti, quindi ho eseguito il passaggio successivo:

ddrescue -f -d /dev/sda /dev/sdb log

ma funziona troppo lentamente (avg 300B / s) perché Linux si blocca su ogni settore danneggiato.
In realtà è un kernel Linux (probabilmente libata), non un disco rigido stesso, perché ho provato a ripristinare lo strumento DMDE in esecuzione su DOS pulito e non si sono verificati problemi di questo tipo: il timeout ATA può essere regolato lì e il processo di recupero complessivo funziona MOLTO più velocemente.
Ma non in Linux.
Ho anche provato questi parametri del kernel: libata.ignore_hpa=1 libata.noacpi libata.force=noncq,norste anche libata.dma=0passando a cmdline al bootlader, ma non ha avuto alcun effetto (sto usando il CD di System Rescue dove LIBATA è stato compilato nel kernel).
Ho anche provato a cambiare il timeout del dispositivo:

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

(il valore predefinito è 30)
ma genera solo più inondazioni di errori in syslog e non aiuta.
Il passaggio di blocchi danneggiati richiede ancora 1-3 minuti per ciascun settore che è costantemente lento. Quanto tempo è necessario per analizzare 16 GB di blocchi "danneggiati"? Una settimana? Mese?
Preferisco ancora ddrescue per il recupero (grazie al suo efficiente algoritmo e funzionalità di file di registro) e voglio sapere come ottimizzare il driver del kernel per velocizzare la gestione degli errori ata / disk. Google e le relative domande qui su SU non sono state d'aiuto. Qualche idea?

PS mi dispiace per il mio inglese

@ ta.speot.is

Perché non ripristini semplicemente dai tuoi backup regolari?

Questo disco rigido del mio amico, non mio. Così triste, non ha backup. Ora, dopo l'arresto del disco, inizia a pensare di fare backup, sì :)


UPD : 2,5 anni dopo non conosco ancora la risposta, ma ho appena capito che ddrescuefunziona più velocemente quando il controller sata è in modalità Compatibilità (IDE), un altro suggerimento è sempre usare l' -dopzione (accesso diretto) per accelerare leggermente le cose. Anche dare un'occhiata alle hdparmopzioni per regolare HDD ( -m, -D, -P), potrebbe aiutare (sul vecchio hardware).


UPD2 : Ho appena notato la risposta di Slizzered alla domanda correlata. È ottimo! Provai:

smartctl -l scterc,20,20 /dev/sda

e il recupero è andato molto più veloce di prima (solo in modalità IDE).


Perché non ripristini semplicemente dai tuoi backup regolari?
ta.speot.is

Qual è il tuo Linux, è Ubuntu, Kubuntu ...?
poqdavid,

@idavid Come ho già detto in una domanda, ho usato la distro del CD di ripristino del sistema per il ripristino (basata su gentoo), come faccio sempre.
lolimperator,

@lolimperator sei un po 'lento lol l'ho risolto
poqdavid

Sì, scusa, sono nuovo di SU, è il mio primo post / domanda, ma ho trovato molte soluzioni qui in passato (da quando Linux è diventato il mio giocattolo preferito lol). Quindi spero che qualcuno abbia riscontrato lo stesso problema e che possa essere in grado di inoltrarmi nella giusta direzione per la soluzione o semplicemente condividere un'esperienza.
lolimperator,

Risposte:


1

Questo è qualche anno dopo che la domanda è stata pubblicata, ma aiuterà qualcun altro. Ho visto la maggior parte di questa risposta da qualche altra parte e non sono sicuro che l' -copzione fosse disponibile nel vecchio ddrescue. -ccambia la quantità di settori da copiare alla volta.

Ecco qui:

ddrescue -d -r0 -e +0 -T 1s -n /dev/sdX recover.img recover.log -c 1 -O

sostituire Xcon l'unità che si sta tentando di ripristinare. I dati verranno archiviati in un file chiamato, recover.imgquindi avrai bisogno di spazio sufficiente.

Utilizzare il programma "watch" davanti al codice sopra per eseguire automaticamente il codice quando si blocca a causa dell'errore "troppe aree non valide".


0

Dall'uomo DDRescue:

(l'utente può interrompere il processo in qualsiasi momento, ma attenzione che un'unità guasta può bloccare ddrescue per lungo tempo fino a quando il kernel si arrende)

Quindi la risposta breve è: con DDRescue non puoi perché non puoi cambiare il timeout del kernel (devi modificare l'origine giusta nel posto giusto e ricompilare ... non semplice!).

Ho ottenuto buoni risultati usando alcuni software contenuti nello stivale di Hiren:

  • DataResque DD (crea un'immagine)
  • Roadkil's Unstoppable Copier (copia i file e registra gli errori)

Entrambi funzionano nel MiniXP contenuto anche nello stivale di Hiren. Funziona da CD / DVD o unità USB.

Consiglio: i dischi rigidi possono essere molto caldi, questo è un processo peggiore. Rinfrescati con un fan, questo prolunga la loro vita e può rendere più veloce il lavoro.


Ciao! Grazie per la risposta. In realtà non è una soluzione alla mia domanda / problema iniziale, ma può essere utile per me (e altri) in futuro. Grazie. PS ha votato (non ho idea di chi ti ha
votato

Non vuoi essere polemico ma la tua domanda era: "Qualche idea?" ;-) Solo felice se aiutato ...

0

Potrebbe essere utile configurare il --skip-size=parametro su qualcosa di più grande. L'impostazione predefinita è qualcosa di minuscolo come 64 kB, mentre le strisce di danno in un disco moderno potrebbero essere molto più grandi.

Anche se dovrai comunque attendere il timeout ogni volta, ce ne saranno meno per l'attesa.

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.