Home Page

Tips page
c
cellulari
debian
egittologia
emacs
emacs-latex
hardware
html
inglese
java
latex
linux

*Alcuni comandi utili utilizzando find
*ARP e MAC address
*Ascoltare un CD audio
*Attivare il NumLock (BlocNum)
*Attivare i tasti i tasti Magic SysRq
*AWK, use an environment variable inside a script
*Bash e Argument list too long
*BogoMIPS
*Cancellare file e non recuperare spazio
*Capacita` dell'hard disk
*Come cambiare i font delle applicazioni con librerie GTK
*Come cambiare l'hostname
*Come tentare di recuperare file, filesystem e partizioni
*Compilare in parallelo
*Condividere una partizione
*Configure proxy for shells
*Continuous disk access
*Controllare la salute di hard disk e filesystem
*Convertire ext2 in ext3 (e viceversa)
*Convertire un file di testo dalla codifica DOS a quella UNIX
*Cosa fare quando si perde la password di root
*Cosa significa l'errore ``TCP
*Creare un boot floppy
*Creare un file temporaneo
*Deframmentazione di un filesystem
*Delete last chars from a string
*Determinare lo spazio libero sul disco
*Eliminare il beep
*Emettere un beep da script
*Enable PPP connection on boot
*Exclude a directory with rsync
*Execute telnet from a script
*Gestione dei file di log
*Gestione dei file .iso
*Gestione della data/ora
*Gestione di utenti e gruppi
*Hash md5 di una stringa
*Identificare la distribuzione installata
*I file ps e pdf
*Il file /etc/fstab
*Il file /etc/issue[.net] e /etc/motd
*Il filesystem SysFs
*I link soft ed hard
*Il path delle applicazioni
*Il sistema tutto in maiuscolo
*I moduli del kernel
*Impostare piu` IP per una scheda di rete
*Introduzione a LVM
*Inviare messaggi agli altri utenti
*I permessi della directory root, /
*La gerarchia del filesystem di Linux
*La memoria Ram sotto Linux
*La memoria swap
*Limitare la possibilita` di diventare root
*Limitazioni alla dimensione del file
*Log dei login utente
*Modificare il comportamento di ctrl+alt+canc
*Modificare le variabili della parent shell
*Montare o rimontare un filesystem come read-only
*More columns in a shell output
*Negare il login durante la manutenzione del sistema
*NoHUP
*Obtain the exact process start time
*Ottenere uno snapshot dello schermo
*Partizionamento di un sistema Linux
*Perche' si usa ./ per avviare alcuni eseguibili
*Permanent PPP connection
*PID of a process
*Programmare l'esecuzione dei programmi
*Quale processo utilizza un certo file o porta
*Quali vantaggi si hanno dalla ricompilazione
*Remove from find results
*Ricreare velocemente /tmp al boot
*Ridirezione dell'output
*Rimappare la tastiera
*Ripristinare i caratteri sballati in console
*Riscrivere l'MBR
*Salvarsi da un ``rm'' di troppo...
*Save MBR
*Scrivere in modo sincrono su filesystem
*Scrivere nel log di sistema di Linux
*Separazione dei comandi nella shell
*Separazione delle parole nella shell
*Share the internet connection
*Shell configuration files
*Single quote character escape with sed
*Spostare una directory in un'altra partizione
*Stimare il carico di lavoro della macchina
*Undelete di un file
*Usare le pendrive USB sotto Linux
*Usare partizioni primarie o estese
*Use md5sum to verify saved files
*Use ssh and scp without password
*Utilizzare hdparm per controllare gli hard disk
*Verificare un file video
*What is a zombie process
*What is the file System.map?
*What is the shebang? (Shell scripts)
*What shared libraries a program uses
*Yesterday date

matlab
misc
mysql
network
octave
programming
python
security
sed
tech
webapps
windows

University Page

Programming

Debian & Linux

Some works

About me

Del.icio.us Bookmarks

BOINC Combined Statistics

Site Statistics

Contact me sending an e-mail (antispam defense activated)

debian

hacker emblem

blogger

GeoURL

View Sandro Tosi's profile on LinkedIn

This is my Google PageRank

Title: Deframmentazione di un filesystem
Author: Sandro Tosi
Last modified: 2004-11-14   (2004-11-07)   (2004-10-31)   (2004-10-06)
	       (18/07/2004)

La frammentazione avviene quando il sistema non riesce ad allocare uno
spazio contiguo sul disco  sufficiente a contenere interamente un file
in una singola locazione. Quando succede, il file deve essere separato
in due o piu` pezzi che sono  scritti in diversi posti del disco ed il
filesystem deve mantenere una struttura per tener traccia di dove sono
memorizzati questi frammenti.

