
GPT fdisk (ovvero gdisk, cgdisk e sgdisk) e FixParts di Roderick W. Smith, [email protected]
Questo pacchetto include il codice sorgente di quattro programmi correlati per il partizionamento dei dischi:
gdisk -- Questo programma è modellato su Linux fdisk, ma opera su dischi con tabella delle partizioni GUID (GPT) piuttosto che sui dischi Master Boot Record (MBR) che fdisk modifica. Come tale, gdisk è uno strumento interattivo in modalità testo per manipolare le partizioni, ma non fa nulla al contenuto di tali partizioni (di solito file system, ma a volte spazio di swap o altri dati).
cgdisk -- Questo programma è modellato su Linux cfdisk, ma opera su dischi GPT piuttosto che sui dischi MBR che cfdisk modifica. Come tale, cgdisk è uno strumento in modalità testo basato su curses per manipolare le partizioni, vale a dire che usa un'interfaccia che si basa sui tasti freccia e su un display dinamico piuttosto che sulle lettere di comando e su un display a scorrimento come fa gdisk.
sgdisk -- Questo programma è concettualmente simile a Linux sfdisk e a FreeBSD gpt, ma i suoi dettagli operativi differiscono. Consente la manipolazione di dischi GPT tramite opzioni da riga di comando, quindi è adatto per l'uso in script o da parte di esperti per eseguire attività specifiche che potrebbero richiedere diversi comandi in gdisk.
fixparts -- Questo programma, a differenza dei tre precedenti, opera su dischi MBR. È pensato per correggere alcuni problemi che possono essere creati da varie utility. In particolare, può correggere partizioni estese con dimensioni errate e partizioni primarie situate nel mezzo di partizioni estese. Consente inoltre di cambiare lo stato primaria vs. logica (entro i limiti di ciò che è legale nello schema MBR) e di apportare alcune altre modifiche minori. NON supporta la creazione di nuove partizioni; per quello, dovresti usare fdisk, parted o qualche altro strumento.
Maggiori dettagli sulle capacità di questi strumenti seguono.
Tutti e quattro i programmi si basano sullo stesso insieme di codice sottostante; differiscono solo nelle loro interfacce di controllo (definite rispettivamente in gdisk.cc, cgdisk.cc, sgdisk.cc e fixparts.cc) e nel codice di supporto che utilizzano.
Il programma gdisk è pensato come un programma (in qualche modo) analogo a fdisk per dischi partizionati GPT, cgdisk è anch'esso un analogo di fdisk, e sgdisk fornisce la maggior parte delle funzionalità di gdisk in un programma più adatto agli script. Sebbene libparted e i programmi che lo usano (GNU Parted, gparted, ecc.) forniscano la capacità di gestire dischi GPT, hanno alcune limitazioni che gdisk supera. I vantaggi specifici di gdisk, cgdisk e sgdisk includono:
La capacità di convertire sul posto dischi partizionati MBR in formato GPT, senza perdere dati
La capacità di convertire sul posto disklabel BSD per creare partizioni GPT, senza perdere dati
La capacità di convertire dal formato GPT al formato MBR senza perdita di dati (solo gdisk e sgdisk)
Specifica più flessibile dei GUID dei codici di tipo di file system, che GNU Parted tende a corrompere
Chiara identificazione del numero di settori non allocati su un disco
Un'interfaccia utente familiare a chi usa da tempo Linux fdisk e cfdisk (solo gdisk e cgdisk)
Il codice del boot loader MBR viene lasciato intatto
La capacità di creare un MBR ibrido, che consente ai sistemi operativi che non conoscono GPT di accedere fino a tre partizioni GPT sul disco (solo gdisk e sgdisk)
Ovviamente, GPT fdisk non è privo di limitazioni. In particolare, gli manca la consapevolezza dei file system e le funzionalità legate ai file system di GParted. Ad esempio, non puoi ridimensionare il file system di una partizione o creare una partizione con un file system già presente con gdisk. Non esiste una versione GUI di gdisk.
Il pacchetto GPT fdisk fornisce tre file di programma: il gdisk interattivo in modalità testo, il cgdisk interattivo basato su curses e lo sgdisk guidato da riga di comando. I primi due sono pensati per l'uso nel partizionamento manuale dei dischi o nella modifica dei dettagli di partizionamento; sgdisk è pensato per l'uso in script per aiutare ad automatizzare attività come la clonazione di dischi o la preparazione di più dischi per l'installazione di Linux.
La creazione di questo programma è stata motivata dalle richieste di aiuto che ho visto nei forum online da parte di utenti che hanno trovato le loro tabelle delle partizioni corrotte da vari strumenti di partizionamento difettosi. Sebbene la maggior parte dei sistemi operativi possa gestire questi dischi senza problemi, gli strumenti basati su libparted (GParted, parted, la maggior parte degli installer Linux, ecc.) tendono a dare problemi quando vengono presentati loro questi dischi. Tipicamente, il sintomo è un disco che sembra non contenere partizioni; tuttavia, a volte lo strumento libparted presenta partizioni diverse da quelle che il sistema operativo vede.
Ho osservato quattro cause di questi sintomi, tre delle quali FixParts può correggere:
Vecchi dati GPT -- Se un disco viene usato come disco GPT e poi riutilizzato come disco MBR, i dati GPT potrebbero non essere stati cancellati completamente. Questo accade se il disco viene ripartizionato con fdisk o con l'installer di Microsoft Windows, per esempio. (Gli strumenti basati su libparted rimuovono correttamente i vecchi dati GPT quando convertono dal formato GPT al formato MBR.) FixParts controlla questo problema all'avvio e offre di correggerlo. Se scegli di cancellare i dati GPT, questa cancellazione avviene immediatamente, a differenza di altre modifiche apportate dal programma.
Partizioni estese con dimensioni errate -- Alcuni strumenti creano una partizione estesa troppo grande, che tipicamente termina dopo l'ultimo settore del disco. FixParts corregge automaticamente questo problema (se usi l'opzione 'w' per salvare la tabella delle partizioni).
Partizioni primarie all'interno di una partizione estesa -- Alcune utility creano o spostano partizioni primarie nell'intervallo coperto dalla partizione estesa. FixParts di solito può correggere questo problema trasformando la partizione primaria in una partizione logica o cambiando una o più altre partizioni logiche in primarie. Tali correzioni non sono sempre possibili, comunque, almeno senza eliminare o ridimensionare altre partizioni.
Dati RAID residui -- Se un disco viene usato in un array RAID e poi riutilizzato come disco non RAID, alcune utility possono confondersi e non riuscire a vedere il disco. FixParts NON può correggere questo problema. Devi distruggere i vecchi dati RAID, o eventualmente rimuovere il pacchetto dmraid dal sistema, per risolvere questo problema.
Quando viene eseguito, FixParts presenta un'interfaccia simile a fdisk, che consente di regolare i tipi di partizione (primaria, logica o omessa), cambiare i codici di tipo, cambiare il flag di avviabilità e così via. Sebbene tu possa eliminare una partizione (omettendola), non puoi creare nuove partizioni con il programma. Se sei abituato a partizionare dischi, in particolare con Linux fdisk, due caratteristiche insolite di FixParts richiedono un chiarimento:
Nessuna partizione estesa -- Internamente, FixParts legge la tabella delle partizioni e scarta i dati su qualsiasi partizione estesa che trova. Quando salvi la tabella delle partizioni, il programma genera una nuova partizione estesa. Questo design significa che il programma corregge automaticamente molti problemi legati alla partizione estesa. Significa anche che non vedrai alcuna traccia di partizioni estese nell'interfaccia utente di FixParts, sebbene tenga traccia dei requisiti e ti impedisca di creare layout illegali, come una primaria tra due logiche.
Numerazione delle partizioni -- Nella maggior parte degli strumenti Linux, le partizioni 1-4 sono primarie e le partizioni 5 e successive sono logiche. Sebbene una tabella delle partizioni valida caricata in FixParts inizialmente sia conforme a questa convenzione, alcuni tipi di tabelle danneggiate potrebbero non esserlo, e varie modifiche che fai possono anche causare deviazioni. Quando FixParts scrive la tabella delle partizioni, la sua numerazione verrà modificata per conformarsi alle convenzioni MBR standard, ma dovresti usare l'etichettatura esplicita delle partizioni come primarie o logiche piuttosto che i numeri di partizione per determinare lo stato di una partizione.
Per compilare GPT fdisk, devi avere installati gli strumenti di sviluppo appropriati, in particolare la GNU Compiler Collection (GCC) e il suo compilatore g++ per C++. Ho anche testato la compilazione con Clang, che sembra funzionare; tuttavia, non ho fatto test approfonditi dei binari risultanti, oltre a controllare alcune nozioni di base. Su Windows, si può usare invece Microsoft Visual C++ 2008. Inoltre, nota questi requisiti:
Su Linux, FreeBSD, OS X e Solaris, deve essere installata libuuid. Questo è lo standard per Linux e OS X, sebbene tu possa aver bisogno di installare un pacchetto chiamato uuid-dev o qualcosa di simile per ottenere gli header. Su FreeBSD, deve essere installato il port e2fsprogs-libuuid.
La libreria ICU (http://site.icu-project.org), che fornisce supporto per i nomi di partizione Unicode, è opzionale su tutte le piattaforme tranne Windows, su cui non è supportata. L'uso di questa libreria era necessario per ottenere un corretto supporto dei nomi di partizione UTF-16 nelle versioni di GPT fdisk precedenti alla 0.8.9, ma a partire da quella versione non dovrebbe più essere necessaria. Ciononostante, puoi usarla se hai problemi con il nuovo supporto UTF-16. Questa libreria è normalmente installata in Linux e OS X, ma potresti aver bisogno di installare gli header di sviluppo (libicu-dev o qualcosa di simile in Linux; o il pacchetto Fink libicu36-dev in OS X). Per compilare con supporto ICU, devi modificare il Makefile: Cerca le righe commentate che fanno riferimento a USE_UTF16, -licuuc, -licudata o -licucore. Decommentale e commenta le equivalenti che non hanno queste righe.
Il programma cgdisk richiede la libreria ncurses e i suoi file di sviluppo (header). La maggior parte delle distribuzioni Linux installa ncurses di default, ma potresti aver bisogno di installare un pacchetto chiamato libncurses5-dev, ncurses-devel o qualcosa di simile per ottenere i file header. Questi file erano già installati sul mio sistema di sviluppo Mac OS X; tuttavia, potrebbero essere stati installati come dipendenze di altri programmi che ho installato. Se hai problemi a installare ncurses, puoi compilare gdisk e/o sgdisk senza cgdisk specificando a make solo i target che vuoi compilare.
Il programma sgdisk richiede la libreria popt e i suoi file di sviluppo (header). La maggior parte delle distribuzioni Linux installa popt di default, ma potresti aver bisogno di installare un pacchetto chiamato popt-dev, popt-devel o qualcosa di simile per ottenere i file header. Gli utenti Mac OS possono trovare una versione di popt per Mac OS da Darwin Ports (http://popt.darwinports.com) o Fink (http://www.finkproject.org); tuttavia, dovrai prima installare DarwinPorts o Fink (sono disponibili istruzioni sulle pagine dei rispettivi progetti). In alternativa, puoi compilare solo gdisk e/o cgdisk, senza sgdisk; gdisk non richiede popt.
Quando tutti gli strumenti di sviluppo e le librerie necessari sono installati, puoi decomprimere il pacchetto e digitare "make" al prompt dei comandi nella directory risultante. (Potresti aver bisogno di digitare "make -f Makefile.mac" su Mac OS X, "make -f Makefile.freebsd" su FreeBSD, "make -f Makefile.solaris" su Solaris, o "make -f Makefile.mingw" per compilare usando MinGW per Windows.) Potresti anche aver bisogno di aggiungere directory di header (include) o directory di librerie impostando la variabile d'ambiente CXXFLAGS o modificando il Makefile. Il risultato dovrebbe essere file di programma chiamati gdisk, cgdisk, sgdisk e fixparts. Digitare "make gdisk", "make cgdisk", "make sgdisk" o "make fixparts" compilerà solo i programmi richiesti. Puoi usare questi programmi sul posto o copiare i file in una directory adatta, come /usr/local/sbin. Puoi copiare le pagine man (gdisk.8, cgdisk.8, sgdisk.8 e fixparts.8) in /usr/local/man/man8 per renderle disponibili.
QUESTO SOFTWARE È IN FASE BETA! SE DISTRUGGE IL TUO DISCO FISSO O MANGIA IL TUO GATTO, NON DARE LA COLPA A ME! Ad oggi, ho testato il software su diverse chiavi USB, dischi rigidi fisici e dischi virtuali negli ambienti QEMU e VirtualBox. Molti altri hanno ormai usato il software sui loro computer. Credo che tutti i bug di corruzione dei dati siano stati eliminati, ma so bene che le probabilità che mi sia sfuggito qualcosa sono alte. Questo è particolarmente vero per i dischi di grandi dimensioni (oltre 2 TiB); il mio unico test diretto con tali dischi è stato con dischi virtuali QEMU e VirtualBox. Ho comunque ricevuto segnalazioni di utenti che hanno avuto successo con array RAID di dimensioni superiori a 2 TiB.
La mia principale piattaforma di sviluppo è un sistema che esegue la versione a 64 bit di Gentoo Linux. Ho anche testato su molte altre distribuzioni Linux a 32 e 64 bit, Mac OS X 10.5 e 10.6 basati su Intel, FreeBSD 7.1 a 64 bit e Windows 7.
Questo programma è concesso in licenza secondo i termini della GNU GPL (vedi il file COPYING).
Questo codice è per lo più mio; tuttavia, ho usato tre funzioni da altri due programmi con licenza GPL:
Il codice usato per generare i CRC è tratto dal programma efone di Krzysztof Dabrowski e ElysiuM deeZine. (Vedi i file sorgente crc32.h e crc32.cc.)
Una funzione per trovare la dimensione del disco è tratta da Linux fdisk di A. V. Le Blanc. Questo codice è stato successivamente pesantemente modificato.
Ulteriori contributori di codice includono:
Yves Blusseau ([email protected])
David Hubbard ([email protected])
Justin Maggard ([email protected])
Dwight Schauer ([email protected])
Florian Zumbiehl ([email protected])
Guillaume Delacour (ha contribuito con lo script gdisk_test.sh)