Deframmentazione in Linux

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Yellowhat
Linux 2.x
Linux 2.x
Messaggi: 218
Iscritto il: mer 26 dic 2007, 16:58
Slackware: Current
Località: Modena

Deframmentazione in Linux

Messaggio da Yellowhat »

Deframmentando le partizioni windows mi sono posto il problema di com'è possibile che i file system linux non hanno questo problema.
Perciò mi potreste spiegare come fà linux a non aver bisogno di essere deframmentato?

Avatar utente
Bruffandino
Linux 1.x
Linux 1.x
Messaggi: 183
Iscritto il: mer 24 nov 2004, 0:00
Slackware: 12.2
Kernel: 2.6.28
Desktop: KDE 3.5.10

Re: Deframmentazione in Linux

Messaggio da Bruffandino »

Detto in due parole (non è così banale la cosa ovviamente):
Quando in Windows copi un nuovo file, questo viene memorizzato nelle prime posizioni di memoria disponibili (contigue o non)..questo crea frammentazione..
In linux invece il file copiato viene memorizzato in un'area di memoria in cui tutto il file (se possibile) ci sta.. chiaramente anche così si crea frammentazione.. ma a quanto si dice il problema non è rilevante se lo spazio occupato sulla partizione non supera il 95%..

Tutto ciò vale per ext2/3.. per le altre credo sia simile il discorso..

Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Deframmentazione in Linux

Messaggio da phobos3576 »

Prima di tutto devi immaginare un hard disk come se fosse un vettore di n elementi consecutivi e contigui (anche se in realtà non è così); ogni elemento ha una dimensione fissa (ad esempio, 1024 byte). Un file di grosse dimensioni, viene quindi spezzato in tanti blocchi da 1024 byte per poter essere memorizzato sull'hard disk.

L'ideale sarebbe disporre tutti questi blocchi in modo consecutivo e contiguo; in questo modo, le testine dell'hard disk possono accedere in I/O al file nel modo più rapido possibile. Non sempre però tutto ciò è possibile; a forza di creare, modificare e cancellare file, sull'hard disk si vengono a formare zone occupate intervallate da zone libere.
Sin dai tempi del DOS, la Microsoft ha ritenuto che il modo migliore per affrontare questo problema consistesse nel rappresentare il file sotto forma di una "lista collegata" e cioè, una sequenza di blocchi sparpagliati nelle varie zone libere dell'hard disk; ciascun blocco di uno stesso file, ha un puntatore al blocco successivo in modo da permettere al sistema operativo di percorrere il file stesso dal primo all'ultimo blocco.
Il sistema adottato dalla Microsoft porta rapidamente ad una gigantesca frammentazione dell'hard disk con migliaia di file che si intrecciano tra loro in modo pauroso; ciò richiede l'uso di appositi tool di deframmentazione per evitare che la testina dell'hard disk arrivi letteralmente ad impazzire a causa dei continui salti da un blocco all'altro.

I filesystem adottati in ambiente Linux utilizzano sofisticati algoritmi che permettono di ottimizzare al massimo la disposizione dei file sull'hard disk; in sostanza, ogni volta che si deve memorizzare un file su filesystem ext3, ad esempio, Linux va a cercare la sequenza di blocchi liberi, consecutivi e contigui, che più si avvicinano alla dimensione del file da memorizzare.
Ad esempio, se devo memorizzare un file da 120 MB e Linux trova tre aree libere sull'hard disk, una da 250 Mb, una da 130 MB e una da 540 MB, viene chiaramente scelta l'area libera da 130 MB; inoltre, in caso di modifica o cancellazione di un file, viene anche effettuata una riorganizzazione dell'hard disk con lo scopo di unire in un unico blocco il maggior numero di aree libere vicine tra loro.

Come si può facilmente capire, anche questo sistema è soggetto a frammentazione, ma ciò accade in periodi di tempo lunghissimi (diversi anni) e in modo tanto più irrilevante quanto maggiore è lo spazio libero presente sull'hard disk.

Adesso la Microsoft si è resa conto che la strada adottata da Linux, UNIX, BSD, Solaris, etc, è molto più conveniente e sta cercando di rimediare attraverso un apposito filesystem che doveva essere introdotto a partire da Windows Vista con il nome "WinFS"; all'ultimo momento hanno rinunciato a causa dei troppi crash che hanno ottenuto durante i test.

In pratica, anche copiando spudoratamente non riescono ad ottenere risultati.

Avatar utente
EmaDaCuz
Linux 3.x
Linux 3.x
Messaggi: 877
Iscritto il: sab 28 gen 2006, 15:47
Slackware: 12.0 - ma a Trieste
Kernel: 2.6.25
Desktop: Fluxbox
Distribuzione: Debian e Arch
Località: Nijmegen, NL
Contatta:

