Come identificare e riparare i file con blocchi del disco danneggiati / inaccessibili


9

Ho un Macbook Pro di fine 2011, con 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 pari a 5 quando si accede ai file. Scegliere 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

Per quanto ne so, il codice di errore 5 è "accesso negato", 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 sostengono che il disco va bene. Non sono stati segnalati errori SMART e, sebbene vi siano stati alcuni errori di autorizzazione, non erano presenti nei file di cui si lamenta iDefrag e Disk Utility afferma di averli riparati senza lamentele.

Esistono forse un centinaio di file danneggiati, ma una frazione molto piccola dell'unità. Per quanto ne so, non sono interessati file di sistema o dati cruciali. Mentre sarebbe bello recuperare i dati, non mi dispiace reinstallare o andare ai backup. A questo punto non so se è davvero il disco che muore, solo alcuni settori danneggiati a causa del movimento del disco durante la scrittura o di qualche altra piccola corruzione che può essere aggirata. Sto assumendo il caso peggiore e che molto probabilmente dovrò ottenere un HDD leggermente più grande e clonare l'unità esistente per evitare di dover ricostruire il sistema.

La mia domanda è davvero come faccio a contrassegnare quei file rotti come correttamente rotti e risolverli o eliminarli , in modo che un clone del disco abbia successo e non si blocchi su file / blocchi a cui non può accedere. Utility Disco non vede il problema e non conosco alcuna riga di comando o strumenti di terze parti che farà il lavoro. Non voglio cancellare l'intero disco e ricominciare da zero, poiché l'unità sembra altrimenti integra, quindi sto cercando strumenti di riparazione / diagnostica.


Ti consiglio di leggere questa discussione analoga abbastanza dettagliata su SuperUser: superuser.com/q/148227 .
dan

Ho provato, sfortunatamente su un disco sano :), volitans-software.com/smart_utility.php . Sembra uno strumento piuttosto semplice e serio. Potresti provarlo e in particolare controllare il contatore "settori riallocati".
dan

Risposte:


8

Se stai affrontando un file system integro a livello della sua struttura e desideri trovare file che presentano blocchi difettosi del disco, ecco come procedere:

  1. Fai un backup completo del tuo disco con Time Machineo Carbon Copy Cloner

    Controlla questo backup.

  2. Esegui il seguente comando pesante e rischioso (nel caso in cui tu abbia blocchi danneggiati al di fuori della struttura del tuo filesystem) (assicurati che {} sia citato in modo che i nomi di file contenenti spazi funzionino):

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

Questo pesante findcomando stamperà il nome di ogni semplice file (quindi non lo legge, ma solo la sua voce di directory) e quindi continuerà a fare una lettura completa e veloce di tutti i suoi blocchi di dati.

Su hiting il primo file che contiene blocchi danneggiati, questo findfarà sì che il kernel di accedere read errora /var/log/system.log, e sarà o rallentare o portare il sistema a un arresto totale. Ciò dipenderà principalmente dalla capacità del disco rigido di riposizionare i blocchi danneggiati presenti nel suo pool interno dedicato a questa normale attività di correzione. Questo file contenente blocchi danneggiati sarà il cognome stampato da find.

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

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

A questo punto potresti avere la possibilità di uccidere findrapidamente colpendo ctrl+ C. Se ucciderlo bene non riesce, basta bloccare il tuo Mac.

Al riavvio del 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, l'errore è stato abbastanza leggero da consentire al disco di leggere questo file e riallocare i blocchi danneggiati.

  • Se il comando non termina, non sarai in grado di ucciderlo normalmente, i tuoi dati saranno completamente persi e dovrai arrestare nuovamente il Mac.

In quest'ultimo caso, è necessario prendere in considerazione la sostituzione del disco e lavorare con gli ultimi backup. Alcuni altri file potrebbero contenere anche 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.


