Come identificare e correggere i file con blocchi di dischi corrotti / inaccessibili

8

Ho un Macbook Pro del tardo 2011, che esegue Mavericks 10.9.2. Il suo unico HDD è un'unità da 750 GB, formattata con Bootcamp. Funziona ancora abbastanza bene, ma eseguendo un passaggio di deframmentazione, ho identificato che ci sono un sacco di file che si rifiutano di essere spostati dal deframmentatore (iDefrag).

iDefrag riporta un codice di errore POSIX di 5 durante l'accesso ai file. Selezionarne uno a caso e provare a copiare il file in un'altra posizione nella shell riporta anche un errore, il che mi fa pensare che il problema sia reale e con il disco / FS. L'output di cp è:

cp: unity_nophysx.nexe: Input/output error

Il codice di errore 5 è 'accesso negato' per quanto ne so, ma il processo di deframmentazione è in esecuzione come amministratore e l'esecuzione di cp utilizzando sudo sul file sospetto non fa alcuna differenza.

Utility Disco, fsck e Apple Hardware Test dichiarano tutti che il disco funziona correttamente. Non sono stati segnalati errori SMART, e mentre c'erano alcuni errori di autorizzazione, non erano con i file di cui iDefrag si lamentava, e l'Utility Disco afferma di averli risolti senza lamentarsi.

Ci sono forse un centinaio di file danneggiati, ma ancora una piccola parte del disco. Per quanto posso dire, nessun file di sistema o dati cruciali sono interessati. Mentre sarebbe bello recuperare i dati, non mi interessa reinstallare o andare ai backup. A questo punto non so se è davvero l'unità che sta morendo, solo alcuni settori danneggiati a causa del trasferimento dell'unità durante la scrittura o di qualche altro piccolo problema che può essere risolto. Sto assumendo il caso peggiore, e molto probabilmente dovrò ottenere un HDD leggermente più grande e clonare l'unità esistente per evitare di dover ricostruire il sistema.

La mia domanda è in realtà come faccio a contrassegnare quei file danneggiati come se fossero corretti e correggerli o eliminarli , in modo che un clone del disco abbia successo e non resti bloccato sui file / blocchi non posso accedere. Utility Disco non rileva il problema e non conosco alcuna riga di comando o strumenti di terze parti che svolgeranno il lavoro. Non voglio scrivere l'intero disco e ricominciare da capo, poiché l'unità sembra in buona salute, quindi sto cercando strumenti di riparazione / diagnostica.

    
posta MrCranky 28.04.2014 - 23:09
fonte

7 risposte

6

Se stai affrontando un file system sano al livello della sua struttura e vuoi trovare file con blocchi difettosi del disco, ecco come procedere:

  1. Crea un backup completo del tuo disco con Time Machine o Carbon Copy Cloner

    Controlla questo backup.

  2. Esegui i seguenti comandi pesanti e rischiosi (nel caso in cui tu abbia blocchi difettosi al di fuori del tuo filesystem) (assicurati che il {} sia citato, in modo che i nomi dei file contengano spazi):

    find / -type f -print -exec dd if="{}" of=/dev/null bs=1m \;
    

Questo pesante comando find stamperà per ogni file normale il suo nome (quindi non lo leggerà, ma solo la sua voce di directory) e poi continuerà a eseguire una lettura completa e veloce di tutti i suoi blocchi di dati.

Dopo aver bloccato il primo file contenente blocchi danneggiati, questo find farà sì che il kernel registri read error su /var/log/system.log , e rallenterà o porterà il sistema a un arresto totale. Ciò dipende principalmente dalla capacità del disco rigido di riposizionare i blocchi danneggiati trovati nel suo pool interno dedicato a questa normale attività di correzione. Questo file contenente blocchi danneggiati sarà il cognome stampato da find .

Annota questo nome di file su un pezzo di carta! Diciamo che questo nome di file è:

/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9

A questo punto potresti avere la possibilità di uccidere find rapidamente premendo ctrl + C . Se ucciderlo bene non funziona, basta mandare in crash il tuo Mac.

Dopo aver riavviato il Mac, controlla direttamente il file contenente blocchi danneggiati:

dd if='/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9' of=/dev/null bs=1m

Se il comando termina correttamente, allora l'errore era abbastanza chiaro perché il tuo disco potesse leggere questo file e riallocare i blocchi danneggiati.

  • Se il comando non termina, non sarai in grado di ucciderlo normalmente, i tuoi dati sono completamente persi e dovrai mandare in crash il tuo Mac ancora una volta.

In quest'ultimo caso, è necessario prendere in considerazione la possibilità di sostituire il disco e di lavorare dagli ultimi backup. Alcuni altri file potrebbero anche contenere blocchi danneggiati e potrebbero non essere stati rilevati da molto tempo finché non li hai letti.

Il kernel non genererà un errore di lettura su un blocco che non hai mai letto.

    
risposta data 10.05.2014 - 13:03
fonte
4

Riavvia in modalità utente singolo tenendo premuto il comando + S durante l'avvio. Quando vedi un prompt (dovrebbe apparire come root # o qualcosa di simile), digita fsck -f e premi Invio . Questo è lo strumento di controllo della consistenza del file system integrato di Mac e consente di trovare e riparare gli errori con il file system di avvio. Esegui questo comando fino a quando non vedi **The volume [volume name] was modified.** o lo strumento fallisce tre volte di seguito.

