[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
I sistemi Unix gestiscono sempre un solo file system globale. Questo può essere anche composto da più file system di dimensioni inferiori, uno principale (radice) e gli altri secondari, collegati fra loro in modo da formare un'unica struttura.
La tabella 112.1 elenca i programmi e i file a cui si accenna in questo capitolo.
Prima di poter utilizzare un file system, occorre costruirlo. Quando si parla di dischi si distinguono tre fasi fondamentali:
l'inizializzazione a basso livello;
l'eventuale suddivisione in partizioni;
la creazione della struttura iniziale del tipo di file system che si intende utilizzare.
L'inizializzazione a basso livello è spesso compito di programmi residenti nel firmware (o nel BIOS se si preferisce il termine), a eccezione dei dischi rimovibili. In questo ultimo caso, a parte i dischetti, si deve quasi sempre utilizzare quanto fornito insieme alle unità di memorizzazione, anche se si tratta di programmi fatti per altri sistemi operativi.
Per l'inizializzazione a basso livello dei dischetti si può utilizzare fdformat, per la suddivisione in partizioni dei dischi più grandi si può utilizzare fdisk (o cfdisk), per creare i vari file system si devono utilizzare programmi diversi a seconda del tipo di file system.
Tutte queste operazioni vengono svolte facendo riferimento ai file di dispositivo relativi. Di conseguenza, possono essere compiute solo dagli utenti che hanno i permessi di accesso in lettura e scrittura per questi file. Generalmente, solo l'utente root può intervenire in questo modo. |
Il programma fdformat (1) esegue un'inizializzazione a basso livello di un dischetto. Il nome del file di dispositivo indica l'unità a dischetti in cui si vuole compiere l'operazione e anche il formato che si vuole ottenere. Per questo motivo è meglio evitare di utilizzare semplicemente nomi di dispositivo generici come /dev/fd0
e /dev/fd1
. Molto probabilmente si utilizzano maggiormente i formati relativi a /dev/fd0u1440
e /dev/fd1u1440
che si riferiscono al formato da 1 440 Kibyte dei dischetti da 3,5 pollici.
Vale la pena di ricordare che i nomi di dispositivo relativi ai dischetti possono cambiare leggermente da una distribuzione GNU/Linux a un'altra. A volte, il formato dei dischetti da 1 440 Kibyte corrisponde al file |
fdformat [-n] dispositivo |
L'opzione -n serve a saltare la fase di controllo successiva all'inizializzazione: in generale è meglio non utilizzarla in modo da verificare la riuscita dell'inizializzazione.
Se si vuole consentire agli utenti comuni di compiere questa operazione occorre regolare i permessi dei file di dispositivo dei dischetti in modo da permettere loro l'accesso in lettura e scrittura. |
Segue la descrizione di alcuni esempi.
#
fdformat /dev/fd0u1440
[Invio]
Inizializza un dischetto da 1 440 Kibyte nella prima unità a dischetti.
#
fdformat /dev/fd1u1440
[Invio]
Inizializza un dischetto da 1 440 Kibyte nella seconda unità a dischetti.
Il programma superformat (2) è alternativo a fdformat, rispetto al quale permette di definire molti dettagli in più che riguardano l'inizializzazione dei dischetti. In generale, si possono ignorare tutte queste caratteristiche speciali, utilizzando superformat con la sola indicazione del file di dispositivo del dischetto da inizializzare: è sufficiente fare riferimento al dispositivo generico, senza le informazioni sulla capacità dello stesso. Alla fine dell'inizializzazione a basso livello, superformat utilizza mformat per inserire nel dischetto un file system Dos-FAT, che se non serve può essere semplicemente ignorato.
superformat [opzioni] dispositivo [descrizione_del_supporto] |
Prima di eseguire l'inizializzazione, superformat controlla le caratteristiche dell'unità a dischetti. È possibile predisporre il file /etc/driveprm
con una direttiva che viene suggerita dallo stesso programma mentre è in funzione, per evitare che venga ripetuto questo controllo. Se si interviene in questo modo, occorre ricordare di eliminare la direttiva quando si cambia unità a dischetti, o quando si cambia l'unità di controllo. In generale, non è il caso di preoccuparsi di questo file, a meno che l'inizializzazione dei dischetti sia un'attività frequente.
Questo valore potrebbe essere influenzato anche dalle variazioni climatiche, pertanto è meglio non predisporre il file |
Le opzioni di superformat sono utili soprattutto quando si vuole inizializzare un dischetto utilizzando un formato insolito, ma in tal caso conviene leggere la pagina di manuale relativa: superformat(1). Comunque, vale la pena di ricordare che con l'opzione -f, o --noverify, si esclude qualunque controllo sul risultato dell'inizializzazione.
L'esempio seguente inizializza un dischetto nell'unità corrispondente al file di dispositivo /dev/fd0
, utilizzando il formato standard massimo per quel tipo di unità:
#
superformat /dev/fd0
[Invio]
Il programma badblocks (3) è in grado di verificare l'integrità di un disco o di una partizione. Il controllo è fatto a basso livello senza considerare la struttura del file system.
badblocks [opzioni] dispositivo dimensione_in_blocchi [blocco_iniziale] |
Normalmente i programmi di inizializzazione, sia a basso livello che a livello superiore, sono in grado di fare questo controllo da soli. Per questo badblocks viene usato raramente.
Il tipo di controllo può essere in lettura oppure anche in scrittura. È evidente che, se si specifica attraverso le opzioni l'intenzione di effettuare un controllo in scrittura, i dati contenuti nel disco o nella partizione sono perduti. |
|
L'esempio seguente esegue il controllo del dischetto, in sola lettura, per tutta la sua estensione: 1 440 blocchi di 1 Kibyte. Trattandosi di un controllo in sola lettura, badblocks può essere eseguito da un utente comune (sempre che tali utenti abbiano i permessi di lettura per il dispositivo che si va a leggere).
$
badblocks /dev/fd0u1440 1440
[Invio]
Il programma fdisk (4) permette la modifica della tabella delle partizioni di un disco che possa essere organizzato in questo modo. Il nome del file di dispositivo fa riferimento all'intero disco, quindi si possono utilizzare nomi come /dev/hda
, /dev/hdb
, /dev/hdc
,... /dev/sda
, /dev/sdb
,... a seconda che si tratti di dischi ATA o SCSI.
fdisk [opzioni] [dispositivo] |
Una volta avviato fdisk, si interagisce con questo attraverso comandi composti da una sola lettera. In particolare, la lettera m richiama l'elenco dei comandi disponibili.
[m]
Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatiblity flag d delete a partition l list known partition types m print this menu n add a new partition p print the partition table q quit without saving changes t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) |
Quando viene creata una nuova partizione, questa viene definita automaticamente del tipo Linux-nativa, ma in certi casi può essere necessario modificare il tipo di partizione creato attraverso il comando t. Ogni tipo di partizione ha un codice (espresso in esadecimale) che può essere conosciuto anche attraverso fdisk stesso, durante il suo funzionamento.
[t]
...
0 Vuoto 1c Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid 1 FAT12 1e Hidden W95 FAT1 75 PC/IX be Solaris boot 2 XENIX root 24 NEC DOS 80 Vecchio Minix c1 DRDOS/sec (FAT- 3 XENIX usr 39 Plan 9 81 Minix / vecchio c4 DRDOS/sec (FAT- 4 FAT16 <32M 3c Recupero Partit 82 Linux swap c6 DRDOS/sec (FAT- 5 Esteso 40 Venix 80286 83 Linux c7 Syrinx 6 FAT16 41 PPC PReP Boot 84 C nascosto OS/2 da Non-FS data 7 HPFS/NTFS 42 SFS 85 Linux esteso db CP/M / CTOS / . 8 AIX 4d QNX4.x 86 set volume NTFS de Dell Utility 9 AIX avviabile 4e QNX4.x 2a parti 87 set volume NTFS df BootIt a OS/2 Boot Manag 4f QNX4.x 3rd part 8e Linux LVM e1 accesso DOS b W95 FAT32 50 OnTrack DM 93 Amoeba e3 DOS R/O c W95 FAT32 (LBA) 51 OnTrack DM6 Aux 94 Amoeba BBT e4 SpeedStor e W95 FAT16 (LBA) 52 CP/M 9f BSD/OS eb BeOS fs f W95 Ext'd (LBA) 53 OnTrack DM6 Aux a0 Ibernazione IBM ee EFI GPT 10 OPUS 54 OnTrackDM6 a5 FreeBSD ef EFI (FAT-12/16/ 11 FAT12 nascosto 55 EZ-Drive a6 OpenBSD f0 Linux/PA-RISC b 12 Diagnostica Com 56 Golden Bow a7 NeXTSTEP f1 SpeedStor 14 FAT16 nascosto 5c Priam Edisk a8 Darwin UFS f4 SpeedStor 16 FAT16 nascosto 61 SpeedStor a9 NetBSD f2 DOS secondario 17 HPFS/NTFS nasco 63 GNU HURD o SysV ab Darwin boot fd Autorilevamento 18 AST SmartSleep 64 Novell Netware b7 BSDI fs fe LANstep 1b Hidden W95 FAT3 65 Novell Netware b8 BSDI swap ff BBT |
Le modifiche alla tabella delle partizioni vengono registrate solo nel momento in cui si termina l'esecuzione del programma con il comando w. Se fdisk segnala qualche tipo di errore in questo momento, potrebbe essere necessario riavviare il sistema prima di utilizzare il disco su cui sono state apportate le modifiche. |
[w]
Il funzionamento di fdisk è già descritto nel capitolo 30.
|
Il programma cfdisk (5) serve a modificare la suddivisione in partizioni di un disco che possa essere organizzato in questo modo. Si tratta di un programma che svolge le stesse funzioni di fdisk offrendo un sistema di interazione meno spartano.
cfdisk [opzioni] [dispositivo] |
Dal momento che richiede delle librerie particolari per la gestione dello schermo (ncurses), è poco indicato il suo utilizzo in presenza di sistemi estremamente ridotti o di emergenza. Ciò significa che il programma fdisk tradizionale non può essere abbandonato per adottare esclusivamente cfdisk.
Il funzionamento di fdisk è già descritto nel capitolo 30.
Il programma sfdisk (6) consente la modifica delle partizioni in modo non interattivo, pertanto è utile in particolare per la realizzazione di script.
sfdisk [opzioni] dispositivo |
sfdisk -s [partizione] |
sfdisk dispositivo < file_di_comandi |
L'utilizzo normale di questo programma di servizio prevede la preparazione di un file contenente le istruzioni sulle partizioni da creare all'interno di un disco specificato espressamente. Anche se è prevista una sintassi apposita per queste istruzioni, può essere conveniente l'utilizzo di quanto ottenuto da un'interrogazione con lo stesso sfdisk, come viene mostrato in seguito. Prima di arrivare a vedere in che modo si possono definire le partizioni, conviene prendere confidenza con l'uso di sfdisk, attraverso delle operazioni non distruttive; pertanto si comincia subito con alcuni esempi.
#
sfdisk -s /dev/hda1
[Invio]
Questo comando si limita a restituire un numero attraverso lo standard output, corrispondente alla quantità di blocchi della prima partizione del primo disco fisso ATA.
#
sfdisk -s /dev/hda
[Invio]
In questo caso si ottiene la quantità di blocchi complessiva del primo disco fisso ATA.
#
sfdisk -V /dev/hda
[Invio]
Verifica la coerenza delle partizioni nel primo disco fisso ATA. Di solito, sfdisk viene usato in questo modo per ottenere il valore restituito, che è Vero (zero) solo se tutto è in ordine.
#
sfdisk -d /dev/hda
[Invio]
Genera un rapporto sulle partizioni del primo disco fisso ATA, emesso attraverso lo standard output. Questo potrebbe essere ridiretto in un file, da conservare da qualche parte; in seguito, questo stesso file potrebbe essere usato per rigenerare la stessa situazione:
#
sfdisk -d /dev/hda > /mnt/floppy/partizioni
[Invio]
...
#
sfdisk /dev/hda < /mnt/floppy/partizioni
[Invio]
Un esempio del rapporto che si ottiene con l'opzione -d potrebbe essere quello del listato seguente:
|
Con questo sistema, se si dispone di una serie di elaboratori con gli stessi dischi fissi che si vogliono suddividere nello stesso modo, è facile utilizzare sfdisk per copiare la struttura di uno negli altri. Se si sa quello che si fa, si può modificare uno di questi file prima di darlo in pasto a sfdisk.
Il programma sfdisk permette anche di utilizzare una sintassi differente e più approssimativa per definire le partizioni che si vogliono creare. Tuttavia, per questo conviene leggere la documentazione originale, che dovrebbe essere accessibile attraverso la pagina di manuale sfdisk(8).
|
Un disco suddiviso in partizioni secondo il modello originario dei sistemi Dos, che prevede quattro partizioni primarie, contiene tali informazioni all'interno del primo settore, noto con il nome «MBR». È molto semplice salvare tale suddivisione, anche senza servirsi di programmi specifici (come potrebbe essere sfdisk), purché il proprio interesse sia limitato alle sole partizioni principali. Per salvare il settore MBR si procede così:
dd if=file_di_dispositivo of=file_da_creare bs=512 count=1 |
In questo modo, il file di dispositivo deve essere quello del disco intero, dal quale si vuole leggere il primo settore di 512 byte; il file da creare è quel file nel quale si vuole salvare l'informazione.
Nel caso dovesse essere necessario recuperare la tabella delle partizioni, se si copia tale e quale il file salvato in precedenza nel primo settore, si sovrascrive anche il codice di avvio; se questo va bene, basta procedere così:
dd if=file_mbr of=file_di_dispositivo |
Se invece si vuole copiare soltanto la tabella di partizione, senza sovrascrivere il codice di avvio, il comando diventa più articolato:
dd if=file_mbr of=file_di_dispositivo bs=1 count=64 skip=446 seek=446 |
Naturalmente, un errore nella scrittura del comando di recupero, sia nei valori, sia nell'indicazione corretta del file di dispositivo di destinazione, è irreversibile.
Quando si predispongono partizioni Dos, può essere opportuno ripulire il primo settore (i primi 512 byte) della partizione, per evitare dei problemi con i programmi come FORMAT.EXE, i quali potrebbero leggerlo prima di iniziare il loro lavoro, restando confusi nel caso ci fossero lì dei dati casuali. Come si intuisce, il problema non esiste se il file system Dos-FAT viene generato attraverso strumenti di GNU/Linux, ma se si realizza uno script che deve costruire automaticamente una serie di partizioni, tra cui anche di tipo Dos, forse è il caso di provvedere a ripulire il primo settore di ogni partizione del genere.
Supponendo di avere definito la partizione /dev/hda1
per il Dos, si dovrebbe agire nel modo seguente:
#
dd if=/dev/zero of=/dev/hda1 bs=512 count=1
[Invio]
Si intuisce che anche solo un piccolo sbaglio, in un'operazione del genere, comporta la cancellazione di dati in modo irreversibile.
Il programma mke2fs (7) permette di creare un file system di tipo Ext2 o Ext3 in un'unità di memorizzazione. Questa viene indicata nel modo consueto, attraverso il nome del file di dispositivo corrispondente (/dev/...
).
mke2fs [opzioni] dispositivo [dimensione_in_blocchi] |
mkfs.ext2 [opzioni] dispositivo [dimensione_in_blocchi] |
mkfs.ext3 [opzioni] dispositivo [dimensione_in_blocchi] |
La dimensione è espressa in blocchi. Se questo valore non viene specificato, mke2fs cerca di determinarlo da solo, ma non sempre il valore risulta corretto, quindi conviene fornire questa indicazione.
Vedere mke2fs(8).
|
Il programma mkdosfs (8) permette di creare un file system Dos-FAT. Può essere usato per tutti i tipi di unità a disco, compresi i dischetti.
mkdosfs [opzioni] dispositivo [dimensione_in_blocchi] |
mkfs.msdos [opzioni] dispositivo [dimensione_in_blocchi] |
Vedere mkdosfs(8).
|
L'esempio seguente crea un file system Dos-FAT nel dischetto inserito nella prima unità, dopo aver controllato la sua superficie e determinando automaticamente la dimensione in blocchi:
#
mkdosfs -c /dev/fd0
[Invio]
Il programma mkfs (9) serve a rendere uniforme l'utilizzo degli altri programmi specifici per la creazione dei vari tipi di file system. In questi casi si può parlare anche di programma frontale oppure si usa il termine inglese front-end.
mkfs [-t tipo_di_file_system] [opzioni_specifiche] dispositivo [dimensione_in_blocchi] |
L'opzione -t serve per specificare il tipo di file system da creare, in questo modo mkfs sa a quale programma deve rivolgersi. Le opzioni specifiche dipendono dal tipo di file system, ovvero dal programma che si prende cura effettivamente dell'inizializzazione.
Segue la descrizione di alcuni esempi.
#
mkfs -t msdos -c /dev/fd0
[Invio]
Crea un file system Dos-FAT nel dischetto inserito nella prima unità, dopo aver controllato la sua superficie e determinando automaticamente la dimensione in blocchi.
#
mkfs -t ext2 -c /dev/fd0 1440
[Invio]
Crea un file system Ext2 nel dischetto inserito nella prima unità, dopo aver controllato la sua superficie. La dimensione in blocchi viene indicata in modo esplicito.
I dati contenuti all'interno di un file system sono organizzati in una struttura articolata e delicata. A volte, specie se succedono incidenti, conviene controllare questa struttura attraverso un programma che si occupa di risistemare le cose.
Tutte queste operazioni vengono svolte facendo riferimento ai file di dispositivo relativi. Di conseguenza, possono essere compiute solo dagli utenti che hanno i permessi di accesso necessari al tipo di operazione da compiere. |
Il programma disktype (10) permette di individuare facilmente le caratteristiche di un disco, comprese le partizioni presenti ed eventualmente il tipo di file system contenuto. Si utilizza senza opzioni:
disktype file... |
I file da indicare come argomento di disktype possono essere file di dispositivo, oppure file-immagine di un qualche disco. Vengono mostrati alcuni esempi molto semplici, che dovrebbero rendere l'idea delle informazioni che si possono ottenere con questo programma:
#
disktype /dev/hdb
[Invio]
--- /dev/hdb Block device, size 76.34 GiB (81964302336 bytes) GRUB boot code, compat version 3.2, boot drive 0xff DOS partition map Partition 1: 8.066 GiB (8661187584 bytes, 16916382 sectors from 63) Type 0x82 (Linux swap / Solaris) Linux swap, version 2, subversion 1, 4 KiB pages, little-endian Swap size 8.066 GiB (8661176320 bytes, 2114545 pages of 4 KiB) Partition 2: 13.04 GiB (13999426560 bytes, 27342630 sectors from 16916445) Type 0x83 (Linux) Ext3 file system UUID 6137A3BD-D45C-46ED-ACF2-668046292FEC (DCE, v4) Volume size 13.04 GiB (13999423488 bytes, 3417828 blocks of 4 KiB) Partition 3: 21.10 GiB (22652421120 bytes, 44243010 sectors from 44259075) Type 0x83 (Linux) Ext3 file system UUID 316F72A3-3501-4260-A438-8873608E4CC4 (DCE, v4) Volume size 21.10 GiB (22652420096 bytes, 5530376 blocks of 4 KiB) Partition 4: 34.13 GiB (36643622400 bytes, 71569575 sectors from 88502085) Type 0x83 (Linux) Ext3 file system UUID CFDEA76D-72E4-4775-81C8-2860FBAB2037 (DCE, v4) Volume size 34.13 GiB (36641439744 bytes, 8945664 blocks of 4 KiB) |
#
disktype /dev/sr0
[Invio]
--- /dev/sr0 Block device, size 158.2 MiB (165918720 bytes) CD-ROM, 1 track, CDDB disk ID 02043801 Track 1: Data track, 158.2 MiB (165918720 bytes) ISO9660 file system Volume name "nanoLinux II" Application "nanoLinux II" Data size 158.2 MiB (165918720 bytes, 81015 blocks of 2 KiB) El Torito boot record, catalog at 79733 Bootable non-emulated image, starts at 79736, preloads 2 KiB |
Il programma e2fsck (11) permette di eseguire un controllo in un file system di tipo Ext2 e Ext3, applicando le correzioni ritenute necessarie. In generale, è opportuno che il file system da controllare non sia innestato, o almeno, se è innestato, è necessario che sia accessibile in sola lettura.
e2fsck [opzioni] dispositivo |
fsck.ext2 [opzioni] dispositivo |
fsck.ext3 [opzioni] dispositivo |
Vedere e2fsck(8).
|
Il valore restituito da e2fsck è il risultato della somma delle condizioni seguenti:
0 conclusione normale senza errori;
2 errori del sistema: se il file system risulta innestato, è necessario riavviare il sistema;
8 errore operativo;
16 errore nell'utilizzo o nella sintassi;
128 errore nella libreria condivisa.
Il programma dosfsck (12) permette di eseguire il controllo di un file system di tipo Dos-FAT e di applicare le correzioni ritenute necessarie. In generale, è opportuno che il file system da controllare non sia innestato.(13)
dosfsck [opzioni] dispositivo |
fsck.msdos [opzioni] dispositivo |
Per conoscere maggiori dettagli conviene consultare dosfsck(8).
|
Il valore restituito da dosfsck viene descritto nell'elenco seguente.
1 Sono stati riscontrati errori risolvibili.
2 Errore nell'utilizzo o nella sintassi.
Il programma fsck rende uniforme l'utilizzo dei programmi specifici per il controllo e la correzione dei vari tipi di file system. Si tratta di un programma frontale.
fsck [opzioni] [-t tipo_di_fs] [opzioni_specifiche] dispositivo... |
L'opzione -t serve per specificare il tipo di file system da analizzare, in questo modo fsck sa a quale programma deve rivolgersi. Le opzioni specifiche dipendono dal tipo di file system, ovvero dal programma che si prende cura effettivamente dell'operazione.
Vedere fsck(8).
Allo stato attuale, nel momento in cui viene scritta questa sezione (anno 2004), la gestione di un file system NTFS attraverso un sistema GNU/Linux è ancora incompleta. Pertanto, si usano strumenti particolari per accedere a questo tipo di file system. Data la diffusione del file system NTFS e, di conseguenza, la necessità frequente di convivere con questo, vale la pena di conoscere cosa si può fare concretamente attraverso un sistema GNU/Linux.
Il pacchetto di programmi NTFStools, (14) noto anche come NTFSprogs, raccoglie una serie di strumenti per l'accesso ai file system NTFS (senza che questo sia stato innestato). L'utilizzo di alcuni di questi programmi viene descritto brevemente nella tabella 112.14.
|
Un problema comune quando si vogliono copiare dati in un file system diverso da quello solito, consiste nel verificare se ci possono essere problemi con i nomi usati per i file e le directory. Un programma molto semplice permette di verificare la compatibilità dei nomi con un file system di tipo Dos-FAT (con nomi «8.3») e SYSV (al massimo di 14 caratteri):
doschk nome_file... |
echo nome_file... | doschk |
Per comprendere il funzionamento di doschk (15) è sufficiente un esempio:
$
ls | doschk
[Invio]
The following files are not valid DOS file names: home.html.bak - too many dots hw-mb-pci-msi-ms5169-1998-legenda.pnm.gz - too many dots prova.fig.bak - too many dots The following resolve to the same DOS file names: HOME.HTM : home.html home.html.bak MAIL : Mail mail PROVA.FIG : prova.fig prova.fig.bak The following file names are too long for SysV: blick-electric : blick-electric.gif contratti-inte : contratti-internet hw-mb-pci-msi- : hw-mb-pci-msi-ms5169-1998-legenda.pnm.gz |
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
1) util-linux: fdformat GNU GPL
2) Linux floppy utilities GNU GPL
4) util-linux: fdisk GNU GPL
5) util-linux: cfdisk GNU GPL
6) util-linux: sfdisk GNU GPL
9) util-linux: mkfs GNU GPL
10) Disktype software libero con licenza speciale
13) dosfsck non è un programma che viene installato in modo predefinito dalle distribuzioni, per cui, nella maggior parte dei casi occorre provvedere direttamente per questo.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome memoria_di_massa_preparazione_e_controllo.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]