Ah, questo è assolutamente il tipo di trucco che speravo. Il primo passaggio con lo script find / dd tocca tutti i file / blocchi sul disco, e sicuramente trovo un mucchio di file che danno "Errore di input / output", e posso semplicemente emettere il registro del comando in un file e quindi grep per scoprire quali file sono duff. Sembra che il comando dd non sia di per sé sufficiente a innescare alcun tipo di correzione automatica (non sapevo nemmeno che OS X lo avesse fatto), ma almeno mi dà un modo affidabile per identificare i file.
MrCranky,

Tra i lati positivi, quando il sistema operativo tenta di leggere i file con questi blocchi danneggiati, non si arresta in modo anomalo o si blocca in modo orribile. Vedo un May 10 20:42:15 ICE kernel[0]: disk0s2: I/O error.pop-up nei registri, ma nessun indizio su quale file lo abbia attivato. Ma poi il comando viene eseguito abbastanza felicemente.
MrCranky,

Il tuo kernel non si blocca con BBFH perché il tuo disco ha ancora abbastanza blocchi disponibili nel suo pool per correggere blocchi danneggiati. ddnon risolve nulla, questo scopo del comando è di copiare i dati e convertirli il più velocemente possibile. Il disco è ancora in grado di riparare errori leggeri. Stai attento, il prezzo di un disco non è paragonabile al tuo lavoro.
dan

Mmm, sì, avevo ipotizzato che: essere solo uno strumento stupido per estrarre tutti i dati da un file e metterli altrove (nel nostro caso, nel nulla). Ciò che conta davvero è che ogni blocco associato al file venga letto. Quello che non ottengo è ciò che ti aspetti che OS X faccia in quel caso. Chiaramente il kernel non può leggere questi blocchi danneggiati, ma pensi che il disco stesso possa e possa risolverli? Se non riesce a ottenere i dati dal blocco danneggiato originale, come li sposterà altrove?
MrCranky,

Ottima domanda Il disco eseguirà automaticamente nuovi tentativi sui blocchi di lettura. Ogni volta che la posizione della testa è meccanicamente in una posizione diversa. Se uno di questi tentativi ha esito positivo, i dati vengono copiati su uno dei blocchi disponibili per riparare blocchi danneggiati. Il blocco non valido viene contrassegnato come non valido e non verrà mai più utilizzato. D'altra parte, se tutti i tentativi falliscono, i dati non vengono salvati e, dopo molto tempo, il disco contrassegnerà il blocco come errato e ne assegnerà uno nuovo vuoto al disco visibile. Il kernel segnalerà un errore del disco irrecuperabile.
dan

4

Riavvia in modalità utente singolo tenendo premuto Command+ Sdurante l'avvio. Quando viene visualizzato un messaggio (dovrebbe essere simile root #o simile), digitare fsck -fe premere Return. Questo è lo strumento di controllo della coerenza del filesystem integrato di Mac e ti consente di trovare e riparare errori con il file system di avvio. Esegui questo comando fino a quando non vedi **The volume [volume name] was modified.**o lo strumento non riesce per tre volte di seguito.

