martedì 10 ottobre 2017

Clonare disco con settori guasti - Recuperare dati

[Solo note, per ora. Le operazioni sono ancora in corso ma annoto qui alcune esperienze..]

Un disco esterno Western Digital da 3,5 pollici ha cominciato a dare segni di funzionamento strano.
Ho provato a eseguire, dalla consolle di Windows ("Prompt dei comandi", cmd.exe, lancciato come amministratore) il comando chkdsk x: /f /r (dove "x" è la lettera del disco e le opzioni "f" e "r" indicano di correggere gli errori e riallocare eventuali settori difettosi).
Dopo alcuni minuti chkdsk ha emesso un avviso circa un errore non specificato, con un certo codice e non è riuscito a proseguire il lavoro. Le informazioni trovate circa quel codice di errore sono state ben poche ma ho trovato indicazioni circa una utility di Western Digital che avrebbe fatto un test del disco.
Il programmino, installato, non segnalava problemi nel disco ma eseguendo il "test approfondito" anch'esso dopo un po' si è bloccato.
A quanto pare il disco si stava degradando e certi settori non venivano più letti/scritti correttamente.
Dapprima sono riuscito a copiare alcune cartelle con dati che mi importava salvare ma poi la velocità di copia continuava a ridursi, per via del tempo perso quando si verificavano errori di lettura.
Cercare di salvare i dati in quel modo può essere stato un errore.

Ma facciamo una parentesi
Il disco è una superficie liscia sopra della quale si sposta la testina di lettura. Non so se la testina strisci sul disco o se resti a una minima distanza ma col tempo può accadere che la testina non riesca più a leggere/scrivere bene i dati in certe zone del disco, o perché la testina si usura o perché si usura la superficie del disco, o entrambe le cose.
I dati sul disco vengono immagazzinati in cerchi concentrici, detti "tracce" e ogni traccia è suddivisa in un certo numero di segmenti, detti "settori". Ogni settore contiene una certa quantità di dati.
Quando la testina scrive in un settore, oltre ai dati, scrive anche un codice di controllo che servirà, in fase di lettura, per capire se i dati letti sono corretti.
Quando la testina legge un settore, legge i dati, compreso il codice di controllo e verifica la congruenza. Se non c'è congruenza deduce di avere letto male e normalmente riprova a leggere più volte, nella speranza di recuperare i dati corretti. Se riesce a leggere i dati correttamente, va oltre, e forse si annota qualcosa a proposito del settore difficile da leggere, o lo marca come difettoso e riscrive i dati in uno buono.

Se i settori difettosi sono diversi e non si riesce a leggere i dati, allora il tempo trascorso a ritentare le letture diventa molto lungo, e questo, considerando che la testina continua a insistere sulla stessa "traccia", può logorare ulteriormente una zona già indebolita, con ulteriore perdita di dati.

Avrei dovuto cercare da subito di clonare il disco, ma facendo in modo da occuparmi prima dei settori letti correttamente e di ignorare in prima fase quelli difettosi.
Il disco è un USB 2, da 2 terabyte, copiarlo tutto, alla massima velocità consentita dalla connessione USB 2 richiede circa 20 ore. Quando andava bene trasferivo file alla velocità di 30-32 megabyte al secondo (ma questo tipo di disco può essere anche smontato e inserito in una porta SATA).

Windows non pare adatto al recupero di dati

