Per file system si intende l'astrazione (metodo e protocolli) con cui un sistema operativo organizza i file su un supporto fisico di memorizzazione ad accesso casuale (floppy, cdrom, memoria, hard disk...).
I sistemi operativi moderni tipicamente utilizzano un sistema gerarchico (diviso in directory e sottodirectory) e possono supportare nativamente uno o più diversi file system.
Linux grazie alla sua polivalenza permette di utilizzare quasi tutti i file system più diffusi, ma il suo file system "storico" è ext2.
Dal kernel 2.4.x è disponibile il supporto per un'evoluzione dell'ext2, l'ext3 che, oltre ad essere convertibile facilmente in ext2, ha il vantaggio di essere un journal file system (basato su un log di tutte le operazioni di scrittura su disco, che aumenta l'integrità e il controllo .
Prima di poter utilizzare un qualsiasi dispositivo con il proprio filesystem (es: CDROM, floppy, tape, condivisione di rete windows, directory nfs, partizione fat32 di un hard disk... ) questo deve essere formattato e montato in una subdirectory della root ( / ).
Una volta montato il filesystem risulta accessibile a programmi e utenti in modo trasparente e diventa parte integrante dell'albero delle directory sotto /.
Dopo l'uso il filesystem può essere smontato (operazione necessaria per espellere un CDROM o un floppy).
La directory su cui viene montato un filesystem può anche non essere vuota, ma nel momento in cui ci viene montato un file system, i dati ivi contenuti non sono più visibili fino a quando non si esegue l'umount.
La gestione di diversi file system all'interno dello stesso albero di directory (la root: /) permette l'astrazione dei device hardware da parte del sistema operativo: per i programmi e gli utenti che accedono a determinati file non è importante conoscere o sapere su che tipo di dispositivo risiedono e possono accedere e gestire tutti i file con gli stessi strumenti, a prescindere dall'hardware su cui sono registrati.
In questo file vengono configurate le informazioni sui vari file system (da montare al boot o no) preimpostati sul sistema, vengono definiti i mount point, il tipo di file system ed altre informazioni.
Il suo formato prevede per ogni riga le seguenti informazioni:
1- Dispositivo da montare (es: /dev/hda1 o anche host:dir )
2- Mount point sul file system principale
3- File System Type da utilizzare (es: ext2, ext3, iso9660, nfs...)
4- Opzioni specifiche per il mount
5- Indica se il file system deve essere backuppato con il comando dump. Uno 0 indica NO.
6- Indica de deve essere fatto un file system check al boot. Uno 0 indica NESSUN CHECK.
Qui viene analizzato un tipico /etc/fstab su Linux.
Su SUN Solaris il file equivalente si chiama /etc/vfstab.
cat /etc/fstab
/dev/hda2 / ext2 defaults 1 1
/dev/hda1 /boot ext2 defaults 1 2
/dev/hdc1 /home ext2 defaults 1 2
/dev/fd0 /mnt/floppy auto noauto,owner 0 0
/dev/hda7 /usr ext2 defaults 1 2
/dev/hdc2 /var ext2 defaults 1 2
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
/dev/hda3 swap swap defaults 0 0
In questo esempio la root ( / ) è montata sulla seconda partizione dell'hard disk IDE primary master ( /deb/hda2 ) e al suo interno monta altre directory che sono fisicamente presneti in altre partizioni di hda o in un secondo hard disk, il secondary master ( /dev/hdc ).
In questo caso tutti i file system su tutte le partizioni sono ext2, ma ogni partizione potrebbe avere un proprio file system.
Notare inoltre la partizione di swap in /dev/hda3, il /proc file system virtuale (che non ha mount point) e il device pts, che è un'interfaccia virtuale per i pseudo terminali (pts).
Considerare l'entry per il floppy, identificato da /dev/fd0 e montato in /mnt/floppy. Tra le opzioni di mount c'è specificato un noauto che indica di non motnare automaticamente il floppy all'avvio. I due zero a fine riga, inoltre, segnalano al sistema di non controllarlo al boot e di non usarlo per backup con il comando dump.
E' molto semplice.
Editando /etc/fstab
si ha la possibilità di montare la partizione di Windows con tutte le opzioni indispensabili per permettere l'utilizzo della suddetta partizione senza essere root.
Per farlo, ovviamente, il propri kernel deve avere il supporto di NTFS (su RedHat non è presente di default e va scaricato da Internet l'RPM del modulo NTFS oppure ricompilato il kernel).
[neo@dido neo]$ cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda2 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hda4 /w2kntfs defaults,user,umask=022 0 0
Quest'ultima entry si riferisce proprio alla partizione di Windows, in evidenzia le opzioni per il mounting.
Quota permette di gestire lo spazio occupato su disco dei singoli utenti o dei singoli gruppi, limitando ad esempio lo spazio riservato alla posta di un singolo utente.
Per poter utilizzare quota, occorre che il kernel supporti tale feature, quindi occorre ricompilare il kernel se quello attualmente in uso non ne ha il supporto. Non esiste un singolo file di configurazione di quota, occorre modificare dei file esistenti per attivare il servizio al boot e schedulare il check dei filesytem.
I procedimenti da seguire sono 3: l'attivazione al boot, la configurazione di /etc/fstab e la schedulazione dei controlli. Per vedere lo spazio utilizzato da un singolo utente utilizzare il comando for user in `ls`; do echo `du -ms $user`; done;
Permette di inserire un file system presente in un dato device nella struttura di directory principale del sistema, a partire dalla directory indicata.
Questa operazione viene definita "montare" e di fatto rende visibile al sistema il contenuto di dispositivi quali CD-ROM, floppy ma anche hard disk o file system di rete.
Il comando mount senza opzioni visualizza l'elenco dei file system attualmente montati nel sistema.
Nel file di configurazione /etc/fstab sono elencati i parametri di mounting dei vari dispositivi del sistema predefiniti: per montare le voci presenti in questo file basta specificare come parametro di mount la directory o il device.
Nel file /etc/mtab vengono visualizzati i file system attualmente montati sul sistema.
mount [opzioni] [device] [directory]
-a
Esegue il mount di tutti i file system elencati in /etc/fstab
-o opzione
Specifica le opzioni con cui montare il file system. Sono varie, incidono su diversi aspetti e possono essere specifiche per determinati tipi di file system: async, auto, defaults, dev, exec, noauto, nodev, noexec, nosuid, nouser, remount, ro, rw, suid, sync, user, check, conv, debug, errors.
-r
Esegue il mount del file system in sola lettura
-w
Esegue il mount del file system in lettura/scrittura (opzione di default)
-t tipo_fs
Specifica il tipo di file system da montare. Valori possibili: minix, ext, ext2, ext3, xiafs, hpfs, msdos, umsdos, vfat, proc, nfs, iso9660, smbfs, ncpfs, affs, ufs, romfs, sysv, xenix, coherent, reiserfs, jfs...
Esempi
mount -t vfat /dev/fd0 /mnt/floppy
Monta un floppy formattato sotto Windows sulla directory /mnt/floppy
mount -t iso9660 /dev/hdc /mnt/cdrom
Mount un CD presente nel lettore IDE Secondary master sulla directory /mnt/cdrom
mount -t nfs 192.168.0.10:/home/rpm /mnt/remote
Monta sulla directory /mnt/remote la condivisione NFS /home/rpm del server 192.168.0.10 (il serviazio portmap deve essere attivo sul client)
Smonta il file system specificato e lo rende inaccessibile al sistema.
E' il comando che esegue l'operazione opposta a mount.
Qualsiasi operazione in corso sul filesytem da smontare viene conclusa e la struttura del file system segnata come pulita (clean).
umount [opzioni] [device|directory]
-a
Smonta tutti i file system montati (visualizzati in /etc/mtab)
-n
Smonta tutti i file system montati SENZA memorizzare le modifche in /etc/mtab
-t tipo
Smonta tutti i file system del tipo specificato.
Esempi
umount /dev/fd0
Smonta il floppy (operazione necessaria prima di estrarre fisicamente il dischetto). Questo comando è analogo a umount /mnt/floppy
(se il floppy è montato sulla directory /mnt/floppy.
umount /mnt/cdrom
Smonta il CDROM (se è montato sulla directory /mnt/cdrom). Nello specifico per i CDROM può essere usato il comando eject
che smonta ed espelle il CD.
Crea un filesystem (formatta) sulla partizione specificata. Corrisponde al format di Windows.
mkfs [-V ] [ -t tipo-fs ] [ opzioni-fs ] filesys [blocchi]
filesys
Può essere il nome di una partizione (es: /dev/hda1 ) o un mount point (es: /home )
-t tipo-fs
Indica quale filesystem creare. mkfs è di fatto il frontend generico che invoca la versione appropriata di mkfs (mkfs.fstype) a seconda del tipo di filesystem specificato dall'opzione -t
-c
Verifica il dispositivo cercando eventuali blocchi difettosi prima di creare il filesystem.
L'utilizzo di un floppy disk su Unix e Linux è uguale a quello di altri dispositivi di memorizzazione.
Per usare un floppy disk vergine, bisogna prima formattarlo, con un file system specifico.
Per farlo con ext2, il file system nativo di Linux basta digitare da shell:
mkfs.ext2 /dev/fd0
Una volta formattato il floppy è pronto per essere montato:
mount -t ext2 /dev/fd0 /mnt/floppy
A questo punto il suo contenuto è visibile nella directory /mnt/floppy.
I file al suo interno possono essere accessibili come tutti gli altri file del sistema.
Chiaramente se il floppy è protetto fisicamente in scrittura, non sarà possibile scriverci o fare modifiche.
PRIMA di rimuovere fisicamente il floppy disk bisogna smontarlo, per essere sicuri che il sistema finisca di scrivere eventuali dati rimasti in memoria (Il sistema operativo, per motivi di performance non sempre esegue le operazioni di scrittura sul floppy nel momento in cui vengono richieste, a volte i dati da scrivere rimangono in memoria fino a quando non si forza un "flush" del file system, operazione automaticamente eseguita al momento dell'umount):
umount /dev/fd0
Come convertire un filesystem ext2 in modo che supporti le caratteristiche di journaling del filesystem ext3.
Grazie all'utilty di sistema tune2fs è possibile settare diversi parametri di un filesystem Linux. Questo software permette anche di convertire il formato di un filesystem, passando da ext2 a ext3:
root@Joker:/# tune2fs -j /dev/hda1
L'opzione -j permette di creare il file di journal al filesystem presente in /dev/hda1
tune2fs 1.27 (8-Mar-2002)
Creating journal inode: done
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
Una volta convertito sarà possibile notare il file .journal
nella directory in cui viene montato.
La conversione può essere eseguita anche con il filesystem da convertire in stato unmounted ma è fondamentale che il kernel utilizzato abbia abilitato il supporto per per ext3, altrimenti in seguito sarà impossibile accedervi.
Infine è possibile modificare la relativa entry in /etc/fstab
, cambiando il terzo campo da ext2 in ext3:
root@Joker:~# cat /etc/fstab
[...]
/dev/hda1 /scambio ext2 defaults 1 0
Prima della conversione il filesystem in /dev/hda1 veniva montanto come ext2 sulla directory /scambio
root@Joker:~# cat /etc/fstab
[...]
/dev/hda1 /scambio ext3 defaults 1 0
Dopo la conversione si fa in modo che venga montato in /scambio come ext3
Con questo semplice comando è possibile visualizzare il contenuto di un file .iso (l'immagine di un CDROM da masterizzare) montandolo come un loop device su una directory del proprio file system.
Il kernel deve avere il supporto per i loop device (CONFIG_BLK_DEV_LOOP=y
) e, ovviamente, per il filesystem iso9660 usato su CDROM di dati (CONFIG_ISO9660_FS=y
).
Anche se generalmente non necessario potrebbe servire specificare il filesytem type utilizzato (-t iso9960) e, volendo, abilitare il verbose mode (-vv). Nell'esempio che segue si è montato il file iso sulla directory /mnt/floppy, che ovviamente può essere diversa ed avere un nome più appropriato:
[root@giraffa al]# mount -t iso9660 -o loop -vv /home/al/DOWNLOADS/damnsmall-0.4.4.iso /mnt/floppy/
mount: going to use the loop device /dev/loop0
set_loop(/dev/loop0,/home/al/DOWNLOADS/damnsmall-0.4.4.iso,0): success
mount: setup loop device successfully
/home/al/DOWNLOADS/damnsmall-0.4.4.iso on /mnt/floppy type iso9660 (rw,loop=/dev/loop0)
[root@giraffa al]# mount
[...]
/home/al/DOWNLOADS/damnsmall-0.4.4.iso on /mnt/floppy type iso9660 (rw,loop=/dev/loop0)
Se si vuole creare un file .iso direttamente dal contenuto di un CDROM, oltre ad usare programmi vari per masterizzare, basta il semplice comando:
dd if=/dev/cdrom of=/path/to/file.iso bs=32k
(l'immagine iso sarà scritta nel path specificato dopo of=).
Alternativamente, in modo ancor più diretto e semplice:
cat /dev/cdrom > /path/to/file.iso
Se si vuole creare un file .iso contenente i file presenti in una data directory, si può usare il comando mkisofs:
mkisofs -RJ -o file.iso /directory/
(tutto il contenuto presente in /directory/ verrà inserito nel file.iso (con path relativo))
Explore2fs è un tool per Windows in grado di leggere partizioni partizioni disco di tipo ext2 ed ext3.
Questo software, attualmente alla versione 1.00 pre 6, scritto in in linguaggio Delphi da John Newbigin, viene rilasciato sotto licenza GPL. Si dimostra utile qualora si utilizzi un sistema dual boot Windows/Linux e si necessiti di accedere a partizion di tipo etx2 o ext3 da ambiente Microsoft.
Explore2fs funziona sotto Windows 95, Windows 98, Windows NT, Windows 2000 e Windows XP. Sebbene sia possibile usare il programma anche in scrittura, l'autore consiglia di utilizzarlo solamente in lettura, in quanto potrebbero essere presenti dei bug che potrebbero rendere illeggibile la partizione.
Il programma è composto da un solo eseguibile, che una volta avviato presenta un'interfaccia Explorer like, in stile Windows NT. Sulla sinistra vengono visualizzate le partizioni riconosciute, mentre sulla destra si può accedere ai file contenuti nelle varie directory.
Analizzare il funzionamento dei dischi per ottimizzarne l'utilizzo.
Un semplice programma, hdparm, di solito già installato su quasi tutte le distribuzioni Linux, può essere usato per misurare le prestazioni dell’hard disk.
La sintassi è la seguente:
hdparm -t [device]
dove [device] va sostituito con il nome dell’unità che volete sottoporre al test, ad esempio:
hdparm -t /dev/sdb1
che darà come risultato:
/dev/sdb1:
Timing buffered disk reads: 64 MB in 7.57 seconds = 8.45 MB/sec
Per effettuare, invece, un benchmark del sistema, si può usare nbench, che misura le performance di CPU, FPU e memoria. Esegue dieci diversi test e confronta i risultati ottenuti con quelli di un sistema di riferimento base (maggiori informazioni sono disponibili sul sito dedicato al programma dalla rivista Byte).
Un altro programma utilizzato per la misurazione delle prestazioni del file system è Bonnie (oppure la sua evoluzione Bonnie++), di solito impiegato per analizzare l’incremento (o la diminuzione) delle prestazione del sotto sistema dischi, a volte in abbinamento con altri strumenti come lo stesso hdparm oppure tune2fs.
Il programma scrive e poi legge, come impostazione predefinita, 100 Mb di dati. Con il parametro -s è ovviamente possibile cambiare il numero di Megabyte da utilizzare per il test. L’opzione -html fornisce i risultati in formato html mentre -d serve a specificare una directory diversa da sottoporre al test.
bonnie [-d dir] [-s size] [-html]
Ad esempio:
bonnie -d /home/pippo -s 50
esegue un test con 50Mb nella directory /home/pippo.
Per visualizzare, invece, lo spazio disco ancora disponibile, ecco il comando
check_disk -w 15% -c 10% $(for x in $(cat /proc/mounts |awk '{print $2}')\; do echo -n " -p $x "\; done)
Non esiste un singolo file di configurazione di quota, occorre modificare dei file esistenti per attivare il servizio al boot e schedulare il check dei filesytem.
Di seguito sono riportati i file e le eventuali modifiche per attivare quota su una distribuzione basata su RedHat.
Attivazione al boot
L'attivazione può avvenire tramite uno script eseguito dopo che i filesystem vengono montati. L'installazione tramite rpm aggiunge una serie di righe di codice nello script /etc/rc.d/rc.sysinit
come riportato di seguito:
[root@trinity root]# cat /etc/rc.d/rc.sysinit
[...]
Check del filesystem di root e possibile update dopo un fsck
# Possibly update quotas if fsck was run on /.
grep -E '[[:space:]]+/[[:space:]]+' /etc/fstab | \
awk '{ print $4 }' | \
grep -q quota
_ROOT_HAS_QUOTA=$?
if [ X"$_RUN_QUOTACHECK" = X1 -a \
"$_ROOT_HAS_QUOTA" -a \
-x /sbin/quotacheck ]; then
if [ -x /sbin/convertquota ]; then
if [ -f /quota.user ]; then
action $"Converting old user quota files: " \
/sbin/convertquota -u / && rm -f /quota.user
fi
if [ -f /quota.group ]; then
action $"Converting old group quota files: " \
/sbin/convertquota -g / && rm -f /quota.group
fi
fi
action $"Checking root filesystem quotas: " /sbin/quotacheck -nug /
fi
[...]
Check per altri filesystem
# check remaining quotas other than root
if [ X"$_RUN_QUOTACHECK" = X1 -a -x /sbin/quotacheck ]; then
if [ -x /sbin/convertquota ]; then
# try to convert old quotas
for mountpt in `awk '$4 ~ /quota/{print $2}' /etc/mtab` ; do
if [ -f "$mountpt/quota.user" ]; then
action $"Converting old user quota files: " \
/sbin/convertquota -u $mountpt && \
rm -f $mountpt/quota.user
fi
if [ -f "$mountpt/quota.group" ]; then
action $"Converting old group quota files: " \
/sbin/convertquota -g $mountpt && \
rm -f $mountpt/quota.group
fi
done
fi
action $"Checking local filesystem quotas: " /sbin/quotacheck -aRnug
fi
if [ -x /sbin/quotaon ]; then
action $"Enabling local filesystem quotas: " /sbin/quotaon -aug
fi
Configurazione di /etc/fstab
Per abilitare il check per utente o per gruppo nei filesytem montati tramite /etc/fstab
occorre aggiungere delle opzioni di mounting:
usrquota
per abilitare i check per utente
grpquota
per abilitare il check per gruppo.
Esempio di un /etc/fstab configurato per usare quota:
[root@trinity root]# cat /etc/fstab
LABEL=/ / ext3 defaults,usrquota,grpquota 1 1
LABEL=/boot /boot ext3 defaults 1 2
/dev/hdc1 /archive ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda2 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
Schedulazione dei controlli
Il controllo del file system per verificare se qualche utente ha superato i suoi limiti non avviene in tempo reale ma tramite check periodici che devono essere schedulati tramite crontab, una volta al giorno e possibilmente di notte per evitare problematiche di performance.
Esempio:
[root@trinity root]# cat /etc/crontab
[...]
00 6 * * * root /root/checkquota.sh
[...][root@trinity root]# cat /root/checkquota.sh
#!/bin/sh
# Scripts to check filesystem with quota every week
/sbin/quotacheck -avug
Questo file contiene la "mounted filesystem table", cioè informazioni, aggiornate automaticamente in tempo reale, sui file system montati su un sistema Unix in genere.
Il suo formato è simile a quello di /etc/fstab
(che ha una natura statica) ma alcuni campi hanno significato diverso, nell'ordine:
1- Device;
2- Directory su cui è montato;
3- File System utilizzato;
4- Opzioni di mount;
5- Frequenza di dump fatti (in giorni);
6- Numero di passaggi in fsck paralleli.
cat /etc/mtab
/dev/hda2 / ext2 rw 0 0
none /proc proc rw 0 0
/dev/hda1 /boot ext2 rw 0 0
/dev/hdc1 /home ext2 rw 0 0
/dev/hda7 /usr ext2 rw 0 0
/dev/hdc2 /var ext2 rw 0 0
none /dev/pts devpts rw,gid=5,mode=620 0 0
Questo è l'output di /etc/mtab sullo stesso sistema di cui si è visto il /etc/fstab. Si può notare che le entry relative alla swap (che non è una partizione effettivamente montata sul file system) e al floppy (che non viene montato automaticamente all'avvio) non sono presenti.
In questo caso tutti i file system sono montati in rw (modalità read/write).
Visualizzare velocemente lo spazio occupato dagli utenti presenti su un sistema.
Per visualizzare velocemente un report dello spazio occupato dalla home di ogni utente, è possibile utilizzare l'opzione --max-depth
del comando du
.
Esempio:
root@enigma:/home# du -h --max-depth=1
16K ./lost+found
4.0K ./bart
11M ./homer
44K ./alberto
954M ./webuser
64K ./enigma
38M ./lisa
22M ./maggie
8.0K ./krusty
136K ./flanders
4.0K ./ralph
44K ./skinner
1023M .
L'opzione -h (human) permette di visualizare i dati in modo comprensibile, mentre --max-depth=1 fa in modo che il livello di profondità si estenda come visualizzazione al solo primo livello di directory
Su Solaris è comune trovare, oltre al file sistem nativo, UFS, altri file system di diversa natura. Qui viene presentata una breve rassegna.
File system basati du disco
ufs - Unix File System, lo standard su Solaris.
hsfs - High Sierra file system, utilizzato sui CDROM.
pcfs - L'implementazione Sun del FAT 32 dei sistemi Microsoft
udf - Universal Disk Format per dispositivi ottici, usato su DVD e CDROM, anche scrivibili.
vxfs - Veritas File System. File system ad alte performance (generalmente sostituisce i raw device in ambienti oracle) che viene concesso sotto licenza da Veritas.
File System Distribuiti
nfs - Network File System, il file system di rete più usato in ambienti Unix.
Pseudo File System
tmpfs - File system per scrivere in memoria file senza dover scrivere su disco. Viene usato in /tmp i cui contenuti sono distrutti ad ogni reboot.
swapfs - Utilizzato per gestire lo swapping della memoria su disco
fdfs - File Descriptor File System, fornisce nomi per i file descriptor dei file (dev/fd/0, /dev/fd/1, /dev/fd/2).
procfs - Process File System, contiene l'elenco dei processi attivi nella directory /proc.
Diamo uno sguardo ai file system evoluti con funzionalita' di journaling disponibili per Linux.
Linux implementa una tecnica molto lenta per riprendersi da un crash di sistema. Se un computer con Linux, dotato di un grande sistema di storage va giu', per effettuare il reboot impieghera' un'enorme quantita' di tempo. Ma ora ci sono almeno otto file system consistenti che permettono di risolvere il problema.
Il file system standard di Linux non tiene traccia delle transazioni correnti. In questo modo non si puo' tornare indietro. Cosi', in caso di crash, occorre fare la scansione dell'intero file system prima di permettere la scrittura agli utenti. La comparsa generalizzata di file system journaled (con giornale), in grado di mantenere un elevatissimo grado di congruenza fra dati e metadati, e' la risposta alle richieste degli utenti di poter massimizzare la sicurezza di registrazione dei dati anche nelle condizioni piu' critiche, in cui ad es. non sia sempre garantita una chiusura (shutdown) corretta del sistema operativo.
La capacita' di effettuare il journaling dei dati e' una caratteristica considerata ormai indispensabile per i sistemi mission critical e per quelli destinati a un uso pubblico generalizzato da parte di utenti non necessariamente accorti, es. sistemi embedded, set top box, ecc.
Tutte le versioni di Unix invece hanno la capacita' di fare un reboot rapido. Riescono ad evitare la scansione di tutto il file system, leggendo solo il "giornale", un file di dimensioni contenute, dove vengono riportati tutti i cambiamenti recenti avvenuti nel file system.
Tra i file system journaled oggi disponibili per Linux citiamo:
- IBM JFS Journaling File System
http://oss.software.ibm.com/developerworks/opensource/jfs/?dwzone=opensource
- ReiserFS di Hans Rieserv
http://www.namesys.com/
- XFS dalla versione IRIX di SGI
http://oss.sgi.com/projects/xfs/
- Un file system e un "volume manager" della Veritas Software
http://www.sun.com/storage/software/veritas.html
- ext3fs di Stephne Tweedie
http://www.memalpha.cx/Linux/Ext3fs/
- Global File System della SiStina Software
http://www.sistina.com/gfs/
- Tux2 di Dan Philip
http://innominate.org/~phillips/tux2/
- Intermezzo
http://inter-mezzo.org/
Il ReiserFs e il JFS sono nella versione definitiva, mentre tutti gli altri sono ancora in fase di sviluppo. Tutti questi file system hanno in comune il fatto di scrivere ogni operazione di memorizzazione su un file separato, il giornale. In questo modo modo si velocizza il riavvio e soprattutto si minimizza il rischio di perdere pezzi di file.
E' possibile tramite semplici operazioni effettuare un password recovery di un sistema linux.
Tutto quello che si deve avere a disposizione è un cd-rom o un dischetto bootabile con un kernel linux ed un editor di testo come vi.
La prima operazione è quella di riavviare il sistema inserendo il cd o dischetto contenente un'immagine di un kernel funzionante.Il primo cd della propria distribuzione è piu' che sufficiente. Ovviamente sul BIOS vanno impostati il floppy disk o il CDROM come device di boot primari.
Una volta che il sistema ha completato il boot da cd-rom o da dischetto abilitare il caricamento del kernel in modalità rescue:
boot: linux rescue
Verrà caricato un sistema Linux in INIT 1 in cui viene presentato il prompt di una shell senza la necessità di inserire login o password.
Quando si avrà una shell disponibile montare la partizione di root.
Ammettiamo che sia hda3 e che si scelga un mount point arbitrario come /mnt/cdrom:
[bash-2.0.3]$ mount -t ext3 /dev/hda3 /mnt/cdrom
Nel caso in cui si utilizza il primo CD della distribuzione RedHat in modo del tutto automatico il sistema salvato sul proprio hard-disk verrà montato in /mnt/sysimage/ e si verrà avvisati dal seguente messaggio:
The rescue environment will now attempt to find your Red Hat
Linux installation and mount it under the directory
/mnt/sysimage. You can then make any changes required to your
system. If you want to proceed with this step choose
'Continue'. You can also choose to mount your filesystem
read-only instead of read-write by choosing 'Read-only'.
If for some reason this process fails you can choose 'Skip'
and this step will be skipped and you will go directly to a
command shell.
Ora si ha completo accesso ai file presenti nella partizione montata, senza limitazioni su permessi e owner, per cui basta disabilitare la vecchia, non più nota, password, cancellando la entry opportuna nel file /etc/shadow.
Ammettiamo di effettuare il password recovery per l'utente root:
sh-2.05a# vi /mnt/cdrom/etc/shadow
root:$1$Uowq9pDe$.76a1DuKc9rxSSk.P25xP.:12017:0:99999:7:::
[....]
Cancellare il campo relativo alla password, come nell'esempio
root::12017:0:99999:7:::
Salvare il file e riavviare il sistema. (Ricordarsi di togliere il cd-rom o il dischetto utilizzato per il boot)
In questo caso al momento del login, se si inserirà come username root non verrà chiesta nessuna password e l'utente verra autenticato come root.
Ricordarsi di settare una nuova password per root.
Come si può notare se si ha accesso fisico ad un PC con Linux installato è facile poter cambiare la password di root ed avere completo controllo del sistema. Per proteggere fisicamente una macchina da simili modifiche di deve quindi:
- Mettere una password su BIOS per evitare che qualcuno possa alterare l'ordine dei device di boot e impostare l'hard disk dove è installato Linux come device primario.
- Mettere una password su LILO o su GRUB, in modo da evitare che si possa eseguire un boot in init 1 con un comando tipo linux single
.
- Impedire (da veri paranoici) la possibilità di aprire il case del PC evitando che possa essere spostato il jumper sulla motherboard che resetta le impostazioni del BIOS.
Quota permette di gestire lo spazio occupato su disco dei singoli utenti o dei singoli gruppi, limitando ad esempio lo spazio riservato alla posta di un singolo utente.
Il supporto di quota deve essere abilitato a livello di kernel e richiede delle utility per la gestione e la configurazione dei limiti dello spazio da assegnare.
Configurazione del kernel
Per poter utilizzare quota, occorre che il kernel supporti tale feature, quindi occorre ricompilare il kernel se quello attualmente in uso non ne ha il supporto.
La sezione relativa a quota è File System, sezione raggiungibile dal menu principale.
Informarsi sul sito ufficiale www.kernel.org sia per le modalità di compilazione sia per eventuali patch relative a quota.
Il kernel di default utilizzato dalla maggior parte delle distribuzioni supporta quota tramite i relativi moduli, per cui generalmente, questa fase non è necessaria.
Installazione tool di gestione
L'installazione dei tool che operano in user space può avvenire o tramite installazione dei package tipici della distribuzione utilizzata (.rpm, .deb), oppure tramite compilazione dei sorgenti.
Vediamo alcuni esempi:
Compilazione Sorgenti
I sorgenti sono reperibili al seguente indirizzo: http://sourceforge.net/projects/linuxquota.
Download dei sorgenti e scompattazzione
[neo@dido neo]$ wget http://flow.dl.sourceforge.net/sourceforge/linuxquota/quota-3.09.tar.gz
[...]
10:09:42 (37.05 KB/s) - `quota-3.09.tar.gz' saved [190819/190819]
[neo@dido neo]$ tar zxvf quota-3.09.tar.gz
[...]
quota-tools/quotagrpadmins
quota-tools/svc_socket.c
Configurazione e compilazione
[neo@dido neo]$ cd quota-tools/
Lanciando lo script configure mettendo come argomento --help è possibile richiamare la lista degli arogmenti e i relativi significati che accetta tale script
[neo@dido quota-tools]$ ./configure
creating cache ./config.cache
checking for gcc... gcc
[...]
creating ./config.status
creating Makefile
[neo@dido quota-tools]$ make
[...]
cc -o rpc.rquotad rquota_server.o rquota_svc.o svc_socket.o bylabel.o common.o quotasys.o pot.o quotaio.o quotaio_v1.o quotaio_v2.o quotaio_rpc.o quotaio_xfs.o quotaio_generic.o rquota_xdr.o rquota_client.o rquota_clnt.o -lnsl -lwrap -lwrap
[neo@dido quota-tools]$ su -
Password:
[root@dido root]# cd /home/neo/quota-tools/
Installazione
[root@dido quota-tools]# make install
[...]
Installazione tramite rpm
Si possono trovare i pacchetti (chiamati quota...rpm) su siti come www.rpmfind.net.
Download rpm
[root@dido root]# wget ftp://ftp.rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/quota-3.06-9.i386.rpm
[...]
Installazione
[root@dido root]# rpm -ihv quota-3.06-9.i386.rpm
Preparing... ########################################### [100%]
1:quota ########################################### [100%]
Verifica del contenuto
[root@dido root]# rpm -qil quota
[...]
File di configurazione per l'invio delle email
/etc/warnquota.conf
Binari
/sbin/convertquota
/sbin/quotacheck
/sbin/quotaoff
/sbin/quotaon
/usr/bin/quota
File Header
/usr/include/rpcsvc/rquota.h
/usr/include/rpcsvc/rquota.x
Binari
/usr/sbin/edquota
/usr/sbin/quotastats
/usr/sbin/repquota
/usr/sbin/rpc.rquotad
/usr/sbin/setquota
/usr/sbin/warnquota
/usr/share/locale/pl/LC_MESSAGES/quota.mo
Manuali
/usr/share/man/man1/quota.1.gz
/usr/share/man/man2/quotactl.2.gz
/usr/share/man/man3/rquota.3.gz
/usr/share/man/man8/convertquota.8.gz
/usr/share/man/man8/edquota.8.gz
/usr/share/man/man8/quotacheck.8.gz
/usr/share/man/man8/quotaon.8.gz
/usr/share/man/man8/repquota.8.gz
/usr/share/man/man8/rquotad.8.gz
/usr/share/man/man8/setquota.8.gz
/usr/share/man/man8/warnquota.8.gz