Author Topic: Partizionamento dischi rigidi con GNU/Linux  (Read 8670 times)

0 Members and 1 Guest are viewing this topic.

Offline MsZ

  • Il Manutentore
  • Militante
  • ******
  • Posts: 913
  • GNUru Meditation
Partizionamento dischi rigidi con GNU/Linux
« on: Wed 05 December 2007, 16:41 »
Preparazione dischi rigidi con GNU/Linux

Preparare un disco rigido è la prima cosa da fare quando ci si vuole installare un sistema operativo. Senza filesystem, infatti, un kernel non sa come o dove andare a prendere un dato su un determinato supporto.

*** Partizioni ***
Una partizione è un "pezzo" di supporto di memorizzazione, solitamente un disco rigido, che può "contenere" un filesystem.
Un disco rigido viene partizionato scrivendo nel settore numero 0 del disco stesso, chiamato MBR (Master Boot Record) una serie di dati che identificano quante e quali partizioni il disco dovrà avere, la loro dimensione ed il filesystem. Questi dati vanno a fare parte della "tabella di partizione".
Un disco rigido può avere fino a quattro partizioni primarie, oppure una primaria ed una estesa in MSDOS, o diverse combinazioni per altri sistemi operativi come GNU/Linux.
In un ambiente Windows/DOS all'interno di una partizione estesa ci possono essere più partizioni cosiddette "logiche", fino ad un massimo di 127. Il kernel Linux usa un approccio "differente" nella lettura della tabella di partizione, cosicchè si possono avere configurazioni molto variabili in un ambiente GNU.
Se state costruendo un disco di sistema ci deve comunque essere almeno una partizione primaria.
Fate attenzione: qualsiasi modifica alla tabella di partizione potrà ripercuotersi, con effetti anche gravi, sui dati immagazzinati su disco. Siate SEMPRE cauti quando maneggiate le partizioni di un disco rigido!!

*** Filesystem ***
Partizionare un disco non basta. Bisogna anche "prepararlo" per l'arrivo dei dati da immagazzinare. Così come è messo un disco rigido non può memorizzare alcunchè, perchè non c'è alcuna "regola" che dica al kernel come o dove andare a prendere il dato che serve in un determinato momento. Ecco perchè i filesystem sono nati.
I filesystem sono sistemi ordinati di organizzazione di dati su un supporto di memorizzazione di massa come un disco rigido, un floppy disk, una chiavetta USB.
Ce ne sono di tanti tipi, ed esistono quasi fin dall'avvento dei nastri magnetici. Il primo filesystem su nastro magnetico risale al 1954, opera della DEC (Digital Equipment Corporation), e si chiamava DECTape.
Ora i più diffusi sono NTFS per sistemi operativi Windows e ext3, XFS, JFS e ReiserFS per sistemi GNU/Linux. Ovviamente a filesystem diverso corrisponde un diverso tool per la sua creazione. In Windows c'è il facile "Formatta disco" nelle Proprietà di un disco logico. Per GNU/Linux la varietà è ampia: potendo creare NTFS anche in Linux c'è mkntfs; c'è mke2fs per filesystem ext2 e ext3; mkfs.xfs per XFS, mkreiserfs per Reiser e una caratteristica propria solo di GNU: un tool per la creazione di filesystem swap, mkswap.