All'aumentare del numero  di frammenti, la velocita` di  lettura di un
file  diminuisce, in  quanto  e` necessario  leggere continuamente  le
strutture di  indicizzazione dei file  e spostare la testina  in parti
diversi del disco.

Quella  appena   descritta  e`   la  frammentazione  esterna,   a  cui
solitamente  ci si  riferisce.  Esiste pero`  anche la  frammentazione
interna. Dal  momento che  il blocco e`  l'unita di  allocazione base,
ogni  file utilizzera`  almeno un  blocco.  Se un  file ha  dimensione
inferiore a quella di un blocco, o se un file e` molto grande e la sua
dimensione non e` un multiplo della dimensione dei blocchi, il sistema
deve allocare  un blocco non completamente pieno,  causando uno spreco
di spazio. Questo spreco e`  la frammentazione interna, a cui non c'e`
soluzione: puo`  essere arginata riducendo la  dimensione dei blocchi,
ma questo puo` impattare sulle performance.

Reduci dai macelli di Windows, ci si puo` chiedere se il filesystem di
Linux  (ext2/3, per  gli altri  il discorso  diventa troppo  ampio, ma
rimane sostanzialmente valido) abbia bisogno di essere deframmentato.

Beh,  la  risposta   e`  no:  il  filesystem  di   Linux  e`  studiato
appositamente per ridurre il processo di frammentazione (eliminarlo e`
praticamente  impossibile) e quindi  il problema  ha un  impatto molto
minore che sotto i sistemi Windows.

Quando  deve essere  scritto un  file, Linux  cerca uno  spazio libero
contiguo sufficiente a contenerlo; se non lo trova, cerchera` allora i
due piu`  grandi blocchi libero in  grado di contenere  questo file, e
cosi`  via, sempre  cercando di  mantenere il  numero di  frammenti il
minore possibile.

Statisticamente, in presenza di  continue creazioni e cancellazioni di
file, questo metodo funziona; risulta invece scarsamente efficiente in
presenza di partizioni molto occupate (oltre il 90%), in quanto non e`
sempre facile trovare spazio libero contiguo.

Inoltre, viene  anche utilizzata la  tecnica della ``preallocazione'':
per  i file  normali vengono  riservati  dei blocchi  prima che  siano
effettivamente necessari; quando il file aumentera` di spazio, diversi
blocchi adiacenti saranno gia` disponibili.

Per conoscere la percentuale di frammentazione di un fs, si esegua

# fsck <filesystem>

che   restituira`,  tra   le   altre  informazioni,   anche  la   voce
``non-contiguous''  ed   un  valore  in  percentuale:   quella  e`  la
percentuale di frammentazione del filesystem esaminato.

Probabilmente, non esiste nemmeno  uno strumento apposito per eseguire
la deframmentazione di un fs, in quanto la pratica comune e` quella di
salvare l'intero contenuto del fs  da deframmentare da un altra parte,
formattare il fs, e ricopiare i dati sopra.

Naturalmente,  una  buona strategia  di  partizionamento dello  spazio
disco  consente di  ridurre  ancora  di piu`  il  problema: parti  del
sistema  che  tendono  a  non  cambiare, come  /usr  (che  solitamente
contiene i  programmi), possono  essere messe in  partizioni separate,
che saranno  dunque a bassa frammentazione; se  l'utilizzo del sistema
e` per  file-, mail-, news-  oppure database-server, le  directory che
contengono quei dati saranno ad alta frammentazione.

Nota: non  tutti i fs sono  esenti da frammentazione,  per esempio JFS
soffre di questo problema.