Re: Deframmentazione in Linux

Messaggio da EmaDaCuz »

Io mi collego solo in parte al discorso. Vi chiedo, esiste un tool per deframmentare un HD in FAT32 da Linux? Ve lo chiedo perchè ho un vecchio HD esterno ridotto ormai ad un colabrodo, dove i frammenti di file sono ormai disposti in maniera casuale.

Offtopic: Premetto che non ho usato il tasto Cerca e nemmeno un motore di ricerca :D

birg81
Linux 3.x
Linux 3.x
Messaggi: 760
Iscritto il: lun 16 gen 2006, 10:57
Nome Cognome: Biagio
Slackware: 12.2
Kernel: 3.4.7
Desktop: LxDE
Distribuzione: ArchLinux
Località: Castellammare di Stabia (NA)
Contatta:

Re: Deframmentazione in Linux

Messaggio da birg81 »

EmaDaCuz ha scritto:Io mi collego solo in parte al discorso. Vi chiedo, esiste un tool per deframmentare un HD in FAT32 da Linux? Ve lo chiedo perchè ho un vecchio HD esterno ridotto ormai ad un colabrodo, dove i frammenti di file sono ormai disposti in maniera casuale.
E ora la mia domand sorge spontanea, la gestione dello spazio su una fat32 è fatta meglio con linux o meglio con windows?

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Deframmentazione in Linux

Messaggio da Mario Vanoni »

birg81 ha scritto: E ora la mia domand sorge spontanea, la gestione dello spazio su una fat32 è fatta meglio con linux o meglio con windows?
Dimentichi UNIX, nel 1986 era AT&T SVR2 a 32bit,
con tanto di fsck per riorganizzare il disco, 72MB ai tempi,
windoze non esisteva, solo M$-DO$ 2 a 8bit.
Due mondi gia` allora, e Linux e` IMHO UNIX II.

birg81
Linux 3.x
Linux 3.x
Messaggi: 760
Iscritto il: lun 16 gen 2006, 10:57
Nome Cognome: Biagio
Slackware: 12.2
Kernel: 3.4.7
Desktop: LxDE
Distribuzione: ArchLinux
Località: Castellammare di Stabia (NA)
Contatta:

Re: Deframmentazione in Linux

Messaggio da birg81 »

Mario Vanoni ha scritto:Dimentichi UNIX, nel 1986 era AT&T SVR2 a 32bit,
con tanto di fsck per riorganizzare il disco, 72MB ai tempi,
windoze non esisteva, solo M$-DO$ 2 a 8bit.
Due mondi gia` allora, e Linux e` IMHO UNIX II.
si ma non mi hai fatto capire in ambito di livello di deframmentazione interna / esterna utilizzando una fat (fat / fat32) che è che produce piu' frammentazione o è indifferente e dipende solo dal file system?

Avatar utente
FireEater
Linux 3.x
Linux 3.x
Messaggi: 508
Iscritto il: sab 5 feb 2005, 0:00
Nome Cognome: Giuseppe M.
Slackware: Current
Kernel: 2.6.32.7-smp
Desktop: kde 4.3.4
Località: Cagliari <---> Torino

Re: Deframmentazione in Linux

Messaggio da FireEater »

birg81 ha scritto: si ma non mi hai fatto capire in ambito di livello di deframmentazione interna / esterna utilizzando una fat (fat / fat32) che è che produce piu' frammentazione o è indifferente e dipende solo dal file system?
Il sistema operativo memorizza i file in base alle specifiche del filesystem.
I filesystem FAT si basano sulla File Allocation Table, la tabella in cui è memorizzato PER OGNI CLUSTER l'indirizzo del successivo cluster che compone il file memorizzato(in parte) in quel cluster oppure se il cluster stesso è libero, riservato o danneggiato.
Per come è strutturato si creerebbe un overhead troppo alto per la ricerca di spazi liberi contigui prima della fase di scrittura di un nuovo file.

UFS e ext2 (gli altri non saprei), hanno un indice prima di ogni cilindro(furbo eh!?) in modo che le testine non debbano spostarsi fino all'inizio dell'HD per andare a vedere l'indirizzo di una eventuale parte non contigua. Anche se comunque è nato dopo parecchi anni rispetto al FAT.
birg81 ha scritto: si ma non mi hai fatto capire in ambito di livello di deframmentazione interna / esterna
Il discorso della frammentazione interna appartiene ai Cluster di dimensione fissa (altro problema di cui è affetto il filesystem FAT mentre ext2 no) perchè nell'ultimo cluster che contiene il file resta quasi sempre spazio libero sprecato.
La frammentazione esterna mi pare che non esista(nei filesystem).

Ciao a tutti.
fire_eater

Rispondi