*** Un po' d'ordine ***
Ma se volete installare un sistema GNU/Linux dovete sapere che cosa vi serve, e dove metterlo. Di metodi per partizionare un disco ce ne sono tanti, mi limiterò a consigliare dei procedimenti generali per una buona partizione, per poi descrivere a grandi linee tre tool testuali per la creazione o la modifica di tabelle di partizione.
Generalmente una partizione di root è indispensabile. E' richiesta da ogni distribuzione.
La root (/) è la directory radice del sistema operativo. Ad essa sono connesse tutte le altre per via diretta, e da essa dipendono.
Una partizione da avere è la partizione di swap. Alcuni dicono che averla come prima partizione renda più veloce il lavoro del computer. Personalmente non ho riscontrato grandi differenze avendola per prima o per seconda. L'importante è non metterla troppo lontana dall'inizio del disco. Per esempio, se avete 15 partizioni in un disco da 160GB, se mettete la swap come ultima, da 2GB costringerà le testine a fare molta più fatica per lavorare sul filesystem di swap, rendendo generalmente più lenta l'elaborazione dei dati.
Vorrei anche precisare che non sempre il sistema usa la swap. In linea di massima avere una swap di dimensioni all'incirca pari a quelle della memoria RAM è già sufficiente.
Potrebbero poi essere, non dico necessarie, ma utili più partizioni distinte dalla partizione di root.
Ad esempio alcuni smaliziati di GNU/Linux trovano molto comodo avere una /boot/ separata dal resto.
La directory /boot contiene tutti i file necessari per l'avvio del sistema, compreso il kernel. NON giocate con la directory boot senza sapere quello che fate, perchè potrebbe risultare un sistema non bootabile!!
Proprio per la proprietà della /boot di contenere il kernel alcuni utenti, volendo testare più di un kernel o più di una distribuzione su uno stesso computer può scegliere di creare una /boot separata.
Anche una /home separata può rivelarsi utile.
La directory /home contiene tutti i file posseduti da utenti non-root.
Mettete che un giorno vorrete cambiare distribuzione, o reinstallare la vecchia per un qualche motivo, o aggiornare quella che avete. Formattando la / e reinstallando il sistema operativo avrete la vostra bella /Home immacolata, con ancora tutti i file di configurazione lasciati dalla precedente installazione, senza dover rifare noiosi passaggi per riconfigurare aspetti relativi dell'ambiente di lavoro.
Oppure la /usr, la /tmp, una /var separata per leggere tutti i log che vi passano per la testa... tutto si può fare. Basta organizzarsi un poco. Ricordate sempre però di fare le cose ordinatamente.

*** Tool testuali ***
Diciamo la verità. Se doveste installare una distribuzione come la Ubuntu le mie spiegazioni si potrebbero fermare qui. Il resto lo farebbe un tool chiamato gparted, che da interfaccia grafica partizionerebbe e formatterebbe automaticamente un disco rigido così come lo volete.
Anch'io devo dire la verità. Io ho sempre una certa angoscia quando uso uno di questi strumenti, perchè non so mai veramente che cosa salterà fuori. Mo sento tranquillo solo se uso uno dei tre programmi che ora vado a spiegare.

--- fdisk ---
Molto probabilmente si trova in una qualsiasi distribuzione. E' un tool di default per la gestione delle partizioni GNU/Linux. Ma per utenti alle prime armi in un terminale usarlo potrebbe non essere semplice. Per questo ora vado a spiegare, a grandi linee, che cosa fa, con quali comandi e come.
L'invocazione caratteristica di fdisk è
Quote
fdisk /dev/<nome_periferica>
dove <nome_periferica> è la periferica (NON la partizione!!!) che volete andare a modificare. Generalmente, se si tratta del primo disco rigido nel canale IDE primario è /dev/hda. Se si tratta di SATA potrebbe essere /dev/sda.
Generalmente, sdX è il nome dato dal kernel Linux a qualsiasi periferica di memorizzazione di massa su bus USB, FireWire, SATA, eSATA o SCSI generico. Ricordo che il bus USB viaggia su Linux come emulazione del bus SCSI.
Potrà esservi presentato un avviso di un numero di cilindri superiore a 1024. Se nel sistema non usate DOS o Windows 95/98/ME questo messaggio non ha alcuna ragione di preoccuparvi.
Premendo "m" verrà stampato un gruppo di opzioni utilizzabili all'interno di fdisk. Quelle che potrebbero interessarvi sono 'a', 't', 'n', 'l', q', 'd', 'v' e 'w'. Premendo "x" avrete una lista più esaustiva di comandi ed entrerete in modalità "eXpert". Quasi sicuramente non avrete bisogno di questa modalità.
a --> Rende bootabile/non bootabile una partizione.
t --> Cambia il tipo di partizione selezionata.
n --> Aggiunge una partizione.
q --> Esce da fdisk senza scrivere su MBR.
w --> Esce da fdisk e scrive su MBR i cambiamenti.
d --> Cancella una partizione.
l --> Stampa una lista di partizioni compatibili con fdisk.
v --> Verifica l'integrità della tabella di partizione.
p --> Lista le partizioni presenti, o quelle che verranno scritte o modificate.

