Miti e leggende sulla frammentazione del file system [WAS Re: programmi indispensabili] [messaggio #36543] |
sab, 12 marzo 2011 15:47 |
Enrico 'Henryx' Bianc Messaggi: 212 Registrato: febbraio 2011 |
Senior Member |
|
|
Francesco wrote:
> Mi sembra di ricordare che l'fsck schedulato aiutasse in tal senso
Fsck non deframmenta, da quel punto di vista si limita soltanto ad
analizzare il livello di frammentazione del disco. A questo punto, direi che
sia ora di sfatare il mito del "Linux non ha bisogno della
deframmentazione". Linux ha bisogno della deframmentazione, ma solo in certi
contesti. Supponiamo che quello rappresentato qui sotto sia un disco rigido
formattato in FAT (in NTFS dovrebbe essere identico, ma non ne sono sicuro)
dove ogni settore rappresenta un byte:
-----------------------
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
-----------------------
Nel momento di scrivere i dati del file A, avremo questa situazione:
-----------------------
|A|A|A|A| | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
-----------------------
Ora, supponiamo di aggiungere il file B:
-----------------------
|A|A|A|A|B|B|B|B|B|B|B|
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
-----------------------
E, successivamente, di modificare il file A:
-----------------------
|A|A|A|A|B|B|B|B|B|B|B|
|A|A|A| | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
-----------------------
La situazione penso che sia chiara: abbiamo il file A frammentato in quanto
i suoi dati sono sparsi per il disco a causa di una occupazione del file
system da parte di altri dati. Cosa succede su Linux? Partiamo dalla
scrittura del file A:
-----------------------
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | |A|A|A|A| | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
-----------------------
In sostanza, non e` detto che la scrittura del file sia sequenziale, anzi,
aggiungendo il file B nulla ci vieta di avere questa situazione:
-----------------------
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | |B|B|B|B|B|B|
|B| | | | | | | | | | |
| | |A|A|A|A| | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
-----------------------
Ovvero, l'allocazione non e` per nulla contigua rispetto allo spazio
occupato disponibile. Questo perche` in Linux e` implementato un algoritmo
di rilocazione dei file in modo da evitare partendo *dalla* *radice*
problematiche di frammentazione. Questo e` ottimo, ma solo in determinate
circostanze, ovvero, non e` infrequente di ritrovarsi in situazioni del
genere:
-----------------------
| | |C|C| | | | | | | |
| | | | | | | | | | | |
| | | | | |B|B|B|B|B|B|
|B|B|B|B|B|B|B|B|B|B|B|
|B|B|A|A|A|A|A|B|B|A|A|
|A| | | | |E|E|E|E| | |
| |F|F|F| | | | | | | |
| | | | | | |D|D|D|D|D|
-----------------------
In altre parole, la crescita del file B (che potrebbe essere benissimo un
log) e` stata tale da provocare sia la sua frammentazione che la
frammentazione di altri file. E a questo non c'e` file system che tenga,
l'unica e` deframmentare, e gli unici modi per farlo sono tramite gli
appositi tool (se esistono) o ricreando il file. Su Windows, tali tool sono
disponibili in una infinita` di modi (da quelli che usano il motore interno,
come MyDefrag, a quelli che ne implementano uno proprio), sotto Linux o non
sono disponibili (e.g. per ext3 non esistono, mentre per ext2 esiste e per
ext4 e` pianificato), o sono disponibili solo per determinati file system
(e.g. per XFS c'e` xfs_fsr). Questo, ovviamente, non significa che una delle
due situazioni sia meglio dell'altra, ma semplicemente che ogni sistema si
approccia in modo differente al problema (in Windows ci si affida totalmente
al defrag, in Linux si cerca prima di evitare il problema e poi, se proprio
non si puo` evitare, ti allerta)
Enrico
P.S. e` impostato l'xpost con it.comp.os.linux.iniziare
P.S. giusto per completezza, su Linux esiste filefrag che mostra lo stato di
frammentazione di un file
P.P.S. per chi sia interessato al discorso, puo` partire da qui:
http://en.wikipedia.org/wiki/Defragmentation (tra le altre cose vi e` un
link ad uno schema piu` dettagliato di quello che ho fatto io)
|
|
|