Come si fa a mappa settori fisici di un disco per i file che li contengono in un volume HFS + su Mac OS X
-
21-09-2019 - |
Domanda
Ho Ripristino di un disco rigido utilizzando dd_rescue , che mi fornisce un elenco di tutti i settori dei dispositivi non potrebbe copiare a causa di errori hardware.
Mi piacerebbe prendere quella lista, e scrivere uno strumento per darmi tutti i file che contengono questi settori danneggiati modo che io possa eliminare. Non sono sicuro di quello che le API che posso usare per fare questo - essenzialmente voglio ottenere un elenco di tutti i file sul disco e per ogni file, un elenco delle gamme dei settori che occupa sul disco
.La mia prima risposta è che io iterare su ogni voce di directory sul disco e controllare per vedere se il file si sovrappone uno di questi settori danneggiati. Forse c'è un modo migliore.
Soluzione
Se si desidera mappare dati di posizione di un file ad un blocco fisico (settore), è possibile utilizzare il fcntl (2) chiamare con il comando F_LOG2PHYS. Non tutti i file system supportano questo comando, ma HFS + fa. Basta usare lseek per scegliere il file di offset e si può ottenere indietro il diskoffset da F_LOG2PHYS (è tornato in una struttura log2phys nel campo l2p_devoffset). Vedere fcntl.h per maggiori dettagli.
Altri suggerimenti
Non c'è API esposte per l'estirpazione attraverso HFS + file system, ma il fonte per il filesystem è disponibile da Apple come parte del kernel XNU. Verificate anche la hfsdebug strumento che potrebbe aiutare a comprendere le fs.
E 'una vecchia questione, ma dal momento che è ancora tra i primi successi durante la ricerca l'argomento, ecco a tutti coloro che hanno cercata:
Dal momento che Mac OS X 10.6 fsck_hfs (8) possono mappare settori fisici di file (vedi opzione -B). Una nota sull'utilizzo: corrispondenza avrà successo solo se la verifica del catalogo è stata effettivamente eseguita. Così si potrebbe avere per forza il controllo con le opzioni -l o -f.
A proposito, hfsdebug come binario PPC si basa su Rosetta e quindi non verrà eseguito su Lion o successivo.