fdisk ragiona per numeri. Se scegliete di creare, cancellare o modificare una partizione dovrete prima richiamare la lista con 'p' e vedere il numero della partizione che volete cancellare o modificare. Se ne vorrete creare una fdisk darà per scontato che la nuova partizione avrà un numero di un'unità superiore alla partizione massima registrata.
La partizione estesa ne contiene una o più logiche. Ma essa non fa testo: se vorrete installare dati nella partizione estesa (supponiamo che sia hda2) dovrete prima crearla, poi creare delle logiche al suo interno. Queste logiche avranno una numerazione da hda3 in poi. Allora potrete creare filesystem in hda3, hda4, hda5...
Eventualmente, se non siete sicuri potete in qualsiasi momento uscire in modo "Pulito" premendo CTRL+C da tastiera. fdisk uscirà senza scrivere nulla su disco, e voi potrete rifare il vostro partizionamento.
Per un backup della tabella di partizione riferitevi alla sezione "Backup".

--- cfdisk ---
Io uso poco cfdisk. Lo uso poco per lo stesso motivo per cui non uso tool grafici.
Ha un'interfaccia ncurses molto spartana, ma è pur sempre un'interfaccia.
L'invocazione è semplice: cfdisk /dev/<nome_periferica>. Vi viene messa davanti una schermatina stile DOS con la possibilità di scorrere dall'alto in basso e viceversa con le frecce direzionali  su e giù, e potete navigare nella barra degli strumenti in basso con le frecce direzionali sinistra e destra. E? relativamente semplice.
"Bootable"  -->   rende bootabile una partizione.
"Delete"    -->   cancella una partizione.
"Help"      -->   aiuto più o meno esaustivo su cfdisk.
"Maximize"  -->   massimizza utilizzo della partizione correntemente selezionata.
"Print"     -->   stampa la tabella di partizione a schermo o su file.
"Quit"      -->   esce da cfdisk senza scrivere su MBR.
"Type"      -->   cambia filesystem della partizione corrente.
"Units"     -->   cambia rappresentazione delle unità di misura (MB, settori, cilindri).
"Write"     -->   esce da cfdisk scrivendo le modifiche su MBR.

Le partizioni "Primary" sono primarie; le "Logical" sono logiche nell'estesa. Notate che la partizione estesa non viene mostrata da cfdisk.
Lo spazio libero è rappresentato dalla voce "Free space", nella colonna "FS type".
Tutto qui. Con "Type" vi viene mostrata una lista di ID di partizione da cui prendere per settare o cambiare il tipo di partizione.
Anche qui, come in fdisk, premendo CTRL+C si può uscire senza scrivere nulla su MBR, un po' come uscire con "Quit". Quindi, se fate disastri, CTRL+C è la vostra ancora di salvezza. Non fatevi prendere dal panico. ;)

--- sfdisk ---
Ah. sfdisk è il mio tool preferito. Per almeno cinque motivi:
1-può prendere comandi da standard input;
2-può prendere configurazioni di MBR da backup salvati;
3-può prendere comandi direttamente dal prompt;
4-è maledettamente difficile da usare :) ;
5-ti costringe a pensare per cilindri invece che per byte.
sfdisk è un tool per hacker. Non ve lo nascondo. Guardate qui:

#sfdisk /dev/hda << EOF
>,75,82
>,1000,83,*
>,1200,83
>,,83
>EOF

Ho appena detto a sfdisk di partizionarmi /dev/hda in questo modo:
--La prima partizione primaria Linux swap da 75 cilindri;
--La seconda partizione primaria Linux nativa da 1000 cilindri, bootabile;
--La terza primaria Linux nativa da 1200 cilindri;
--Tutto il resto del disco come Linux nativo.

La sintassi di utilizzo di sfdisk è abbastanza semplice, una volta che è capita. Essenzialmente sfdisk accetta quattro parametri:
-inizio partizione (in cilindri);
-fine partizione (in cilindri);
-tipo partizione (in esadecimale o valore di default E,S,L,X);
-flag di boot (*=bootabile; -=non bootabile).
Ogni valore di dimensione di partizione è espresso in cilindri. Per facilitarvi le cose, potete digitare da riga di comando
Quote
sfdisk -l /dev/<nome_periferica>
e guardare nella riga che comincia per "Units =". Subito dopo "cylinders of" c'è scritto un numero. Quel numero è il numero di byte per cilindro del vostro disco rigido. E' una costante che può variare da disco a disco.
Comunque ricordate che se volete fare una partizione da N Gigabytes (inteso come 1000 MB), avendo n come numero di byte per cilindro e c il numero di cilindri nella partizione che volete creare, avrete:
Quote
c = N / n
Ricordate che N e n devono avere lo stesso ordine di grandezza. Se N è espresso in megabyte, anche n dovrà essere espresso in megabyte. E così via.

