|
1.
Introduzione ai dispositivi a blocchi
Dispositivi a blocchi
Si dà ora un'occhiata approfondita agli aspetti relativi ai dischi in Gentoo
Linux e in Linux in generale, tra cui i filesystem Linux, le partizioni e i
dispositivi a blocchi. Quindi, una volta acquisita familiarità con i dischi e i
filesystem, si viene guidati attraverso il processo di configurazione delle
partizioni e dei filesystem per l'installazione di Gentoo Linux.
Per cominciare, si introducono i dispositivi a blocchi. Il dispositivo a
blocchi più famoso è probabilmente quello che rappresenta la prima unità IDE in
un sistema Linux, /dev/sda. I dischi SCSI e Serial ATA vengono
entrambi etichettati come /dev/sd*; anche i dischi IDE sono
etichettati come /dev/sd* con il nuovo framework libata nel kernel.
Se si sta usando un vecchio framework per le periferiche, allora il primo disco
IDE sarà /dev/hda.
I dispositivi a blocchi rappresentano un'interfaccia astratta ai dischi.
I programmi utente possono usare questi dispositivi a blocchi per interagire
con i dischi, senza doversi chiedere se si tratta di unità IDE, SCSI o di
qualsiasi altro tipo. Il programma può semplicemente indirizzare la
memorizzazione su disco attraverso dei blocchi contigui, accessibili in
modalità casuale, e di dimensione pari a 512 byte ciascuno.
Partizioni
Sebbene in linea teorica sia possibile usare un intero disco per il sistema
Linux, in pratica ciò non viene quasi mai fatto. Invece, i dispositivi a blocchi
del disco sono divisi in parti più piccole e più maneggevoli. Sui sistemi x86
queste parti sono chiamate partizioni.
I sistemi Itanium usano EFI per avviarsi, la Extensible Firmware Interface. Il
formato di tabella delle partizioni che viene riconosciuto da EFI è GPT, o GUID
Partition Table. Il programma per la gestione delle partizioni che riconosce
GPT è parted e questo è lo strumento che si utilizza in seguito. Inoltre EFI è
in grado di leggere solo partizioni FAT, quindi tale è il formato da utilizzarsi
per la partizione di boot EFI, mentre il kernel viene installato da elilo.
Memorizzazione avanzata dei dati
I CD di Installazione ${arch} forniscono anche supporto per LVM2.
LVM2 aumenta la flessibilità della propria configurazione di partizioni. Durante
le istruzioni di installazione ci si concentra sulle partizioni tradizionali ma
è opportuno sapere che anche LVM2 è supportato.
1.
Impostare uno schema di partizionamento
Schema di partizionamento predefinito
Se non si è interessati a elaborare uno schema di partizionamento per il
sistema, si può usare quello di questo Manuale:
| Partizione |
Filesystem |
Grandezza |
Descrizione |
| /dev/sda1 |
vfat |
32M |
Partizione di boot EFI |
| /dev/sda2 |
(swap) |
512M |
Partizione swap |
| /dev/sda3 |
ext3 |
Resto dello spazio su disco |
Partizione di root |
Se si è interessati ad avere informazioni su quanto dovrebbe essere grande una
partizione primaria (o volume logico), o anche su quante partizioni si ha
bisogno, seguono alcuni suggerimenti. Altrimenti continuare con il partizionamento del disco.
Numero e dimensione delle partizioni
Il numero delle partizioni dipende fortemente dal proprio ambiente. Per esempio,
se si hanno molti utenti su una stessa macchina, molto probabilmente si desidera
tenere separate le directory /home, aumentando così la sicurezza e
rendendo più facile il backup. Se si sta installando Gentoo per utilizzarlo come
mailserver, /var dovrebbe essere separata poichè tutta la posta
viene memorizzata in essa. Una buona scelta del filesystem è quella che
massimizza le prestazioni. I gameserver è bene che abbiano una partizione
separata per /opt, visto che la maggior parte dei server di gioco
sono installati lì. La stessa cosa vale per /home: sicurezza e
backup. E' importante che /usr sia grande a sufficienza, perchè
contiene oltre a tutte le applicazione anche l'archivio di Portage che occupa da
solo 500MB, esclusi i sorgenti.
Come si è visto, molto dipende da cosa si desidera realizzare. Partizioni o
volumi separati hanno i seguenti vantaggi:
-
Si può scegliere il filesystem con maggiori prestazioni per ogni partizione
o volume
-
L'intero sistema non può esaurire lo spazio libero se uno strumento
malfunzionante scrive all'infinito su una partizione od un volume
-
Nel caso si rendano necessari, i controlli sul filesystem sono ridotti,
poichè possono essere condotti in parallelo diverse analisi (questo
vantaggio è più per i dischi multipli che per le partizioni multiple)
-
La sicurezza può essere aumentata montando alcune partizioni o volumi in
sola lettura, nosuid (i bit setuid vengono ignorati), noexec (i bit
executable sono ignorati), ecc.
Anche le partizioni multiple hanno però degli svantaggi: se non sono configurate
correttamente, si potrebbe avere un sistema con moltissimo spazio libero in una
partizione e niente più spazio in un'altra. Un altro inconveniente è che
partizioni separate - specialmente per punti di montaggio importanti come
/usr o /var - spesso richiedo all'amministratore di
avviare il sistema con un initramfs per montare le partizioni stesse prima che
altri script di avvio siano eseguiti. Tuttavia questo non accade sempre, perciò
il risultato può essere vario.
Come esempio di partizionamento, ecco quello di un disco da 20Gb, usato come un
laptop di dimostrazione (contenente webserver, mailserver, gnome, ...):
Codice 1.1: Esempio di uso del filesystem |
$ df -h
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda5 ext3 509M 132M 351M 28% /
/dev/sda2 ext3 5.0G 3.0G 1.8G 63% /home
/dev/sda7 ext3 7.9G 6.2G 1.3G 83% /usr
/dev/sda8 ext3 1011M 483M 477M 51% /opt
/dev/sda9 ext3 2.0G 607M 1.3G 32% /var
/dev/sda1 ext2 51M 17M 31M 36% /boot
/dev/sda6 swap 516M 12M 504M 2% <not mounted>
|
/usr è quasi pieno (83% dello spazio già in uso), ma una volta
installato tutto il software, non cresce molto. Sebbene allocare diversi
GigaByte per /var può sembrare eccessivo è opportuno ricordare che
Portage utilizza questa locazione per compilare i pacchetti. Se si desidera
mantenere /var su una dimensione ragionevole di 1GB è necessario
modificare la variabile PORTAGE_TMPDIR in /etc/portage/make.conf in
modo da farla puntare ad una partizione grande a sufficienza per compilare
grossi software, quali OpenOffice.
1.
Utilizzare parted per partizionare il disco
La parte seguente spiega come creare lo schema di partizione di esempio
descritto precedentemente:
| Partizione |
Descrizione |
| /dev/sda1 |
Partizione di boot EFI |
| /dev/sda2 |
Partizione swap |
| /dev/sda3 |
Partizione root |
Cambiare le partizioni in base alle proprie impostazioni.
Vedere la disposizione delle partizioni
parted è lo strumento GNU per la gestione delle partizioni. Eseguire
parted sul proprio disco (nell'esempio si utilizza/dev/sda):
Codice 1.1: Eseguire parted |
# parted /dev/sda
|
Una volta in parted, viene visualizzata una schermata di questo genere:
Codice 1.1: Prompt di parted |
GNU Parted 1.6.22
Copyright (C) 1998 - 2005 Free Software Foundation, Inc.
This program is free software, covered by the GNU General Public License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
Using /dev/sda
(parted)
|
A questo punto uno dei comandi disponibili è help, utile per visualizzare
tutti gli altri comandi disponibili. Un altro comando è print che serve a
mostrare l'attuale partizionamento del disco in esame:
Codice 1.1: Un esempio di partizionamento |
(parted) print
Disk geometry for /dev/sda: 0.000-34732.890 megabytes
Disk label type: gpt
Minor Start End Filesystem Name Flags
1 0.017 203.938 fat32 boot
2 203.938 4243.468 linux-swap
3 4243.469 34724.281 ext3
|
Questa particolare configurazione è molto simile a quella raccomandata in
precedenza. Notare sulla seconda linea che il tipo di tabella è GPT. Nel caso
fosse differente, il sistema ia64 non sarebbe in grado di avviare da questo
disco. Nel corso di questa guida vengono rimosse tutte le partizioni e create
nuovamente.
Rimuovere tutte le partizioni
Nota:
Al contrario di fdisk ed altri programmi per le partizioni che ritardano
l'applicazione dei cambiamenti fino a che non viene ordinato di scrivere sul
disco, il comandi di parted hanno effetto immediato. Quindi una volta che si
comincia ad aggiungere e rimuovere partizioni, non si può semplicemente uscire
senza applicare i cambiamenti, perchè sono già attivi.
|
Il modo più semplice di rimuovere tutte le partizioni ed iniziare da capo,
operazione che garantisce l'utilizzo del tipo corretto di tabella, è di creare
una nuova tabella della partizioni con il comando mklabel. Una volta
fatto questo si ha a disposizione una nuova tabella delle partizioni in formato
GPT.
Codice 1.1: Creazione di una nuova tabella |
(parted) mklabel gpt
(parted) print
Disk geometry for /dev/sda: 0.000-34732.890 megabytes
Disk label type: gpt
Minor Start End Filesystem Name Flags
|
Ora che la tabella è vuota, si è pronti a creare le partizioni. Come esempio, si
fa riferimento allo schema di partizionamento visto precedentemente: non si deve
seguire queste istruzioni alla lettera se non si desidera implementare lo stesso
schema.
Creazione della partizione di avvio EFI
Innanzitutto si crea una piccola partizione di avvio EFI. E' importante che essa
sia un filesystem FAT perchè il firmware ${arch} sia in grado di
leggerla. Nell'esempio viene create di 32MB che è più che sufficiente per
contenere i kernel e la configurazione di elilo. Ciascun kernel ${arch} occupa circa 5MB quindi questa configurazione lascia comunque modo
di lavorare agevolmente e sperimentare.
Codice 1.1: Creazione della partizione di avvio |
(parted) mkpart primary fat32 0 32
(parted) print
Disk geometry for /dev/sda: 0.000-34732.890 megabytes
Disk label type: gpt
Minor Start End Filesystem Name Flags
1 0.017 32.000 fat32
|
Creare la partizione swap
Si procede ora alla creazione della partizione di swap. La dimensione classica
della partizione di swap è il doppio della RAM presente sul sistema. Nei sistemi
moderni con memoria abbondante questo non è più necessario. Per la maggior parte
dei sistemi desktop una partizione di 512MB è più che sufficiente. Per un server
si può riservare qualcosa di più a seconda dello scopo della macchina.
Codice 1.1: Creazione della partizione di swap |
(parted) mkpart primary linux-swap 32 544
(parted) print
Disk geometry for /dev/sda: 0.000-34732.890 megabytes
Disk label type: gpt
Minor Start End Filesystem Name Flags
1 0.017 32.000 fat32
2 32.000 544.000
|
Creare la partizione root
Si crei infine la partizione di root. La configurazione in considerazione alloca
per tale partizione il resto del disco. In questo esempio si utilizza ext3 ma è
possibile scegliere anche ext2, jfs, reiserfs o xfs se lo si desidera. Il
filesystem vero e proprio non viene creato subito, ma la partizione contiene
informazioni a proposito del filesystem contenuto nella partizione ed è bene
impostare la tabella in modo corretto.
Codice 1.1: Creazione della partizione di root |
(parted) mkpart primary ext3 544 34732.890
(parted) print
Disk geometry for /dev/sda: 0.000-34732.890 megabytes
Disk label type: gpt
Minor Start End Filesystem Name Flags
1 0.017 32.000 fat32
2 32.000 544.000
3 544.000 34732.874
|
Uscire da parted
Per uscire da parted eseguire quit. Non c'è bisogno di provvedere
all'applicazione delle impostazioni definite perchè sono già state salvate.
Parted ricorda infine di aggiornare il proprio /etc/fstab, cosa che viene
fatta successivamente.
Codice 1.1: Uscire da parted |
(parted) quit
Information: Don't forget to update /etc/fstab, if necessary.
|
Ora che le partizioni sono create, si può continuare con la sezione riguardante
come Creare i filesystem.
1.
Creare i filesystem
Introduzione
Ora che le partizioni sono state create, è il momento di inserire il filesystem.
Se non si è interessati alla scelta del filesystem e vanno bene quelli che si
usano in modo predefinito in questo Manuale, continuare con la sezione su come
Applicare un filesystem ad una partizione.
Altrimenti ecco una descrizione dei filesystem disponibili.
Filesystem
Il kernel di Linux supporta diversi tipi di partizione. Seguono le descrizioni
di ext2, ext3, ext4, ReiserFS, XFS e JFS, visto che sono i più comuni sui
sistemi Linux.
ext2 è il vero e proprio filesystem di Linux ma non possiede il supporto
per il metadata journaling, il che significa che le routine che effettuano
all'avvio i controlli sul filesystem ext2 possono impiegare diverso tempo. Al
momento esiste una scelta abbastanza ampia di filesystem journaled di nuova
generazione che sono in grado di effettuare controlli sulla consistenza molto
velocemente e sono generalmente preferiti alle controparti non-journaled. I
filesystem journaled prevengono i lunghi tempi di attesa che solitamente si
riscontrano quando viene riavviato il sistema e il filesystem si trova in uno
stato inconsistente. Se si ha intenzione di installare Gentoo su un disco molto
piccolo (meno di 4GB), in tal caso si dovrà indicare ad ext2 di riservare un
numero sufficiente di inode quando si crea il filesystem. Il comando
mke2fs usa l'opzione "bytes-per-inode" per calcolare quanti inode
un filesystem dovrebbe avere.
Se si usa mke2fs -T small /dev/<device> il numero degli inode
sarà generalmente il quadruplo per un dato filesystem secondo il suo "bytes-per-inode"
riduce da 16kB a 4kB.
E' possibile ottimizzare ulteriormente usando mke2fs -i <ratio> /dev/<device>.
ext3 è la versione journaled del filesystem ext2, fornisce il metadata
journaling per un veloce recupero dei dati in aggiunta ad altre caratteristiche
di journaling avanzate come full data e ordered data journaling. Utilizza un
indice Htree che abilita alte prestazioni in quasi tutte le situazioni. In
breve, ext3 è un filesystem davvero molto valido e affidabile, ed è raccomandato
per qualsiasi sistema e scopo. Se si ha intenzione di installare Gentoo su un
disco molto piccolo (meno di 4GB), in tal caso si dovrà indicare ad ext3 di
riservare un numero sufficiente di inode quando si crea il filesystem.
Il comando mke2fs usa l'opzione "bytes-per-inode" per calcolare quanti inode
un filesystem dovrebbe avere.Se si usa mke2fs -j -T small /dev/<device>
il numero degli inode sarà generalmente il quadruplo per un dato filesystem secondo il suo "bytes-per-inode"
riduce da 16kB a 4kB. E' possibile ottimizzare ulteriormente usando mke2fs -j -i <ratio> /dev/<device>.
ext4 è un filesystem creato da una ramificazione del progetto ext3 con
l'introduzione di nuove funzionalità, miglioramenti nelle prestazioni e la
rimozione di limiti di dimensioni, con piccoli cambiamenti ai formati interni
del disco. Può arrivare fino a volumi di 1 EB con la dimensione massima per i
file di 16 TB. Invece della allocazione a blocchi classica di ext2/3 basata
sulla mappatura a bit, ext4 usa le
extent, che migliorano le
prestazioni per i file grandi e riducono la frammentazione. Ext4 inoltre è
provvisto di algoritmi più sofisticati per l'assegnazione dei blocchi
(assegnazione ritardata e assegnazione multiblocco) che danno ai driver del
filesystem maggiori opportunità di ottimizzare l'uso dello spazio sul disco.
Il filesystem ext4 è un compromesso tra la stabilità del codice sei sistemi in
produzione e il desiderio di introdurre estensioni ad un filesystem vecchio di
almeno un decennio.
JFS è il filesystem con journaling ad alte prestazioni di IBM. JFS è un
filesystem leggero, veloce ed affidabile basato su B+Tree con buone prestazioni
in varie condizioni.
ReiserFS è un filesystem basato su B+tree che offre ottime prestazioni
generali, specialmente nella gestione di una grande quantità di piccoli file,
al costo di più cicli di CPU. ReiserFS sembra avere una manutenzione più ridotta
degli altri filesystem.
XFS è un filesystem con metadata journaling ricco di caratteristiche
interessanti e ottimizzato per una forte scalabilità. XFS sembra essere poco
tollerante a vari problemi hardware.
Applicare un filesystem a una partizione
Per creare un filesystem su una partizione o volume, sono disponibili gli str
umenti per ogni filesystem possibile:
| Filesystem |
Comando per la creazione |
| vfat |
mkdosfs |
| ext2 |
mkfs.ext2 |
| ext3 |
mkfs.ext3 |
| ext4 |
mkfs.ext4 |
| reiserfs |
mkreiserfs |
| xfs |
mkfs.xfs |
| jfs |
mkfs.jfs |
Per esempio, per avere la partizione di boot (/dev/sda1 in questo
esempio) vfat e la partizione di root (/dev/sda3 in questo esempio)
ext3, si usa:
Codice 1.1: Applicare un filesystem su una partizione |
# mkdosfs /dev/sda1
# mkfs.ext3 /dev/sda3
|
Attivare la partizione swap
mkswap è il comando usato per inizializzare le partizioni swap:
Codice 1.1: Inizializzare la partizione swap |
# mkswap /dev/sda2
|
Per attivare la partizione swap, usare swapon:
Codice 1.1: Attivare la partizione swap |
# swapon /dev/sda2
|
Creare e attivare swap con i comandi illustrati.
1.
Montare
Ora che le partizioni sono inizializzate e hanno un filesystem, è il momento di
montarle. Usare il comando mount. Non dimenticarsi di creare le
necessarie directory di mount. Nell'esempio ecco come montare le partizioni root
e boot:
Codice 1.1: Montare la partizione di root |
# mount /dev/sda3 /mnt/gentoo
|
Nota:
Al contrario di alcune delle altre architetture supportate da Gentoo,
/boot non viene montata su ia64. Il motivo è che la partizione di
avvio EFI viene automaticamente montata e scritta dal comando elilo ogni
volta che viene lanciato. Per questo /boot risiede sul filesystem
di root ed è il luogo in cui vengono conservati i kernel a cui la configurazione
di elilo fa riferimento.
|
Nota:
Se si vuole che /tmp risieda in una partizione separata,
assicurarsi di cambiare i permessi dopo il mount: chmod 1777
/mnt/gentoo/tmp. Questo vale anche per /var/tmp.
|
E' necessario inoltre montare il filesystem proc (una intefaccia virtuale con il
kernel) su /proc. Ma prima si devono mettere i file sulle
partizioni.
Ora continuare con la (Copia dei file di
installazione di Gentoo).
|