
GPT- und MBR-Festplattenpartitionierungssuite mit Werkzeugen zur Manipulation, Reparatur und Konvertierung von Partitionstabellen. Enthält eine spezifische Behebung für die Sicherheitslücke CVE-2021-0308.
GPT fdisk (auch bekannt als gdisk, cgdisk und sgdisk) und FixParts von Roderick W. Smith, [email protected]
Dieses Paket enthält den Quellcode für vier verwandte Festplattenpartitionierungsprogramme:
gdisk – Dieses Programm ist nach dem Vorbild von Linux fdisk gestaltet, arbeitet jedoch mit GUID-Partitionstabellen (GPT) anstelle der Master Boot Record (MBR)-Festplatten, die fdisk bearbeitet. Als solches ist gdisk ein interaktives textbasiertes Werkzeug zum Manipulieren von Partitionen, greift aber nicht auf den Inhalt dieser Partitionen zu (normalerweise Dateisysteme, manchmal aber auch Swap-Speicher oder andere Daten).
cgdisk – Dieses Programm ist nach dem Vorbild von Linux cfdisk gestaltet, arbeitet jedoch mit GPT-Festplatten anstelle der MBR-Festplatten, die cfdisk bearbeitet. Als solches ist cgdisk ein curses-basiertes Textmodus-Werkzeug zum Manipulieren von Partitionen, das eine Benutzeroberfläche verwendet, die auf Pfeiltasten und einer dynamischen Anzeige beruht, anstatt auf Befehlstasten und einer bildlaufenden Anzeige wie gdisk.
sgdisk – Dieses Programm ist vom Konzept her ähnlich wie das Linux-sfdisk- und das FreeBSD-gpt-Programm, unterscheidet sich jedoch in den operativen Details. Es ermöglicht die Manipulation von GPT-Festplatten über Kommandozeilenoptionen und eignet sich daher für den Einsatz in Skripten oder für Experten, um spezifische Aufgaben auszuführen, die in gdisk mehrere Befehle erfordern würden.
fixparts – Dieses Programm arbeitet im Gegensatz zu den vorgenannten drei auf MBR-Festplatten. Es soll bestimmte Probleme beheben, die durch verschiedene Dienstprogramme verursacht werden können. Insbesondere kann es falsch dimensionierte erweiterte Partitionen und primäre Partitionen korrigieren, die sich in der Mitte von erweiterten Partitionen befinden. Es ermöglicht auch die Änderung des Status primär/logisch (innerhalb der im MBR-Schema zulässigen Grenzen) und einige andere kleinere Änderungen. Es unterstützt NICHT das Erstellen neuer Partitionen; dafür sollten Sie fdisk, parted oder ein anderes Werkzeug verwenden.
Weitere Details zu den Fähigkeiten dieser Werkzeuge folgen.
Alle vier Programme basieren auf demselben zugrunde liegenden Code; sie unterscheiden sich nur in ihren Steuerschnittstellen (definiert in gdisk.cc, cgdisk.cc, sgdisk.cc bzw. fixparts.cc) und darin, welchen unterstützenden Code sie verwenden.
Das Programm gdisk ist als (einigermaßen) fdisk-ähnliches Programm für GPT-partitionierte Festplatten gedacht, cgdisk ist ähnlich ein Pendant zu cfdisk, und sgdisk bietet die meisten Funktionen von gdisk in einem skriptfreundlicheren Programm. Obwohl libparted und Programme, die es verwenden (GNU Parted, gparted usw.), die Möglichkeit bieten, GPT-Festplatten zu verwalten, haben sie bestimmte Einschränkungen, die gdisk überwindet. Spezifische Vorteile von gdisk, cgdisk und sgdisk sind:
Die Möglichkeit, MBR-partitionierte Festplatten ohne Datenverlust vor Ort in das GPT-Format zu konvertieren
Die Möglichkeit, BSD-Festplattenlabels vor Ort zu konvertieren, um GPT-Partitionen zu erstellen, ohne Datenverlust
Die Möglichkeit, ohne Datenverlust vom GPT-Format in das MBR-Format zu konvertieren (nur gdisk und sgdisk)
Flexiblere Angabe von Dateisystemtyp-Code-GUIDs, die GNU Parted oft beschädigt
Klare Identifizierung der Anzahl nicht zugewiesener Sektoren auf einer Festplatte
Eine Benutzeroberfläche, die langjährigen Benutzern von Linux fdisk und cfdisk vertraut ist (nur gdisk und cgdisk)
Der MBR-Bootloader-Code bleibt unberührt
Die Möglichkeit, einen hybriden MBR zu erstellen, der GPT-unbewussten Betriebssystemen den Zugriff auf bis zu drei GPT-Partitionen auf der Festplatte ermöglicht (nur gdisk und sgdisk)
Natürlich hat GPT fdisk auch seine Grenzen. Am auffälligsten ist das Fehlen der Dateisystemkenntnis und der dateisystembezogenen Funktionen von GParted. Sie können beispielsweise weder ein Dateisystem einer Partition vergrößern/verkleinern noch eine Partition mit einem bereits vorhandenen Dateisystem mit gdisk erstellen. Es gibt keine GUI-Version von gdisk.
Das Paket GPT fdisk enthält drei Programmdateien: das interaktive textbasierte gdisk, das curses-basierte interaktive cgdisk und das kommandozeilengesteuerte sgdisk. Die ersten beiden sind für die manuelle Partitionierung von Festplatten oder zur Änderung von Partitionsdetails gedacht; sgdisk ist für den Einsatz in Skripten vorgesehen, um Aufgaben wie das Klonen von Festplatten oder die Vorbereitung mehrerer Festplatten für die Linux-Installation zu automatisieren.
Die Erstellung dieses Programms wurde durch Hilferufe motiviert, die ich in Online-Foren von Benutzern gesehen habe, deren Partitionstabellen durch verschiedene fehlerhafte Partitionierungswerkzeuge beschädigt wurden. Obwohl die meisten Betriebssysteme die betroffenen Festplatten problemlos behandeln können, neigen libparted-basierte Werkzeuge (GParted, parted, die meisten Linux-Installationsprogramme usw.) dazu, bei solchen Festplatten zu versagen. Typischerweise zeigt sich das Symptom als eine Festplatte, die scheinbar keine Partitionen enthält; manchmal präsentiert das libparted-Werkzeug jedoch andere Partitionen als die, die das Betriebssystem sieht.
Ich habe vier Ursachen für diese Symptome beobachtet, von denen FixParts drei korrigieren kann:
Alte GPT-Daten – Wenn eine Festplatte als GPT-Festplatte verwendet und dann als MBR-Festplatte wiederverwendet wird, können die GPT-Daten unvollständig gelöscht werden. Dies geschieht z. B., wenn die Festplatte mit fdisk oder dem Microsoft Windows-Installationsprogramm neu partitioniert wird. (Auf libparted basierende Werkzeuge entfernen die alten GPT-Daten korrekt bei der Umwandlung von GPT in das MBR-Format.) FixParts prüft beim Start auf dieses Problem und bietet an, es zu beheben. Wenn Sie sich für das Löschen der GPT-Daten entscheiden, erfolgt diese Löschung sofort, im Gegensatz zu anderen Änderungen, die das Programm vornimmt.
Falsch dimensionierte erweiterte Partitionen – Einige Werkzeuge erstellen eine erweiterte Partition, die zu groß ist, typischerweise endet sie nach dem letzten Sektor der Festplatte. FixParts korrigiert dieses Problem automatisch (wenn Sie die Option 'w' zum Speichern der Partitionstabelle verwenden).
Primäre Partitionen innerhalb einer erweiterten Partition – Einige Dienstprogramme erstellen oder verschieben primäre Partitionen in den Bereich, der von der erweiterten Partition abgedeckt wird. FixParts kann dieses Problem normalerweise beheben, indem es die primäre Partition in eine logische Partition umwandelt oder eine oder mehrere andere logische Partitionen in primäre umwandelt. Solche Korrekturen sind jedoch nicht immer möglich, zumindest nicht ohne Löschen oder Ändern der Größe anderer Partitionen.
Übriggebliebene RAID-Daten – Wenn eine Festplatte in einem RAID-Verbund verwendet und dann als Nicht-RAID-Festplatte wiederverwendet wird, können einige Dienstprogramme verwirrt werden und die Festplatte nicht erkennen. FixParts kann dieses Problem NICHT beheben. Sie müssen die alten RAID-Daten zerstören oder möglicherweise das dmraid-Paket vom System entfernen, um dieses Problem zu beheben.
Wenn FixParts ausgeführt wird, bietet es eine fdisk-ähnliche Oberfläche, mit der Sie Partitionstypen (primär, logisch oder weggelassen), Typecodes ändern, das bootfähige Flag setzen usw. können. Obwohl Sie eine Partition löschen können (indem Sie sie weglassen), können Sie mit dem Programm keine neuen Partitionen erstellen. Wenn Sie es gewohnt sind, Festplatten zu partitionieren, insbesondere mit Linux fdisk, erfordern zwei ungewöhnliche Eigenschaften von FixParts eine Erläuterung:
Keine erweiterten Partitionen – Intern liest FixParts die Partitionstabelle und verwirft Daten über alle erweiterten Partitionen, die es findet. Wenn Sie die Partitionstabelle speichern, generiert das Programm eine neue erweiterte Partition. Dieses Design bedeutet, dass das Programm automatisch viele Probleme im Zusammenhang mit der erweiterten Partition korrigiert. Es bedeutet auch, dass Sie in der FixParts-Benutzeroberfläche keine Hinweise auf erweiterte Partitionen sehen, obwohl es die Anforderungen im Auge behält und Sie daran hindert, illegale Layouts zu erstellen, wie z. B. eine primäre Partition zwischen zwei logischen Partitionen.
Partitionsnummerierung – In den meisten Linux-Werkzeugen sind die Partitionen 1-4 primär und die Partitionen 5 und höher logisch. Obwohl eine korrekte, in FixParts geladene Partitionstabelle zunächst dieser Konvention entspricht, können einige Arten von beschädigten Tabellen davon abweichen, und verschiedene von Ihnen vorgenommene Änderungen können ebenfalls Abweichungen verursachen. Wenn FixParts die Partitionstabelle schreibt, wird die Nummerierung geändert, um den Standard-MBR-Konventionen zu entsprechen. Sie sollten jedoch zur Bestimmung des Status einer Partition die explizite Bezeichnung als primär oder logisch verwenden und nicht die Partitionsnummern.
Um GPT fdisk zu kompilieren, müssen geeignete Entwicklungswerkzeuge installiert sein, insbesondere die GNU Compiler Collection (GCC) und ihr g++-Compiler für C++. Ich habe die Kompilierung auch mit Clang getestet, was zu funktionieren scheint; ich habe jedoch keine umfangreichen Tests der resultierenden Binärdateien durchgeführt, über die Überprüfung einiger Grundlagen hinaus. Unter Windows kann stattdessen Microsoft Visual C++ 2008 verwendet werden. Beachten Sie außerdem diese Anforderungen:
Unter Linux, FreeBSD, OS X und Solaris muss libuuid installiert sein. Dies ist der Standard für Linux und OS X, obwohl Sie möglicherweise ein Paket namens uuid-dev oder ähnliches installieren müssen, um die Header zu erhalten. Unter FreeBSD muss der Port e2fsprogs-libuuid installiert sein.
Die ICU-Bibliothek (http://site.icu-project.org), die Unterstützung für Unicode-Partitionsnamen bietet, ist auf allen Plattformen außer Windows optional, wo sie nicht unterstützt wird. Die Verwendung dieser Bibliothek war erforderlich, um in GPT-fdisk-Versionen vor 0.8.9 ordnungsgemäße UTF-16-Partitionsnamenunterstützung zu erhalten, aber ab dieser Version sollte sie nicht mehr erforderlich sein. Sie können sie dennoch verwenden, wenn Sie Probleme mit der neuen UTF-16-Unterstützung haben. Diese Bibliothek ist normalerweise unter Linux und OS X installiert, aber Sie müssen möglicherweise die Entwicklungs-Header installieren (libicu-dev oder etwas Ähnliches unter Linux; oder das libicu36-dev-Fink-Paket unter OS X). Um mit ICU-Unterstützung zu kompilieren, müssen Sie das Makefile ändern: Suchen Sie nach auskommentierten Zeilen, die sich auf USE_UTF16, -licuuc, -licudata oder -licucore beziehen. Kommentieren Sie sie aus und kommentieren Sie die Äquivalente aus, denen diese Zeilen fehlen.
Das cgdisk-Programm benötigt die ncurses-Bibliothek und ihre Entwicklungsdateien (Header). Die meisten Linux-Distributionen installieren ncurses standardmäßig, aber Sie müssen möglicherweise ein Paket namens libncurses5-dev, ncurses-devel oder ähnliches installieren, um die Header-Dateien zu erhalten. Diese Dateien waren auf meinem Mac-OS-X-Entwicklungssystem bereits installiert; sie könnten jedoch als Abhängigkeiten anderer von mir installierter Programme installiert worden sein. Wenn Sie Probleme bei der Installation von ncurses haben, können Sie gdisk und/oder sgdisk ohne cgdisk kompilieren, indem Sie nur die Ziele angeben, die Sie mit make kompilieren möchten.
Das sgdisk-Programm benötigt die popt-Bibliothek und ihre Entwicklungsdateien (Header). Die meisten Linux-Distributionen installieren popt standardmäßig, aber Sie müssen möglicherweise ein Paket namens popt-dev, popt-devel oder ähnliches installieren, um die Header-Dateien zu erhalten. Mac-OS-Benutzer finden eine Version von popt für Mac OS über Darwin Ports (http://popt.darwinports.com) oder Fink (http://www.finkproject.org); Sie müssen jedoch zuerst DarwinPorts oder Fink installieren (Anleitungen finden Sie auf den entsprechenden Projektseiten). Alternativ können Sie gdisk und/oder cgdisk allein ohne sgdisk kompilieren; gdisk benötigt kein popt.
Wenn alle erforderlichen Entwicklungswerkzeuge und Bibliotheken installiert sind, können Sie das Paket entpacken und im resultierenden Verzeichnis "make" in die Eingabeaufforderung eingeben. (Sie müssen möglicherweise "make -f Makefile.mac" unter Mac OS X, "make -f Makefile.freebsd" unter FreeBSD, "make -f Makefile.solaris" unter Solaris oder "make -f Makefile.mingw" eingeben, um mit MinGW für Windows zu kompilieren.) Möglicherweise müssen Sie auch Header- (Include-) Verzeichnisse oder Bibliotheksverzeichnisse hinzufügen, indem Sie die Umgebungsvariable CXXFLAGS setzen oder das Makefile bearbeiten. Das Ergebnis sollten Programmdateien namens gdisk, cgdisk, sgdisk und fixparts sein. Die Eingabe von "make gdisk", "make cgdisk", "make sgdisk" oder "make fixparts" kompiliert nur die angeforderten Programme. Sie können diese Programme an Ort und Stelle verwenden oder die Dateien in ein geeignetes Verzeichnis wie /usr/local/sbin kopieren. Sie können die Handbuchseiten (gdisk.8, cgdisk.8, sgdisk.8 und fixparts.8) nach /usr/local/man/man8 kopieren, um sie verfügbar zu machen.
DIESE SOFTWARE IST BETA-SOFTWARE! WENN SIE IHRE FESTPLATTE LÖSCHT ODER IHRE KATZE FRISST, GEBEN SIE NICHT MIR DIE SCHULD! Bisher habe ich die Software auf mehreren USB-Flash-Laufwerken, physischen Festplatten und virtuellen Festplatten in den Umgebungen QEMU und VirtualBox getestet. Viele andere haben die Software inzwischen ebenfalls auf ihren Computern verwendet. Ich glaube, alle Datenkorruptionsfehler sind beseitigt, aber mir ist durchaus bewusst, dass die Wahrscheinlichkeit hoch ist, dass ich etwas übersehen habe. Dies gilt insbesondere für große Festplatten (über 2 TiB); meine einzigen direkten Tests mit solchen Festplatten sind mit virtuellen QEMU- und VirtualBox-Festplatten. Ich habe jedoch Benutzerberichte über Erfolge mit RAID-Arrays mit einer Größe von über 2 TiB erhalten.
Meine Hauptentwicklungsplattform ist ein System mit der 64-Bit-Version von Gentoo Linux. Ich habe auch auf mehreren anderen 32- und 64-Bit-Linux-Distributionen, Intel-basiertem Mac OS X 10.5 und 10.6, 64-Bit-FreeBSD 7.1 und Windows 7 getestet.
Dieses Programm ist unter den Bedingungen der GNU GPL lizenziert (siehe Datei COPYING).
Dieser Code stammt größtenteils von mir; ich habe jedoch drei Funktionen aus zwei anderen GPL-lizenzierten Programmen verwendet:
Der Code zur Generierung von CRCs stammt aus dem Programm efone von Krzysztof Dabrowski und ElysiuM deeZine. (Siehe die Quellcodedateien crc32.h und crc32.cc.)
Eine Funktion zum Finden der Festplattengröße stammt aus Linux fdisk von A. V. Le Blanc. Dieser Code wurde anschließend stark modifiziert.
Weitere Code-Beitragende sind:
Yves Blusseau ([email protected])
David Hubbard ([email protected])
Justin Maggard ([email protected])
Dwight Schauer ([email protected])
Florian Zumbiehl ([email protected])
Guillaume Delacour (hat das Skript gdisk_test.sh beigetragen)