Come avrete già notato, sfdisk può leggere valori separati da virgole. Le virgole separano i quattro valori di base che ho elencato sopra, in standard input (come ho scritto) o interattivamente, invocandolo:
Quote
sfdisk /dev/<nome_periferica>
Se si lamenta perchè il disco non è in accesso esclusivo aggiungete un --no-reread alla riga di invocazione. Se volete solo fare pratica senza scrivere nulla potete aggiungere anche un -n, che rende il tutto "read-only". Anche qui CTRL+C vale ed è spesso usato per salvarvi il disco rigido.
I valori si immettono così:
<inizio_partizione>,<fine_partizione>,<id_partizione>,<flag_boot>
Il <flag_boot> è opzionale. Notate che se andate di default sfdisk non mette flag di boot, da nessuna parte. Dovete essere voi a specificare quale flag mettere da che parte. Comunque è necessario solo il boot.
Valori assenti prendono valori di default. Come avevo scritto sopra, ad esempio, la riga
>,1000,83,*
crea una partizione primaria che comincia dal cilindro successivo a quello dove finisce quella prima (in questo caso la swap, che finisce al 75), ha una dimensione di 1000 cilindri, ha id 83 (Linux nativa) ed è bootabile. Il valore di inizio è di default, ed è 76.
L'ultima partizione ha due valori di default:
>,,83
Comincia nel cilindro successivo a quello dove finisce quella prima, ha una dimensione di default che prende tutto lo spazio libero rimasto e ha un id 83.
Se create una partizione estesa potrete continuare a creare partizioni logiche all'interno dell'estesa.
sfdisk ha alcuni valori di default per i tipi di partizione: E, S, L e X, dove stanno per estesa (Extended -5-), swap (Swap -82-), Linux nativa (Linux -83-) e Linux estesa (Linux eXtended -85-).

--- Alcuni ID di partizioni ---
Di seguito ho riportato alcuni ID di partizione, semmai vi servano e/o voleste avere un veloce riferimento senza andare a giochicchiare troppo nei tool di partizionamento.

5  --> Estesa DOS (compatibile con estesa Linux)
85 --> Estesa Linux (meglio usare la DOS per compatibilità)
7  --> HPFS/NTFS
b  --> Fat32
82 --> Linux swap
83 --> Linux nativa (può essere ext2, ext3, XFS, JFS, ReiserFS...)

Molti altri ID li potete trovare in fdisk, usando "l" per accedere alla lista di tipi di partizioni.
« Last Edit: Wed 05 December 2007, 16:57 by MsZ »

Offline MsZ

  • Il Manutentore
  • Militante
  • ******
  • Posts: 913
  • GNUru Meditation
Re: Partizionamento dischi rigidi con GNU/Linux
« Reply #1 on: Wed 05 December 2007, 16:45 »
*** Backup ***
Ricordate sempre... se giocate troppo nell'MBR e poi salvate che avete fatto un macello, poi saranno cavoli amari nel ripristinare le cose...
Allora organizzatevi prima e fate dei backup della tabella di partizione. Se potete, fate il backup dell'intero Master Boot Record. Poi vi spiego come.
Con sfdisk è possibile fare un backup completo dell'intera mappatura delle partizioni, primarie e/o logiche.
Quote
sfdisk -d /dev/<nome_periferica> > <output>
scriverà nel file "output" la lista completa delle partizioni presenti sul disco. Tenetelo bene quel file, perchè se vi servirà dovrete tirarlo fuori e poi fare
Quote
sfdisk /dev/hda < <output>
e sfdisk scriverà la tabella di partizione esattamente com'era prima che voi faceste il disastro.
Ricordate che se il kernel non trova i riferimenti di inizio e fine partizione, o ne trova di differenti, i filesystem non saranno più "sincronizzati" con le partizioni, e potrete perdere interi dischi rigidi di dati!!
Se volete fare una copia del MBR e non avete alcuna partizione estesa potete anche agire con dd:
Quote
dd if=/dev/<nome_periferica> of=<output> bs=512 count=1
dd scriverà nel file output il backup completo del Master Boot Record. Per rimetterlo a posto basta fare
Quote
dd if=output of=/dev/<nome_periferica> bs=512 count=1
e il MBR tornerà a sedersi nel settore 0, come se nulla fosse successo.
Ricordate anche che, se fate casini con le tabelle di partizione, non scrivete nulla sul disco sul quale avete giocato, altrimenti potrà essere molto più difficile recuperare i dati!!

