Di recente ho subito una quantità esageratamente piccola ma piuttosto importante di danni a un disco rigido su un host ESXi che ha interessato un paio di VM. C'è un file che mi piacerebbe molto recuperare, e ovviamente è stato in qualche modo lasciato fuori dal mio backup normale. Le copie più recenti hanno 6 mesi. Ho scoperto che ho bisogno di ... oops.
Dettagli:
1) Ho usato ddrescue (strumento FANTASTICO) all'interno di un ISO avviabile Parted Magic per recuperare il 99,98% dell'unità della VM in questione. Sfortunatamente, gli errori sembrano essere quasi interamente delle scritture di file RECENT ... quindi ovviamente sono esattamente i settori di cui ho bisogno per recuperare di più.
2) Il convertitore di frequenza genera errori di I / O in caso di letture errate del settore, ma a volte ha SUCCESSO nella lettura di un settore precedentemente danneggiato! Quindi, il recupero è ancora possibile. Un po 'più spesso di questo avrà una sorta di grave malfunzionamento e gira l'unità verso il basso e il backup. Oh, e circa 1/4 di questi spin down non torneranno indietro. (Richiede un ciclo di alimentazione intenso, lo spegnimento non funziona) Infine, quasi tutti i settori danneggiati vengono forniti con un piacevole suono udibile.
3) L'importante disco VM è formattato NTFS.
4) Posso (di solito) montare il volume NTFS danneggiato in sola lettura e posso (leggermente meno spesso) passare alla cartella che contiene il file di cui ho bisogno. Tuttavia, il file in questione sembra dare sempre un errore IO quando eseguo un 'ls' della cartella. Gli altri file nella cartella non danno un errore IO.
5) Ho provato ad usare ntfsinfo / etc ... che suona esattamente come quello di cui ho bisogno ... ma non aprirà affatto la partizione. (Frustrante, dal momento che 'mount' di solito lo farà)
6) Il file è un file XLS di Excel 2003, quindi non sono sicuro di poter trovare stringhe per cercare l'immagine del disco grezzo. (Forse parti della versione di 6 mesi?)
Mi piacerebbe davvero usare qualcosa come le strutture di debugfs. Tuttavia, dalle pagine man sembra che gli strumenti ntfs potrebbero fare il lavoro se solo potessero essere fatti per aprire la partizione. In particolare, mi chiedo se gli errori di I / O potrebbero essere puramente all'interno dei metadati per il file e se il record della directory possa essere ripristinato abbastanza bene da copiare il contenuto del file. Come ultima risorsa, qualunque contenuto parziale di file riesco a recuperare sarebbe fantastico.
Ho scritto moduli del kernel (relativamente semplici) prima, quindi ho potuto compilare uno speciale modulo NTFS con ulteriori informazioni di debug abilitate (o aggiunte). (Il file vale almeno alcuni giorni di armeggiare per provare a recuperare ... inoltre sto imparando cose interessanti nel processo)
Qualche puntatore?
MODIFICARE:
Ulteriori informazioni sull'errore dell'unità:
I messaggi / var / log / mostrano ovviamente molti errori NTFS-fs ... ma alla fine mi sono preso la briga di tradurre il messaggio di codice di senso non gestito che di solito ricevo: tasto di rilevamento 0x3, ASC = 0x11, ASCQ = 0x4. (che sembra tradursi in ERRORE DI LETTURA NON RICOPERTO - RIALLOCAZIONE AUTOMATICA NON RIUSCITA).
Quando l'unità si gira, viene visualizzato il messaggio "scsi0: * BusLogic BT-958 Initialized". Non sono sicuro che sia il driver SCSI di Linux, il driver ESXi o l'unità stessa a decidere di spegnere l'unità. Se fosse il driver Linux, allora forse potrei modificare il driver per evitare di rallentare. Tutta questa cosa di ddrescue è resa enormemente più dolorosa da questi spindown che richiedono il ciclo di potenza.
EDIT2:
usando il messaggio di registro "end_request: I / O error, dev sda, sector 7238859" subito dopo che sono la directory che contiene il file in questione, ho indirizzato la mia operazione ddrescue a quel settore. Al momento ho intenzione di rischiare e SCRIVERE quel settore sul disco live se ciò ha esito positivo. Forse posso ricostruire lentamente la mia strada per il file in questione in questo modo. Tuttavia, la maggior parte dei settori danneggiati recuperabili viene recuperata in meno di 20 tentativi ... questo è oltre 150 finora ... * sospiro *
Edit3:
L'errore di settore di "ls" nel file di cui ho bisogno è del tutto non collaborativo (1000+ tentativi durante la notte e senza fortuna). Spero che siano solo metadati quando fai un 'ls'? :)
Ho la maggior parte di una copia di ddrescue, ma che non monta (o monta senza file). L'unità danneggiata si monta correttamente per la maggior parte del tempo ... forse gli errori di I / O sulla forza dell'azionamento danneggiata "montano" per ricadere nello specchio che funziona?
** EDIT4: **
Ho rinunciato per ora, in attesa di ulteriori suggerimenti. Ho rimosso l'unità e ricostruito la scatola. Terrò il giro in auto nel caso dovesse succedere qualcosa.
ddrescue
o altri strumenti simili per copiare quanti più settori possibile. Non eseguire alcun ripristino a livello di file system dal disco danneggiato, farlo dalla copia.