Quando un file viene scritto in un disco, a volte il file non può essere scritto in cluster contigui. I cluster non contigui rallentano il processo di lettura e scrittura di un file. L'ulteriore differenza su un disco i cluster non contigui sono, il peggio è il problema, a causa del tempo necessario per spostare la testa di lettura/scrittura di un'unità disco rigido. Un file con cluster non contigui viene frammentato. Per ottimizzare i file per l'accesso rapido, è possibile deframmentare un volume.
La deframmentazione è il processo di spostamento di parti di file in un disco per deframmentare i file, ovvero il processo di spostamento di cluster di file su un disco per renderli contigui. Per ulteriori informazioni, vedere le sezioni seguenti:
In un semplice sistema operativo a singola attività, il software di deframmentazione è l'unica attività e non ci sono altri processi da leggere o scrivere sul disco. Tuttavia, in un sistema operativo multitasking, alcuni processi possono leggere e scrivere in un'unità disco rigido mentre un altro processo deframmenta l'unità disco rigido. Il trucco consiste nell'evitare scritture in un file deframmentato senza interrompere il processo di scrittura per molto tempo. La risoluzione di questo problema non è semplice, ma è possibile.
Per consentire la deframmentazione senza richiedere una conoscenza dettagliata della struttura del disco del file system, viene fornito un set di tre codici di controllo. I codici di controllo forniscono le funzionalità seguenti:
Abilitare le applicazioni per individuare cluster vuoti
Determinare il percorso del disco dei cluster di file
Spostare i cluster in un disco
I codici di controllo gestiscono anche in modo trasparente il problema di inibire e consentire ad altri processi di leggere e scrivere nei file durante gli spostamenti.
Queste operazioni possono essere eseguite senza impedire l'esecuzione di altri processi. Tuttavia, gli altri processi hanno tempi di risposta più lenti mentre un'unità disco viene deframmentata.
Se necessario, spostare altri file per creare un posto abbastanza grande. Idealmente, dopo il primo extent del file è possibile spostare gli extent successivi nello spazio dopo il primo extent.
Potrebbe essere necessario rinnovare la bitmap o la struttura di recupero oppure entrambe le volte come altri processi scrivono sul disco.
Due delle operazioni usate nel processo di deframmentazione richiedono un handle per un volume. Solo gli amministratori possono ottenere un handle per un volume, in modo che solo gli amministratori possano deframmentare un volume. Un'applicazione deve controllare i diritti di un utente che tenta di eseguire il software di deframmentazione e non deve consentire a un utente di deframmentare un volume se l'utente non dispone dei diritti appropriati.
Quando si usa CreateFile per aprire una directory durante la deframmentazione di un volume di file system FAT o FAT32, specificare il valore della maschera di accesso GENERIC_READ . Non specificare il valore della maschera di accesso MAXIMUM_ALLOWED . L'accesso alla directory viene negato se questa operazione viene eseguita.
Non tentare di spostare i cluster allocati in un file system NTFS che si estende oltre le dimensioni del file arrotondate al cluster, perché il risultato è un errore.
È possibile deframmentare i punti, le bitmap e gli elenchi di attributi nei volumi del file system NTFS, aprire per la lettura e la sincronizzazione e assegnare un nome usando la sintassi file:name:type, ad esempio dirname:$i 30:$INDEX_ALLOCATION, mrp::$DATA, mrp::$REPARSE_POINT e mrp::$ATTRIBUTE_LIST.
Quando si deframmenta i volumi del file system NTFS, è consentito deframmentare un cluster virtuale oltre le dimensioni di allocazione di un file.
Riduzione al minimo delle interazioni tra deframmentazione e copie shadow
Quando possibile, spostare i dati in blocchi allineati l'uno rispetto all'altro in incrementi di 16 kilobyte (KB). Ciò riduce il sovraccarico di copia su scrittura quando le copie shadow sono abilitate, perché lo spazio di copia shadow è aumentato e le prestazioni vengono ridotte quando si verificano le condizioni seguenti:
Le dimensioni del blocco di richieste di spostamento sono inferiori a 16 KB.
Il delta di spostamento non è in incrementi di 16 KB.
Il delta di spostamento è il numero di byte tra l'inizio del blocco di origine e l'inizio del blocco di destinazione. In altre parole, un blocco a partire dall'offset X (su disco) può essere spostato in un offset iniziale Y se il valore assoluto di X meno Y è un multiplo pari a 16 KB. Supponendo quindi che i cluster da 4 KB, il passaggio dal cluster 3 al cluster 27 sarà ottimizzato, ma non sarà possibile passare dal cluster 18 al cluster 24. Si noti che mod(3,4) = 3 = mod(27,4). Mod 4 viene scelto perché quattro cluster a 4 KB ciascuno equivale a 16 KB. Pertanto, un volume formattato con dimensioni del cluster di 16 KB comporterà l'ottimizzazione di tutti i file di spostamento.
File, flussi e tipi di flusso supportati per la deframmentazione
Anche se la maggior parte dei file può essere spostata usando il codice di controllo FSCTL_MOVE_FILE , non tutti possono essere spostati. Di seguito è riportato l'elenco di file, flussi e tipi di flusso (detti anche codici di tipo attributo) supportati da FSCTL_MOVE_FILE. Altri file, flussi e tipi di flusso non sono supportati da FSCTL_MOVE_FILE.
Tipi di flusso supportati per qualsiasi file o directory.
::$DATA
::$ATTRIBUTE_LIST
::$REPARSE_POINT
::$EA
::$LOGGED_UTILITY_STREAM
Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: ::$EA e ::$LOGGED_UTILITY_STREAM non sono supportati prima di Windows 8 e Windows Server 2012
Tipi di flusso supportati per qualsiasi directory.
::$BITMAP
::$INDEX_ALLOCATION
Di seguito sono riportati i tipi di file di sistema, flusso e flusso supportati da FSCTL_MOVE_FILE nel formato "nomefile:nomefile:$typename".
This module explores file system fragmentation and the tools that you can use to reduce fragmentation. Students will learn how Windows can compress files to take up less space on the hard disk.
Sposta uno o più cluster virtuali di un file da un cluster logico a un altro all'interno dello stesso volume. Questa operazione viene usata durante la deframmentazione.
Dato un handle di file, recupera una struttura di dati che descrive l'allocazione e la posizione su disco di un file specifico oppure, dato un handle di volume, i percorsi dei cluster non valido in un volume.
Un'etichetta è un nome descrittivo assegnato a un volume, in genere da parte di un utente finale, per semplificare il riconoscimento. Un volume può avere un'etichetta, una lettera di unità, entrambi o nessuno dei due. Per impostare l'etichetta per un volume, usare la funzione SetVolumeLabel.