In sostanza: è sempre bene andare cauti con le partizioni. Esse contengono i vostri dati. Trattatele bene. ;)

***Filesystem***
Beh, una volta partizionato un disco lo dovete formattare, no?
E allora via.

--- ext2/3 ---
Il tool principale è mke2fs (mkfs.ext2 - mkfs.ext3).
Con mke2fs potete creare filesystem ext2 e ext3. Dovete solo tenere a mente che la differenza principale tra ext2 e ext3 è il journaling.
Il journaling è una proprietà interessante di alcuni filesystem (ext3, XFS, JFS, ReiserFS e altri) di tenere in una cache su disco, chiamata "journal", alcune modifiche critiche al filesystem. Si possono riassumere con "metadati di journaling", e grazie ad essi, se dovesse spegnersi il computer per uno sbalzo di corrente, in pochi istanti vengono ripristinati i dati immagazzinatinel journal sottoforma di "modifiche".
Semplicemente, per creare un ext2 fate mke2fs /dev/<nome_partizione>.
--- Ricordate: ora che siamo nei filesystem dobbiamo ragionare per partizioni e non per periferiche!! ---
Per un ext3 la cosa è leggermente diversa: mke2fs -j /dev/<nome_partizione>.
Notata la "-j" nella riga di comando? E' l'unica differenza di invocazione. Ora abbiamo due filesystem: un ext2 e un ext3 con journal.
ext3 è un filesystem stabile e veloce, indicato per l'utilizzo generico in root. E' supportato da qualsiasi kernel Linux recente, anche senza ricompilazione.

--- swap ---
La partizione di swap è molto diversa da qualsiasi partizione di sistema. Essendo praticamente "un pezzo di RAM" su disco, deve essere molto veloce e non troppo grande. Generalmente un buon valore di dimensione è pari a quella della RAM installata.
Per crearla, dopo aver assegnato alla partizione l'ID giusto (82) basta fare mkswap /dev/<nome_partizione>.
La partizione di swap non si monta: Linux la usa automaticamente dopo avergli dato l'ordine di attivarla con swapon /dev/<nome_swap>.

--- XFS ---
XFS è uno dei filesystem più solidi e performanti esistenti per GNU/Linux. Esiste dal 1996, fu creato da Silicon Graphics per le macchine IRIX che producevano, e fu portato su Linux. Regge senza problemi partizioni di dimensioni superiori anche a 500GB, usa metadati di journaling e si può usare per ogni partizione che vi viene in mente.
--- !!!Ricordate!!! --- Se non avete built-in nel kernel la capacità di leggere un determinato filesystem O un initrd con i moduli necessari alla letture di un determinato filesystem E la vostra partizione di root è formattata con un filesystem che il vostro kernel non è in grado di leggere, il vostro sistema non sarà bootabile!!! ---
Crearlo è molto semplice. mkfs.xfs /dev/<nome_partizione>.
Potete usare un filesystem XFS per archivi di grandi dimensioni. Sappiate comunque che se non avete particolari esigenze un ext3 per gli archivi va più che bene.
Ciononostante uno dei grandi "difetti" di XFS è che una volta cancellato qualcosa dal filesystem non è più possibile recuperarlo. Esistono tool per la decancellazione per alcuni filesystem, ma per XFS non ve n'è alcuno. Questo dipende dal modo in cui un filesystem cancella i dati al suo interno.

--- ReiserFS ---
Reiser è famoso e molto usato. Usa journal ed è piuttosto affidabile.       
mkreiserfs /dev/<nome_partizone>
oppure
mkfs.reiserfs /dev/<nome_partizone>