Questo tipo di clonazione pare non si possa fare sotto Windows. Ho provato (facendo, credo ulteriori danni al disco) utilizzando software come Easeus Todo Backup, o Acronis o altre utility che ho trovato ma quando arrivavano a una zona con errori, il disco cercava comunque di recuperarli e da 18 ore di tempo previsto, il tempo aumentava continuamente. E non ero nemmeno arrivato al 2%.
Ho lasciato perdere e ho cercato altre informazioni.
Pare appunto che programmi che girano sotto Windows non possano interagire con il disco con la rapidità che sarebbe necessaria per evitare i continui tentativi di lettura in caso di settori errati (è il disco stesso che li fa.

Con Linux  e ddrescue pare qualcosa si possa fare

Ma con Linux la cosa è fattibile. Anzi, ho appreso che c'è un software specifico per il "data rescue" (recupero di dati da dischi difettosi) che può fare quello che dicevo: Cercare di copiare prima i settori buoni (finche i danni sono limitati) e rimandare a un secondo tempo i tentativi di recupero di dati da settori difficili. Questo software si chiama ddrescue.
Dato che occorre Linux e non Windows, si può utilizzare ddrescue attraverso un Live CD o una chiavetta USB "bootable". Il CD o la chiavetta contengono un Linux con alcuni programmi preinstallati e si può avviare il computer facendolo partire dal CD o dalla chiavetta USB.
Ho trovato indicazioni per creare una chiavetta USB con un pacchetto Linux che si chiama SystemRescueCD (www.system-rescue-cd.org).
Il PC dev'essere impostato per eseguire l'avvio da CD o da chiavetta USB...

Ma non partiva. Grub dava un problema. ho trovato che occorreva editare (comando "e") e modificare il nome della cartella "isolinux" in "syslinux" (la modifica può essere fatta in un file .cfg dentro la cartella Grub, sulla chiavetta). Fatto ciò Linux è partito. Alla richiesta del layout di tastiera ho indicato "21" per la testiera italiana. Ha proceduto e ho avviato l'interfaccia grafica con il comando "startx", indicato come opzione in fase di avvio.

Per ora pubblico, anche se il post non è completo.


Un post molto interessante:
https://www.data-medics.com/forum/how-to-clone-a-hard-drive-with-bad-sectors-using-ddrescue-t133.html
In questo post, tra l'altro viene indicato che occorre connettere il disco da copiare direttamente attraverso una interfaccia SATA, e non via USB. Nel mio caso devo smontare il disco esterno, sperando di trovare dentro un hard disk con interfaccia SATA e poi potrei inserirlo all'interno del mio miniPC, invece del disco di sistema Windows, che non userei.
Sì, cercando su youtube "Open Western Digital Elements" ho trovato un video che indica come aprire il contenitore e estrarre il disco.
Ma... apprendo dai commenti al video che i dati nel disco potrebbero essere criptati. Diverse persone segnalano che i dati non sono accessibili o che i dischi non sono utilizzabili internamente per qualche artificio. Nel mio caso non è così. Ho inserito il disco in una interfaccia USB-SATA e vedo le cartelle e i file, solo che se provo a copiare cose, la velocità di copia va da zero a qualche centinaio di kilobyte al secondo. Ormai forse il disco è troppo danneggiato ma almeno so che posso provare a recuperare qualcosa.

Istruzioni per clonare con ddrescue:
https://wiki.archlinux.org/index.php/disk_cloning#Using_ddrescue

Intro a ddrescue:
https://www.gnu.org/software/ddrescue/

Manuale di ddrescue:
https://wiki.archlinux.org/index.php/disk_cloning#Using_ddrescue

21 ottobre 2017
Sono riuscito a lanciare ddrescue usando la chiavetta USB con SystemRescueCD. ho dovuto cercare e provare...
Avevo un disco WD MyPassport, esterno da 2,5" con qualche problema, archiviato da tempo e ho voluto sperimentare con lui.

In caso di dischi tipo i MyPassport da 2,5" di Western Digital occorre considerare che sono provvisti solo di porta USB... Non si può smontare questi dischi e inserirli in una porta SATA. Quindi in caso di settori danneggiati può essere più difficile il recupero. Forse è meglio comporre i propri dischi.

ddrescue può copiare un intero disco, o una partizione o un file e generare un file immagine (da salvare in una partizione accessibile e sufficientemente grande) o una copia esatta del disco su un altro disco (il quale quindi perde eventuali altri dati contenuti).
Se lo si usa facendogli creare una mappa del lavoro fatto, ddrescue può essere interrotto e avviato nuovamente e al riavvio esso continuerà da dove era rimasto, quindi si possono sperimentare variazioni senza dover ricominciare da capo.

Ho inserito nel PC il disco di destinazione e lasciato il disco origine via USB. La velocità di trasferimento dei dati è molto scarsa.
Inizialmente mi dava tipo 200 giorni per trasferire i terabyte! E non pare abbia incontrato errori di lettura nei primo 680 megabyte.
Poi ho indicato la dimensione deli settori (512 byte), ho indicato di leggera a cluster di 1024 settori e ho inserito nel PC il disco di destinazione.
La velocità di trasferimento è migliorata un poco: 50-500KB/sec. Indica 25-50 giorni per trasferire 1 terabyte. Troppi... Forse per via del disco connesso via USB.
Dato che ddrescue non segnalava errori di lettura ho provato a togliere l'opzione -d (che esegue la lettura diretta), ma la situazione non è cambiata significativamente.