← Torna al blog

Cos'è $MFTMirr e quando NTFS lo usa?

· 4 min di lettura

Risposta breve: $MFTMirr è un piccolo file che contiene un duplicato dei primi record MFT — come minimo i record 0–3 ($MFT, $MFTMirr, $LogFile, $Volume), tipicamente i primi 16. NTFS lo usa per avviare il recupero quando la $MFT principale non è leggibile. Se sia la MFT principale sia il suo mirror sono illeggibili, vedete «Windows non riesce a recuperare la master file table» uscire da chkdsk.

Perché esiste un mirror

I primi record della Master File Table sono critici: il record 0 descrive $MFT stessa, il record 2 è $LogFile, il record 3 è $Volume. Se i byte all'inizio di $MFT sono danneggiati, NTFS non può trovare nessun altro file sul volume — incluso il log delle transazioni che userebbe normalmente per recuperare.

Il mirror risolve questa circolarità. $MFTMirr è un file separato in una posizione fisica differente, contenente un duplicato di quei primi record. Quando il driver monta un volume, legge il record 0 da $MFT; in caso di fallimento, ripiega sul record 0 da $MFTMirr e usa il duplicato per ritrovare il resto.

Dove si trova

$MFTMirr è il record MFT 1. Il suo attributo $DATA è non-resident, con cluster runs che tradizionalmente puntano al centro del volume — abbastanza lontano da $MFT stessa perché un singolo guasto localizzato (un cluster difettoso, una scrittura interrotta su una regione) non possa abbatterli entrambi.

Le versioni moderne di NTFS lo posizionano all'LCN numeroDiCluster / 2. Su un volume da 500 GB ciò colloca il mirror intorno al segno dei 250 GB.

Potete localizzarlo da un sistema attivo:

fsutil file queryextents C:\$MFTMirr

Cosa contiene

$MFTMirr memorizza copie byte per byte dei primi record MFT. La garanzia storica riguardava i primi quattro record (0–3); le versioni attuali di Windows rispecchiano i primi sedici — l'intero set di metadati NTFS descritto nel riferimento della master file table.

Ogni copia è un normale record MFT, fixup array incluso. Un parser puntato su $MFTMirr lo percorre esattamente come percorre $MFT.

Come NTFS lo usa al montaggio

Su un montaggio sano, il driver non tocca $MFTMirr. Su un montaggio danneggiato:

  1. Legge il record 0 di $MFT.
  2. Se la lettura restituisce un errore I/O o se la verifica del fixup fallisce, legge invece il record 0 di $MFTMirr.
  3. Se la copia del record 0 del mirror è valida, usa i suoi data run per localizzare $MFT sul disco.
  4. Continua normalmente.

Il mirror non deve sostituire $MFT — deve solo fornire informazioni sufficienti a trovarla. Dopo che il driver ha localizzato $MFT dal puntatore del mirror, prosegue con la tabella attiva.

Come chkdsk lo usa

chkdsk è più aggressivo. Quando rileva una corruzione nei primi record di $MFT, incrocia ogni record con il mirror. Se entrambe le copie sono valide e differiscono, chkdsk tratta il mirror come autorevole per i primi record critici (l'ipotesi è che i record attivi siano stati aggiornati più di recente e corrotti nel processo).

Se $MFT è illeggibile e il mirror è illeggibile, chkdsk segnala Windows non riesce a recuperare la master file table. CHKDSK interrotto. A quel punto il recupero richiede strumenti offline — tipicamente il carving per signature FILE attraverso il volume grezzo — piuttosto che l'autoriparazione integrata di NTFS.

Perché $MFTMirr non è un backup completo

Rispecchia solo i file di metadati. I record dal 16 in su — ogni file e directory utente — esistono solo in $MFT. Se $MFT è danneggiata oltre il record 16, il mirror non vi aiuta. Il mirror basta a montare il volume; recuperare file arbitrari dopo un danno richiede le stesse tecniche che usereste senza di esso.

Interesse forense

$MFTMirr è raramente l'artefatto principale di un caso, ma ha due usi:

  • Verifica incrociata. I record 0–15 nel mirror dovrebbero corrispondere bit per bit ai record attivi. Una divergenza suggerisce che uno dei due lati è stato modificato fuori banda (bug del driver, manomissione deliberata, recupero parziale).
  • Istantanea pre-corruzione. Se i record $MFT attivi sono stati modificati ma il mirror non è ancora stato sincronizzato su disco, il mirror contiene lo stato precedente. Questa finestra è breve — NTFS li tiene sincronizzati — ma in un caso di guasto improvviso può essere l'unica copia pulita rimasta.

Domande frequenti

$MFTMirr è uguale a un backup completo della MFT?

No. Contiene solo i primi record (i file di metadati di sistema). I file utente non sono rispecchiati.

Posso analizzare $MFTMirr con gli stessi strumenti di $MFT?

Sì. È strutturalmente identico — stesso formato di record, stesso fixup array, stessi attributi. Trascinatelo sul parser browser o passatelo a MFTECmd.

Posso eliminare o spostare $MFTMirr?

No. Come $MFT, è bloccato mentre Windows è in esecuzione. Disabilitare interamente il mirror non è un'operazione supportata; chkdsk rifiuterebbe il volume.

Cosa succede se il mio disco non ha $MFTMirr?

Ce l'ha. Ogni volume NTFS ne ha uno, creato al momento della formattazione. Se $MFTMirr manca o è illeggibile, il volume è gravemente danneggiato e chkdsk fallirà.

Risorse esterne