Se lo strumento fallisce, potrebbe essere indicativo di un problema più grande (ma non potrei dirti cosa succede senza vedere l'output dello strumento). In ogni caso, assicurarsi di aver eseguito il backup di tutto ciò che è possibile prima di eseguire qualsiasi strumento del disco. Al termine, digita reboot nel prompt e premi Invio per (indovinato!) Riavvia il computer.

Per ulteriori informazioni puoi trovare le pagine di manuale di fsck qui .

    
risposta data 29.04.2014 - 00:33
fonte
2

Consiglio vivamente DiskWarrior per la ricostruzione di cataloghi su disco e per scansione di file potenzialmente danneggiati .

Durante la ricostruzione del catalogo, può anche farti sapere se si verifica un ritardo a causa di un malfunzionamento del disco.

    
risposta data 29.04.2014 - 01:09
fonte
1

Come dici tu, non è nemmeno chiaro che quei file siano danneggiati, almeno il tuo Mac non la pensa così.

Ogni sistema operativo rende i file inamovibili necessari per le sue operazioni (punti di ripristino, file attualmente attivi ecc ...). Alcuni defrag li mostreranno, altri no.

Il fatto che non puoi accedervi o spostarli non significa che siano danneggiati.

Normalmente i Mac sono molto bravi a prendersi cura di loro stessi.

L'uso della manutenzione di Apple è fatto da: apri il Terminale e digita:

sudo periodic daily weekly monthly 

seguito da Return, inserisci la password dell'amministratore e OS X si prenderà cura di te.

Cerca nella Console i rapporti su quelli che ti interessano.

Mentre guardi la console (cerca) eventuali errori di I / O che indicherebbero che il tuo disco sta iniziando ad avere problemi, complimenti con l'Utility Disco e i risultati di fsck.

A volte uso uno strumento gratuito chiamato OnyX per ulteriori attività di manutenzione. È fatto dal francese e come cibo è semplicemente fantastico:)

OnyX è un'utilità multifunzione per OS X che consente di verificare il disco di avvio e la struttura dei suoi file di sistema, di eseguire varie attività di manutenzione del sistema, di configurare alcuni parametri nascosti del Finder, Dock, QuickTime , Safari, Mail, iTunes, finestra di login, Spotlight e molte delle applicazioni di Apple, per eliminare le cache, per rimuovere un certo numero di file e cartelle che possono diventare ingombranti e altro.

Con tutto ciò detto, non sto mettendo in dubbio la tua decisione sull'uso del deframmentatore (iDefrag) poiché non lo so, ma piuttosto di offrire soluzioni alternative.

    
risposta data 08.05.2014 - 20:34
fonte
1

Risolvendo la risposta di Buscar, puoi farlo automaticamente usando una linea di comando piuttosto pesante.

sudo find / -type f -print0  | xargs -0 -I{} dd if='{}' of=/dev/null bs=1m 2>&1 | grep 'error' >>badfiles.txt  & 
  • sudo: modalità amministratore
  • find -print0: percorso assoluto
  • xargs -0 -I {}: sostituto {} nel comando successivo
  • dd 2 > & 1: reindirizzamento std error allo stdout
  • pipe stdout su grep in cerca di errore stringa
  • Aggiungi risultati a un file di elenco. ( nota : questo dovrebbe essere su un supporto esterno se ritieni che l'unità interna sia incerta)
risposta data 13.07.2017 - 22:04
fonte
0

Per quanto irragionevole possa sembrare, prima di fare qualsiasi cosa dovresti duplicare tutti i tuoi dati su una buona nota unità. Se l'avvio dall'installatore e la copia dei dati falliscono, c'è un'utilità della riga di comando chiamata 'dd' che può eseguire la duplicazione a basso livello e in un modo molto più intransigente.

 man dd

per ulteriori informazioni su dd compreso l'uso e la sintassi corretta.

Un altro voto per il post di Matt, avvia la modalità utente singolo ed esegui

 fsck -fy 

ancora e ancora fino a quando fsck smette di segnalare errori.

Un voto per il post di Adam, DiskWarrior è un'applicazione semplice ma molto potente che segnala gli errori dell'HDD, controlla i singoli file per eventuali errori e li ripristina se possibile, e ricostruisce e ottimizza le strutture di directory.

Un'altra possibile soluzione che può sembrare irragionevole ma che spesso è un ultimo tentativo di recuperare i dati con molte prove annacdotali per il successo è quella di estrarre l'unità, proteggerla dall'umidità usando un paio di strati di sacchetti freezer e posizionarla in il tuo congelatore per 30-45 minuti. Quindi mentre l'unità è fredda, montare l'unità in un dock USB esterno e utilizzare un altro sistema temporaneo per tentare nuovamente di copiare i dati danneggiati su un'altra unità. Generalmente, questo viene utilizzato se c'è un problema hardware e l'unità non funziona. Se è possibile duplicare l'intera unità con i dati intatti, questo è l'ideale, poiché spesso una ripartizione e una riformattazione danno al convertitore una nuova prospettiva di vita.

    
risposta data 08.05.2014 - 20:06
fonte
0

Per un singolo file che non può essere letto nella sua interezza a causa di un errore di lettura del disco, è possibile utilizzare l'utilità dd per duplicare il file su un volume esterno, sostituendo i byte NUL per i blocchi che non possono essere letti. Si consiglia vivamente di duplicare su un volume diverso (ad esempio "Disco USB" nell'esempio seguente).

Esempio:

dd if=/path/to/damaged/file of=/Volumes/USB\ Disk/file bs=512 conv=noerror,sync

Usando blocchi da 512 byte, il numero massimo di blocchi leggibili sarà ripristinato.

Il recupero potrebbe richiedere molto tempo, poiché il kernel bloccherà per un po 'di tempo in ogni lettura non riuscita.

    
risposta data 29.02.2016 - 01:01
fonte

Leggi altre domande sui tag