Se lo strumento non funziona, potrebbe essere indicativo di un problema più grande (ma non potrei dirti cosa senza vedere l'output dello strumento). In ogni caso, assicurati di aver eseguito il backup di tutto il possibile prima di eseguire qualsiasi strumento disco. Al termine, digita rebootil prompt e premi Invio per (hai indovinato!) Riavviare il computer.

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


Interessante, ma sembra molto simile a fsck, anche con -f e in modalità utente singolo, sta facendo esattamente ciò che ha fatto Utility Disco. Come Utility Disco, non trova nulla e pensa che il disco vada bene. Presumo che stia eseguendo la scansione dei record del file system, ma penso che il mio problema sia a livello di blocco, ovvero che il file system sia ben strutturato, ma i dati reali all'interno dei file non sono accessibili quando si tratta di leggere / copiandoli / deframmentandoli.
MrCranky,

1
→ MrCranky: giusto! fscke Disk Utilitystiamo verificando l'integrità della struttura del file system. Leggono i blocchi del disco assegnati alla struttura del file system. Non sono fatti per verificare l'integrità dei blocchi di dati. Quindi possono essere eseguiti su un disco con blocchi non funzionanti senza generare errori di lettura. Se vuoi controllare il tuo disco, anche i blocchi che possono essere difettosi ma che in realtà non sono utilizzati, usa uno strumento di base come dd if=/dev/disk0 of=/dev/null ibs=1ke all'interno di un'altra finestra di shell tail -f /var/log/system.log. Questo è gratuito, estremo e non ti nasconderà alcun errore.
dan

2

Consiglio vivamente DiskWarrior per la ricostruzione di cataloghi di dischi e per la 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.


Non sono contrario all'acquisto di uno strumento per aiutare, ma senza prove e senza alcuna garanzia che sia progettato per individuare il tipo di errori che sto riscontrando, avrei bisogno di molti più consigli per eseguire il backup del tuo prima di essere pronto a perdere $ 100 su uno strumento.
MrCranky,

-1 Non solo una risposta, ma un mix di commenti e risposte.
Max Ried,

2

Lavorando sulla risposta di Buscar, puoi farlo automaticamente usando alcuni pieni della riga 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 {}: sostituisci {} nel comando successivo
  • dd 2> & 1: reindirizza l'errore std a stdout
  • pipe stdout su grep alla ricerca di errori di stringa
  • Aggiungi i risultati a un file di elenco ( nota : questo dovrebbe essere su supporto esterno se ritieni che l'unità interna sia iffy)

1

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

Ogni sistema operativo crea file immobili che sono necessari per le sue operazioni (punti di ripristino, file attualmente attivi ecc.). Alcuni deframmenti li mostreranno, altri no.

Il fatto che non sia possibile accedervi o spostarli non significa che siano danneggiati.

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

L'utilizzo della manutenzione Apple viene effettuato: apri il Terminale e digita:

sudo periodic daily weekly monthly 

seguito da Return, inserisci la password dell'amministratore e OS X si occuperà delle cose per te.

Cerca nella Console i rapporti su quelli che ti interessano.

Mentre sei nella console cerca (cerca) eventuali errori I / O che indichino che il tuo disco sta iniziando ad avere problemi, per complimentarmi con l'Utility Disco e i risultati di fsck.

A volte uso uno strumento gratuito chiamato OnyX per attività di manutenzione aggiuntiva. È fatto dai francesi 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, eseguire varie attività di manutenzione del sistema, configurare alcuni parametri nascosti di Finder, Dock, QuickTime, Safari, Mail, iTunes , finestra di accesso, Spotlight e molte applicazioni di Apple, per eliminare le cache, rimuovere un certo numero di file e cartelle che possono diventare ingombranti e altro ancora.

Detto questo, non metto in dubbio la tua decisione di utilizzare la deframmentazione (iDefrag) poiché non la conosco, ma piuttosto offro soluzioni alternative.


L'uso del deframmentatore non è un problema, sono perfettamente consapevole di ciò che OS X fa e non fa a questo proposito. I file sicuramente non erano in uso, si trattava di file di dati per un'applicazione che non era attiva e in effetti l'applicazione ora non può essere spostata.
MrCranky,

Su Onyx, ancora una volta, sta facendo poco più di Disk Utility: verifica lo stato SMART del disco e quindi esegue la diagnostica in stile fsck (che come abbiamo stabilito pensa che non ci sia nulla di sbagliato)
MrCranky,

Per essere chiari, per chiunque leggesse questa risposta, i file erano sicuramente danneggiati, e il Mac lo sapeva, perché non mi era permesso leggere da loro (copiarli, qualunque cosa). Questo non perché erano file di sistema o in uso al momento, era vero anche per i file di dati dell'utente. La manutenzione periodica non ha aiutato il problema, ancora una volta perché fscksembra che si preoccupi solo dei problemi del file system, non dei problemi di accessibilità. La console ha mostrato errori solo quando ho provato manualmente a copiare / leggere i dati da uno di questi file danneggiati, non è stato di aiuto nel trovarli.
MrCranky,

0

Per quanto irragionevole sembri, prima di fare qualsiasi cosa dovresti duplicare tutti i tuoi dati su una buona unità conosciuta. Se l'avvio dall'installer e la copia dei dati falliscono, esiste un'utilità della riga di comando chiamata 'dd' che può eseguire duplicazioni di basso livello e in modo molto più intransigente.

 man dd

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


Un altro voto per il post di Matt, avvio in modalità utente singolo ed esecuzione

 fsck -fy 

ripetutamente fino a quando fsck smette di segnalare errori.


Un voto per il post di Adam, DiskWarrior è un'applicazione semplice ma molto potente che segnalerà guasti dell'HDD, controllerà la presenza di errori nei singoli file e li riparerà, se possibile, e ricostruirà e ottimizzerà le strutture di directory.


Un'altra possibile soluzione che può sembrare irragionevole ma che è spesso un ultimo tentativo di recupero dei dati con molte prove annacdotali per il successo è quella di tirare l'unità, proteggerla dall'umidità usando un paio di strati di sacchetti del congelatore e metterlo nel 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à. In genere, viene utilizzato se si verifica un problema hardware e l'unità non funziona. Se riesci a duplicare l'intero disco con i tuoi dati intatti, questo è l'ideale, poiché spesso una ripartizione e una riformattazione daranno al disco un nuovo leasing sulla vita.


Come ho detto, fsck non segnala alcun errore. Il disco non ha ancora un carattere temperato o riporta errori casuali e l'elenco di file danneggiati non sembra crescere, quindi non credo di essere ancora vicino allo stadio di "blocco per un ultimo pull di emergenza". Inoltre, sono già molto ben eseguito il backup a livello di file / cartella e non sono preoccupato di perdere dati, come ho detto nella domanda. È bello sentire un altro voto per DiskWarrior però.
MrCranky,

@MrCranky: credo che ti riferisca a qualcosa pubblicato prima di aggiornare la tua domanda; Stavo rafforzando l'idea di fsck per chiunque trovi questa pagina alla ricerca di una soluzione a sintomi simili. Per quanto riguarda tutto ciò che ho pubblicato sull'errore dell'HDD, non fa mai male essere completo, ancora una volta, per gli altri e non necessariamente per te personalmente. Ho visto la mia giusta dose di guasti del disco rigido. Spesso non vi è alcuna indicazione di errore, anche con la tecnologia SMART, fino a quando non è più possibile accedere ai dati in alcun modo. Se ti interessano i dati, ti consiglio vivamente di ottenere una nuova unità e di eseguire il backup dei dati.
chillin

Certamente non sono in disaccordo con la raccomandazione per il backup, ma lo spirito del formato Domande e risposte è di rispondere alla domanda posta, non una domanda generica "come faccio a riparare un disco rotto" (di cui ce ne sono molti). Ben prima di modificarlo per aggiungere fsckall'elenco di "cose ​​che pensano che il disco vada bene", ho risposto alla risposta menzionando fsckscontando la sua utilità. fscke Disk Utility svolgono più o meno la stessa funzione, vale a dire operare sulle strutture del file system, non a livello di blocco. Ho cercato di essere piuttosto specifico sul fatto che si tratta di un problema di blocco, non di un file system.
MrCranky,

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' ddutilità 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 es. "USB Disk" nell'esempio seguente).

Esempio:

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

Utilizzando blocchi da 512 byte, verrà recuperato il numero massimo di blocchi leggibili.

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

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.