I comandi Linux: il sistema ( 3 ) | ALTRI capitoli | |||||
Il Master Boot Record ( MBR ) è il primo settore del disco fisso: settore 1, cilindro 0, head 0. Il Master Boot Record ( MBR ) viene caricato dal BIOS ( Basic Input Output System ) in memoria ( RAM ). Il ruolo del Master Boot Record è di identificare il settore del disco fisso ( Volume Boot Record o Boot Record ) da caricare in memoria, per poter avviare un sistema operativo. Il Master Boot Record ( MBR ) è composto da 512 byte. E' possibile copiare su file il Master Boot Record, eseguendo il comando:
Il comando
il contenuto del file verrà stampato a video in formato esadecimale, con unità di 2 byte. Occorre ricordare che Intel memorizza i dati, con dimensioni superiori al byte, utilizzando il cosiddetto ordine "little-endian", in cui il byte meno significativo precede il byte più significativo. Quindi, le prime due righe dell'output del comando
sono da leggere:
Occorre ricordare che l'output del comando
In caso esistessero piu' dischi fissi, il BIOS scansiona, in ordine numerico, i primi 512 byte di ciascun disco, alla ricerca degli ultimi due byte di questo primo settore: 1FE 1FF. Quando questi due byte contengono i valori 55AA, il primo settore del disco corrente è il Master Boot Record di un disco di boot ( in realtà, trattandosi di una word, a 16 bit, memorizzata in un sistema Intel, in Little Endian, la sequenza di boot è AA55. Vedi l'articolo di Daniel B. Sedory, a riguardo ). A questo punto, il BIOS carica in memoria i 512 byte del MBR: in questi 512 byte, è installato un programma, il bootloader, al quale viene trasferito il controllo del processo. Il bootloader è un programma, scritto in codice assembly, contenuto nei primi 446 byte del MBR. Nel nostro esempio, il bootloader inizia con i primi due byte, che contengono l'istruzione JMP ( Jump ):
che dice al processore di "saltare" all'istruzione contenuta nella cella di memoria 0x65 ( 0 + 2 + 63 ). Il booloader può, semplicemente, andare a leggere la tabella delle partizioni, scritta nei successivi 64 byte del MBR, in cerca di una partizione di boot. Trovata la partizione di boot, il bootloader caricherà in memoria il primo settore ( Volume Boot Record o Boot Record ) della partizione attiva di boot, settore che conterrà il codice di avvio del sistema operativo. La tabella delle partizioni, che inizia al byte 1BE e termina al byte 1FD, contiene 4 record da 16 byte ciascuno, ciascuno dei quali contenente le informazioni relative ad una partizione:
Una sola delle partizioni è la partizione di boot: quella il cui primo byte, all'interno della tabella delle partizioni del MBR, contiene il valore 80 ( esadecimale ). Il primo settore ( Volume Boot Record o Boot Record ) della partizione di boot conterrà il codice di avvio del sistema operativo. In un disco di boot, ci deve sempre essere una partizione attiva di boot. Spesso, la partizione attiva di boot è la sola partizione esistente:
Un comando Linux permette di visualizzare i dati contenuti nella tabella delle partizioni:
dove
dove il primo byte:
indica il tipo di partizione: attiva, se il valore è 80 ( perchè ha il bit più significativo impostato ), non attiva se il valore è zero. Il secondo, terzo e quarto byte:
indicano, rispettivamente, la testina, il settore ed il cilindro di partenza della partizione. L'ordine canonico dovrebbe essere CHS ( Cilindro, Head o testina, Settore ), ma, spesso, l'ordine di scrittura è quello riportato nel nostro esempio. I cilindri vengono contati da zero, così come le testine. I valori, nella tabella delle partizioni, sono espressi in notazione esadecimale, mentre nell'output del comando
Per convertire un indirizzo CHS in un indirizzo LBA ( Logical block addressing ), di tipo lineare, basta applicare la formula:
dove 255 potrebbe essere il numero delle testine presenti ( quantità variabile. Vedi il comando
indica il filesystem presente nella partizione, con 07 che indica: "HPFS o NTFS, QNX e Advanced Unix". I byte sesto, settimo e ottavo:
indicano, in codifica CHS, l'ultimo settore della partizione:
per un totale di 407.552 settori. I byte nono, decimo, undicesimo e dodicesimo:
esprimono il settore di inizio della partizione, espresso in LBA ( Logical block addressing ), lo stesso settore indicato dai byte secondo, terzo e quarto, in formato CHS. In questo caso, però, trattandosi di un numero composto da 4 byte, dobbiamo ricordarci che Intel utilizza l'ordine "little Endian", in cui i byte meno significativi vengono memorizzati nelle posizioni più basse della memoria. Quindi:
con 0x800 pari a 2048. Affinchè sia più chiaro: 2048, in notazione decimale, o 800, in notazione esadecimale, corrisponde alla sequenza di bit:
ma viene memorizzato, da Intel, in ordine inverso:
Stesso discorso vale per gli ultimi 4 byte della partizione, che indicano la dimensione della partizione, espressa in settori:
che corrisponde a 407.552. Se può sembrare eccessivo lo spazio lasciato vuoto prima della prima partizione ( che inizia al settore 2048 ), oppure eccessivamente ridotto lo spazio riservato alla prima partizione, basti sapere che il MBR pubblicato come esempio è installato in un sistema con due sistemi operativi, di cui il primo è Windows 7. Ed è proprio Windows 7 che stabilisce sia il settore dal quale far partire la prima partizione, sia la dimensione della prima partizione. Vedi, a questo riguardo, l'articolo An Examination of the Windows™ 7 MBR ( Master Boot Record ), di Daniel B. Sedory, molto illuminante. Se il sistema in cui è installato il Master Boot Record di esempio contiene due diversi sistemi operativi, è molto probabile che il codice assembly scritto nei primi 446 byte del MBR, chiamato MBP o Master Boot Program, non si limiti a caricare il Volume Boot Record della partizione attiva. Avendo a disposizione i soli 512 byte del MBR, il processo di boot, in questi casi, dovrà essere suddiviso in due tempi: un Initial Program Loader ( IPL ), che sarà contenuto all'interno del MBR, ed il bootloader vero e proprio, che sarà scritto in qualche altro settore del disco e che metterà l'utente, per esempio, nelle condizioni di sceglere il sistema operativo da caricare. Il comando
L'opzione
Da questo output è possibile dare una definizione più precisa di partizione: una partizione è semplicemente un gruppo di cilindri contigui, logicamente uniti in un anello più grande. E' possibile richiedere un output in cui Start e End siano espressi in settori ( e non in cilindri ):
L'opzione
con la prima ( sectors ) come valore di default. L'opzione
Per gestire la tabella delle partizioni, è possibile usare il comando
In questo caso, abbiamo chiesto a
Inutile, ma necessario, ricordare che con il comando
che sta per Quit. Al contrario, se desiderate confermare le modifiche apportate alla tabella delle partizioni, usate il comando:
che sta per Write. Se desiderate vedere tutte le partizioni presenti sul disco corrente, usate il comando:
che sta per Print. Se desiderate creare una nuova partizione, inserite il comando:
e seguite il percorso guidato di
Per modificare il filesystem di una partizione, usate il comando:
che sta per " type ", o " id di sistema di una partizione ". Per conoscere tutti gli ID disponibili e le associazioni ID - filesystem, usate il comando:
che è l'equivalente del comando:
eseguito all'esterno del comando
apre un sottomenù di ulteriori opzioni, ancor più specializzate:
Come potete notare, il comando
In particolare, Il comando
sia in modalità interattiva:
Attenzione: a differenza di quanto accade con il comando
In modalità a linea di comando, è possibile elencare i dischi collegati, con le relative partizioni ( stampare a video la tabella delle partizioni di ciascun disco collegato ):
E' possibile ottenere un output, facile da inviare ad un programma esterno, per una eventuale elaborazione:
In modalità interattiva, è necessario specificare l'unità sulla quale si desidera operare:
In seguito, sarà possibile cambiare periferica, grazie al comando
I comandi disponibili, in modalità interattiva, sono:
corrispondente al comando
L'output del comando
La modalità
oppure, il semplice elenco di tutte le periferiche collegate:
Utilizzate il comando:
per aprire la guida generale o specifica per uno dei comandi disponibili:
che controlla la partizione N per l'allineamento TIPO (min|ott). Prima di eseguire qualsiasi operazione di ridimensionamento di una partizione, infatti, è possibile ( e consigliabile ) verificare il corretto allineamento delle partizioni. Questo comando verifica il corretto allineamento del primo settore della partizione. Il tipo di allineamento può essere " optimal " o " minimal ". Il valore di N è il numero della partizione della quale si desidera verificare l'allineamento, numero restituito nell'output dell'opzione
Se, al contrario, desidero verificare se l'allineamento del primo settore, nella partizione 1, è " minimal ", eseguirò:
In cosa consiste l'allineamento del primo settore del disco? Un tempo, il disco fisso veniva suddiviso in settori di 512 byte. Qualsiasi operazione di scrittura e lettura su disco, quindi, veniva effettuata su blocchi di 512 byte. In seguito, vennero introdotti i settori di 4096 byte ( 512 x 8 ). Advanced Format è il nome dato, da Western Digital, ai dischi che implementano settori da 4 KB. Per mantenere la compatibilità con i software precedenti, i costruttori decisero di utilizzare settori fisici di 4096 byte, ma di mantenere, a livello software, il vecchio settore di 512 byte. Quindi, un settore fisico di 4096 byte veniva letto, dal sistema operativo, come una sequenza di 8 settori di 512 byte. Cosa accadrebbe se il sistema operativo salvasse un file, usando, in parte, blocchi di 512 byte appartenenti ad un settore fisico di 4096 byte, in parte, usando blocchi di 512 byte appartenenti ad un differente settore fisico di 4096 byte, pur avendo, il file, dimensioni tali da poter essere memorizzato all'interno di un solo settore fisico di 4096 byte? Il sistema operativo dovrebbe eseguire due operazioni di scrittura su disco, invece di una. Questo è ciò che accade con il sistema operativo Windows XP, che installa la prima partizione a partire dal settore 63. Visto che 63 non è divisibile per 8, questo comporta che i settori logici, i cluster del filesystem, composti da 8 settori di 512 byte, non potranno mai coincidere con i settori fisici del disco, composti da 4096 byte sequenziali. Per ovviare a questo inconveniente, molti sistemi operativi si preoccupano di far partire una partizione dal primo settore di 4096 byte disponibile. Oppure, in alternativa, dall'ottavo settore, oppure da un settore che sia multiplo di 8: 64, oppure, come nel caso di Microsoft Windows Vista e Windows 7, 2048. Il comando
dove:
Il comando interattivo:
esegue un semplice controllo sul file system NUMERO;
copia un file system in un'altra partizione;
crea una nuova tabella delle partizioni ( etichetta ) per il disco. Attenzione: creare una nuova tabella delle partizioni significa rendere inutilizzabili i dati eventualmente memorizzati sul disco. Un disco per il quale viene creata una nuova tabella delle partizioni, non ha alcuna partizione. label-type può avere uno dei seguenti valori:
MS-DOS è ancora oggi l'etichetta più comune per i PC. Una volta creata la tabella delle partizioni, sarà possibile creare una partizione. Per creare una partizione,
che crea una partizione, anche senza installare alcun filesystem, nel caso il filesystem da installare ( TIPO_FS ) non fosse supportato da
INIZIO e FINE vengono espressi, di default, in megabyte, ma è possibile modificare l'unità di misura, usando il comando
In questo esempio, abbiamo creato una nuova partizione primaria, senza avervi installato alcun filesystem. A questo punto, per installare un filesystem nella nuova partizione appena creata, è possibile utilizzare il comando:
che crea un file system TIPO_FS, sulla partizione NUMERO. I file system supportati sono: "fat16", "fat32", "ext2", "linux-swap", "reiserfs". Se si desidera creare una partizione e, contemporaneamente, installarvi un filesystem, è anche possibile utilizzare il comando:
che crea una partizione con un file system. Attenzione: il codice per la gestione del file system
È consigliato usare
elimina la partizione NUMERO, mentre il comando:
ripristina una partizione persa, normalmente localizzabile tra INIZIO e FINE. Se la partizione viene trovata,
ridimensiona la partizione NUMERO e il suo file system. Di default, INIZIO e FINE vengono espressi in megabyte. Il comando:
modifica il FLAG sulla partizione NUMERO. I FLAG supportati sono: "boot", "root", "swap", "hidden", "raid", "lvm", "lba", "palo", mentre STATO può assumere due valori: "on" o "off".
Un disco fisso è composto da una serie di tracce concentriche, ciascuna delle quali è, a sua volta, suddivisa in settori ( o blocchi ), ciascuno dei quali può contenere un numero di byte predeterminato ( 512, 1048, 4096, etc. ). In ciascun settore, viene salvata una checksum dei dati in esso memorizzati ( CRC, Cyclic Redundancy Check ). Questa checksum viene calcolata ogni qualvolta il sistema operativo modifica i dati memorizzati in quello specifico settore. In questo modo, ogni volta in cui il sistema operativo dovrà prelevare ( leggere ) i dati memorizzati in quel settore, potrà ricalcolare la checksum e verificare che corrisponda alla checksum memorizzata su disco. Se le due checksum coincidono, si può presumere che i dati non siano stati manomessi o modificati. Se le due checksum non coincidono, si può desumere che quello specifico settore sia da considerarsi inaffidabile, visto che restituisce dati diversi da quelli originariamente immessi. Il sistema operativo, a questo punto, dovrà tenere traccia di quel settore, in modo da impedire al filesystem di riutilizzarlo per i nuovi file salvati. Sempre sperando di poter recuperare il contenuto originariamente memorizzato nel settore danneggiato. Il comando
Per vedere lo stato di avanzamento delle operazioni, utilizzate le opzioni
e
Cos'è un " blocco di dati "? E' una porzione di disco, di dimensioni variabili, a seconda del filesystem in uso. Per conoscere le dimensioni di un blocco di dati in un filesystem, possibilmente non montato, eseguite:
E' possibile chiedere a
Il valore di default è 1024. Come lavora il comando
Per essere certi del risultato, in realtà, il comando
La modalità distruttiva è 10 volte più veloce della modalità non distruttiva, ovviamente, ma, tenete a mente, comporta la cancellazione di tutti i dati preesistenti! Inoltre, ricordate che
per poi dire al comando
Una volta che
In questo esempio, il comando Il comando
link simbolici che puntano alla cartella:
che, a sua volta, contiene link simbolici che puntano al vero file eseguibile del programma invocato. A differenza della semplice creazione di un link simbolico ( chiamato, nel sistema delle alternative, " master " ), il meccanismo delle alternative assicura la selezione di tutti i file a diverso titolo associati ad uno specifico package ( come i file della guida, i file di configurazione, etc., chiamati, nel sistema delle alternative, " slave " ). Normalmente, il comando
Un esempio tipico di meccanismo delle alternative è l'emulatore di terminale, del quale, normalmente, vengono installate più versioni, seppure ne venga eseguita sempre una sola tra tutte quelle disponibili:
In questo esempio, l'utente potrebbe scegliere il proprio terminale, tra 5 applicazioni differenti, ciascuna alternativa alle altre. Affinchè
che restituisce un semplice elenco delle alternative, oppure il comando:
che vi restituirà un output simile al seguente:
Da questo output, risulta chiaro che il terminale di default di questo sistema è:
mentre le soluzioni alternative ( o master ) disponibili sono:
Questo significa che eseguendo, da shell, il comando:
il sistema operativo eseguirà, in realtà, il comando:
Il terminale di default di questo sistema è visibile anche seguendo i link simbolici creati dal sistema delle alternative:
L'ordinamento delle alternative non è casuale: visto che, in fase di creazione del gruppo, è stata selezionata la " modalità automatica ", il comando
che vi restituirà un output con elencate tutte le alternative, con l'alternativa di default evidenziata ( con un asterisco, '
Questo comando richiede i privilegi di " root ". Lo stesso risultato può essere ottenuto, in modo non interattivo, con il comando
E' anche possibile creare un nuovo gruppo di applicazioni, oppure aggiungere master ad un gruppo già esistente. Per esempio:
Questo comando ( che è da intendersi scritto su un'unica riga ) " installa " un nuovo gruppo, chiamato " java ", ed un link simbolico, anch'esso chiamato " java ", in
che punta a:
La priorità assegnata a questo nuovo master è 1. I link che vengono generati da questo semplice comando, sono:
Se il nome del gruppo di alternative ( " java ", nel nostro esempio ) già esiste, il nuovo master verrà aggiunto al gruppo esistente. In caso contrario, verrà creato il nuovo gruppo, impostato in modalità automatica. Se il gruppo è impostato in modalità automatica e la priorità della nuova alternativa è più alta delle altre alternative già installate per il gruppo, il link simbolico verrà aggiornato, affinchè punti al file dell'alternativa appena aggiunta. Naturalmente, come è possibile creare nuove alternative, è possibile anche rimuoverne:
In questo esempio, rimuoviamo l'alternativa
|
||||||
I comandi Linux: il sistema ( 3 ) | Le guide di .bit: contenuto originale |