--- NTFS ---
Con GNU/Linux potete anche creare filesystem NTFS. Solo se avete il supporto giusto nel kernel e i tool giusti, però.
Se lo avete, potete usare mkntfs.
mkntfs /dev/<nome_partizione>
All'inizio farà un lungo zero-filling. (Per spiegazioni riferitevi alla sezione "zero-filling".) Più grande la partizione, più lungo lo zero-filling. Poi creerà il filesystem vero e proprio.
Potrete sempre montarlo come "ntfs". Il filesystem creato sarà compatibile con Windows NT e NT-based sistemi Microsoft (Windows 2000, Windows XP, Windows Vista). Tuttavia, puramente per una questione di dicurezza, potrei suggerire di tenere filesystem NTFS creati in GNU/Linux solo come archivi o partizioni temporanee di trasferimento dati.

*** L'ID 83, riferito a filesystem Linux nativi, può essere usato per ext2/3, XFS, ReiserFS e JFS tra i principali. ***

***zero-filling***
Lo "zero-filling" è una pratica che consiste nel coprire una partizione o un intero disco rigido con degli zeri, principalmente per due scopi:
1- Cancellare dat riservati e/o importanti;
2- "Fare spazio" o ripulire una partizione per l'installazione di un nuovo filesystem.
Nel secondo caso è consigliato farlo quando si ha ragione di credere che il filesystem precedente sia troppo "sporco" o danneggiato dal punto di vista logico per poter fare qualcosa. Fare uno zero-filling su partizioni simili è una buona cosa, perchè permette di fare "tabula rasa" dei dati in una partizione.

Lo zero-filling in GNU/Linux è facile da fare. Il problema è il comando.
--- !!!Attenzione!!! --- dd è un potente tool per la gestione di byte su un supporto scrivibile. Basta un minuscolo errore di scrittura e potrete rischiare di perdere tutti i vostri dati!!! ---
Per lo zero-filling si usa dd.
dd if=/dev/zero of=/dev/<nome_periferica_partizione> bs=<num1> count=<num2>
Questo è l'utilizzo di base di dd.
<nome_periferica_partizione> = nome della periferica o della partizione di cui si vuole azzerare il contenuto
<num1> = numero di byte per unità di scrittura
<num2> = numero di unità di scrittura
Questo l'avete già visto nella sezione "Backup". Solo che qui lo usiamo in maniera DISTRUTTIVA, quindi siate consci di ciò che fate.
dd if=/dev/zero of=/dev/hda1 bs=1024 sovrascriverà con zeri l'intera partizione /dev/hda1, scrivendo 1024 bytes per unità. Si può fare anche per interi dischi rigidi.

***badblocks***
badblocks è un piccolo tool per GNU che può identificare e contrassegnare tutti i settori danneggiati fisicamente su un disco rigido o, generalmente, su una memoria di massa.
Essenzialmente il comando si riduce a badblocks /dev/<nome_periferica_partizione>.
Così facendo badblocks controllerà tutti i blocchi di una determinata periferica o di una determinata partizione, e contrassegnerà, riportandoli all'utente, quelli danneggiati come inutilizzabili, tentando di spostarne i dati su settori integri.
Ovviamente anche qui, più grande è la dimensione di un disco o di una partizione, più tempo badblocks impiegherà a fare la scansione.
E' importante notare che usare badblocks direttamente prima di formattare una partizione è sconsigliato, in quanto esatti valori di byte per settore vanno riportati al tool di creazione del filesystem, altrimenti potrebbero sorgere problemi di incompatibilità, oppure la chiamata a badblocks potrebbe non aver sortito effetti apprezzabili.
Per questo è consigliato, se si desidera usare badblocks prima di una formattazione, usare direttamente il tool per la creazione del filesystem con l'opzione "-c" sulla riga di comando. Verrà chiamato badblocks con i valori corretti e il filesystem verrà creato rispettando il rapporto della scansione.

 

Creative Commons License All ValerioCipriani.com contents are published according to Creative Common License, except different instructions. The Staff is not responsible of eventually guide, article and publishing mistakes. All published items are patent free. All trade marks reported are right reserved. Contact us, Info.