C'è uno strumento che mi mostrerebbe un file specifico su disco, quanto è frammentato? (Quante cerca ha bisogno disco fisico da fare se dovessi leggere il file in modo lineare)Come vedere la frammentazione di un file specifico?
risposta
È possibile utilizzare DeviceIoControl
con FSCTL_GET_VOLUME_BITMAP
, FSCTL_GET_RETRIEVAL_POINTERS
e FSCTL_MOVE_FILE
, vedere Defragmenting Files.
È inoltre possibile trovare esempi di codice diversi se si cerca FSCTL_MOVE_FILE
.
Ecco uno in C e un altro in .NET.
fsutil file queryallocranges offset=<o> length=<l> <file>
ti mostrerà le estensioni del file che ti serviranno i diritti di amministratore.
Lo strumento Sysinternals contig con il parametro -a
può eseguire questa operazione per un file o tutti i file in una cartella e nelle relative sottocartelle.
E, naturalmente, "frammentazione" è sospetto:
- Il file potrebbe essere in pezzi dello stesso cilindro. Nessuna ricerca in alto, solo latenza rotazionale. O non come i pezzi possono essere un ordine ottimale (le probabilità sono vicine allo zero per questo).
- Il file può essere "contiguo" ma su più cilindri. Anche la lettura sequenziale comporterà ricerche.
- Il file potrebbe essere su un set di strisce e non si ha idea di dove siano i limiti. È possibile saltare a un altro controller, un altro mandrino o un'altra partizione sulla stessa unità.
Fai attenzione a quali conclusioni tracci.
filefrag è lo strumento che stai cercando, se stai usando Linux. Utilizzare il parametro -v con nomefile per ottenere l'elenco dettagliato della frammentazione. http://linux.die.net/man/8/filefrag
Sei il mio eroe! –
@SmitJohnth, wow, era ancora utile? Ho pensato che con la SSD: s della frammentazione di oggi non era più un problema. –
Gli SSD sono ancora troppo costosi per archiviarli, anche dopo che i prezzi dell'HDD non sono diminuiti negli ultimi anni. Ho creato un grande file di testo, ho provato a cercarlo e ho notato che era troppo lento. Ho misurato la lettura di speen e poi ho iniziato a sospettare qualcosa ... Ora è stato risolto. –