Website-Suche

So manipulieren Sie gpt-Partitionstabellen mit gdisk und sgdisk unter Linux


GPT ist die Abkürzung für GUID Partition Table: Es ist der neue Standard für Speichergeräte: Es ist Teil der UEFI-Firmware-Spezifikationen und der Nachfolger von MBR, von dem es mehrere Einschränkungen überwindet. MBR zum Beispiel erlaubt maximal 4 primäre Partitionen (GPT unterstützt bis zu 128 davon) und funktioniert nur mit Laufwerken mit einer Größe von bis zu 2 TB. Unter Linux gibt es mehrere Tools, mit denen wir GPT-Partitionstabellen erstellen und bearbeiten können. In diesem Tutorial konzentrieren wir uns auf die Verwendung der Dienstprogramme gdisk und sgdisk.

In diesem Tutorial lernen Sie:

  • So listen Sie die Partitionstabelle eines Geräts mit gdisk auf
  • So erstellen Sie eine GPT-Partitionstabelle
  • So erstellen Sie eine neue Partition
  • So entfernen Sie eine Partition
  • So ändern Sie die Größe einer Partition
  • Wie man nicht-interaktiv mit sgdisk arbeitet

Verwendete Softwareanforderungen und Konventionen

Gdisk gegen sgdisk

In diesem Tutorial werden wir zwei verschiedene Tools verwenden: gdisk und sgdisk. Sie ermöglichen es uns, die gleichen Vorgänge durchzuführen, mit einem großen Unterschied: Ersteres arbeitet interaktiv, bietet Bestätigungsaufforderungen und eine fragenbasierte Schnittstelle. Änderungen, die wir damit vornehmen, werden nur dann auf die Festplatte geschrieben, wenn wir den entsprechenden Befehl verwenden, um Fehler zu minimieren.

Letzteres hingegen funktioniert auf nicht-interaktive Weise: Es ist für die Verwendung in Shell-Skripten gedacht oder allgemeiner direkt von der Befehlszeile aus. Sgdisk-Befehle werden sofort angewendet, daher sollte sie sehr vorsichtig verwendet werden. Im ersten Teil dieses Tutorials konzentrieren wir uns darauf, wie man die grundlegenden Operationen mit gdisk ausführt, im zweiten sehen wir, wie man die gleichen Operationen mit sgdisk durchführt.

Auflisten der Partitionstabelle eines Geräts

Um mit der Verwendung von gdisk zu beginnen, müssen wir lediglich das Programm aufrufen und den Pfad des Geräts übergeben, das wir als Argument manipulieren möchten. Um die Partitionstabelle eines Geräts aufzulisten, rufen wir das Programm mit der Option -l auf:

sudo gdisk -l /dev/sdc

Folgendes gibt der obige Befehl auf einem Gerät zurück, das vollständig nicht initialisiert ist:

GPT fdisk (gdisk) version 1.0.8

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.
Disk /dev/sdc: 15122432 sectors, 7.2 GiB
Model: SD/MMC/MS PRO
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 32A31D98-1500-4FE5-836A-69F289D048A7
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 15122398
Partitions will be aligned on 2048-sector boundaries
Total free space is 15122365 sectors (7.2 GiB)

Erstellen einer neuen GPT-Partitionstabelle

Das Gerät, mit dem wir arbeiten, ist, wie wir gesehen haben, völlig leer; Sie enthält keine Partitionstabelle. Um eine neue GPT-Partitionstabelle darauf zu erstellen, übergeben wir sie als Argument beim Aufruf von gdisk, ohne Optionen bereitzustellen:

sudo gdisk /dev/sdc

Sobald wir den obigen Befehl starten, werden wir aufgefordert, einen Befehlsbefehl einzugeben:

Command (? for help):

Um eine neue GPT-Partitionstabelle zu erstellen, müssen wir den Befehl o verwenden (wir geben o ein und drücken die Eingabetaste). Wir werden gewarnt, dass die Aktion alle vorhandenen Partitionen auf der Festplatte zerstört, und wir werden aufgefordert, unsere Auswahl zu bestätigen:

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

Wie wir bereits sagten, werden bei der Verwendung von gdisk die Änderungen, die wir an der Festplatte vornehmen, nicht sofort geschrieben: Dies ist eine Sicherheitsmaßnahme. Um sie wirksam zu machen, müssen wir den Befehl w verwenden:

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.

Wir werden aufgefordert, eine letzte Bestätigung abzugeben. Nachdem wir sie bereitgestellt haben, werden die Änderungen wirksam, und wir werden (hoffentlich) über den Erfolg des Vorgangs benachrichtigt.

Erstellen einer neuen Partition

Wir haben unser Gerät initialisiert, jetzt können wir mit dem Erstellen von Partitionen beginnen. Mal sehen, wie es geht. Um eine neue Partition zu erstellen, müssen wir den Befehl n verwenden. Wir werden aufgefordert, eine Reihe von Fragen zu beantworten; Als Antwort für jeden von ihnen können wir einen Wert angeben oder einfach die Eingabetaste drücken, um den Standardwert zu akzeptieren, angezeigt
zwischen Klammern.

Das erste, was wir entscheiden sollten, ist die Zahl, die für die Partition verwendet werden soll, im Bereich von 1 bis 128. Hier möchten wir in der Regel den Standardwert verwenden, der progressiv ist.

Als zweite Sache sollten wir entscheiden, in welchem Sektor der Festplatte die Partition beginnen soll. Für die erste Partition ist der Standardstartsektor 2048. Der Standardwert ist das, was wir in den allermeisten Fällen für diesen Parameter verwenden möchten.

Das nächste, was wir entscheiden sollten, ist, an welchem Sektor die Partition enden soll: Dies bestimmt, wie Sie sich vorstellen können, die Größe der Partition. Anstatt einen Sektor anzugeben, können wir die Partitionsgröße direkt angeben, mit einer Ganzzahl, gefolgt von einem der verfügbaren Suffixe: K,M,G,T,P. Um beispielsweise eine Partition mit einer Größe von 500 MiB zu erstellen, geben wir +500M als Wert ein.

Als letztes werden wir aufgefordert, zu entscheiden, welcher HEX-Code für die Partition verwendet werden soll. Hier ist der Standardwert 8300 (Linux-Dateisystem). Um die Liste aller verfügbaren Codes zu erhalten, müssen wir nur den Befehl L eingeben und dann erneut die <Eingabetaste> drücken:

0700 Microsoft basic data                0701 Microsoft Storage Replica
0702 ArcaOS Type 1                       0c01 Microsoft reserved
2700 Windows RE                          3000 ONIE boot
3001 ONIE config                         3900 Plan 9
4100 PowerPC PReP boot                   4200 Windows LDM data
4201 Windows LDM metadata                4202 Windows Storage Spaces
7501 IBM GPFS                            7f00 ChromeOS kernel
7f01 ChromeOS root                       7f02 ChromeOS reserved
8200 Linux swap                          8300 Linux filesystem
8301 Linux reserved                      8302 Linux /home
8303 Linux x86 root (/)                  8304 Linux x86-64 root (/)
8305 Linux ARM64 root (/)                8306 Linux /srv
8307 Linux ARM32 root (/)                8308 Linux dm-crypt
8309 Linux LUKS                          830a Linux IA-64 root (/)
830b Linux x86 root verity               830c Linux x86-64 root verity
830d Linux ARM32 root verity             830e Linux ARM64 root verity
830f Linux IA-64 root verity             8310 Linux /var
8311 Linux /var/tmp                      8312 Linux user's home
8313 Linux x86 /usr                      8314 Linux x86-64 /usr
8315 Linux ARM32 /usr                    8316 Linux ARM64 /usr
8317 Linux IA-64 /usr                    8318 Linux x86 /usr verity
Press the <Enter> key to see more codes, q to quit:

Die Codes werden nicht alle auf einmal angezeigt. Um durch die Liste zu scrollen, sollten wir die <Eingabetaste> gedrückt halten. In unserem Beispiel haben wir gerade den Standard-HEX-Code für die Partition bestätigt:

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-15122398, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-15122398, default = 15122398) or {+-}size{KMGTP}:+500M
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Zu diesem Zeitpunkt existieren die Änderungen nur im Arbeitsspeicher. Wir geben w ein, um sie auf die Festplatte zu schreiben.

Entfernen einer Partition

Um eine vorhandene Partition mit gdisk zu entfernen, müssen wir den Befehl 'd' verwenden. Sobald wir es eingeben, werden wir aufgefordert, die Nummer der Partition anzugeben, die wir löschen möchten. Für dieses Beispiel entfernen wir die zweite Partition auf unserem Gerät:

Command (? for help): d
Partition number (1-2): 2

Um die Änderungen auf die Festplatte zu schreiben, geben wir, wie wir bereits wissen, den Befehl w ein.

Ändern der Größe einer Partition

Das Ändern der Größe einer Partition ist immer ein gefährlicher Vorgang, der vorsichtig und möglicherweise nach dem Erstellen einer Sicherung durchgeführt werden sollte. Das Ausführen einer solchen Operation mit gdisk ist etwas kontraintuitiv, da der Prozess das Löschen der aktuellen Partition (nur im Speicher) und ihre Neuerstellung mit demselben Startsektor und dem neuen Größen-/Endsektor beinhaltet.

Vergrößern einer Partition/eines Dateisystems

Angenommen, wir möchten die zweite Partition, die wir in diesem Tutorial erstellt haben, so erweitern, dass sie den gesamten verfügbaren Speicherplatz auf der Festplatte verwendet. So gehen wir vor. Zuerst fragen wir mit dem Befehl i Informationen über die Partition an, die wir bearbeiten wollen:

Command (? for help): i
Partition number (1-2): 2
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: D6FF2779-6F14-4E3E-876C-83E38F3A3FD7
First sector: 1026048 (at 501.0 MiB)
Last sector: 3123199 (at 1.5 GiB)
Partition size: 2097152 sectors (1024.0 MiB)
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'

Da wir die Partition im Rahmen der Größenänderung löschen müssen, möchten wir die aktuellen Informationen zur Hand haben. Eine Sache, die wir vielleicht tun möchten, ist, die eindeutige GUID der aktuellen Partition auf die neu erstellte GUID anzuwenden (standardmäßig wird eine zufällige GUID generiert). Wie wir bereits wissen, müssen wir zum Löschen der Partition den Befehl d verwenden:

Command (? for help): d
Partition number (1-2): 2

An dieser Stelle erstellen wir die Partition mit dem Befehl n neu, wobei wir die gleiche Partitionsnummer und den gleichen Startpunkt (in diesem Fall den Standardstartpunkt) verwenden und die neue Größe angeben. Da wir in diesem Fall den gesamten verfügbaren Speicherplatz nutzen möchten, verwenden wir auch den von der Anwendung vorgeschlagenen Standardwert:

Command (? for help): n
Partition number (2-128, default 2): 2
First sector (34-15122398, default = 1026048) or {+-}size{KMGTP}:
Last sector (1026048-15122398, default = 15122398) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Um die eindeutige GUID der neuen Partition zu ändern und die vorherige zu verwenden, sollten wir das Menü "Erweiterte Operationen" von gdisk mit dem Befehl x aufrufen (beachten Sie, wie sich die Eingabeaufforderung ändert)

Command (? for help): x

Expert command (? for help):

Der Expertenbefehl, den wir verwenden möchten, ist c. Sobald wir es eingeben, werden wir aufgefordert, die Partitionsnummer und die neue GUID dafür anzugeben. In diesem Fall geben wir diejenige ein, die für die "alte" Partition verwendet wurde:

Expert command (? for help): c
Partition number (1-2): 2
Enter the partition's new unique GUID ('R' to randomize): D6FF2779-6F14-4E3E-876C-83E38F3A3FD7
New GUID is D6FF2779-6F14-4E3E-876C-83E38F3A3FD7

An dieser Stelle können wir die Änderungen mit dem Befehl w auf der Festplatte speichern (wenn wir aus irgendeinem Grund das Menü "Experte" verlassen und zum Hauptmenü zurückkehren möchten, können wir stattdessen m verwenden):

Expert command (? for help): w

Wir haben jetzt eine viel größere Partition als zuvor, aber wenn es ein Dateisystem darauf gibt, sollte es immer noch vergrößert werden, um den gesamten verfügbaren Speicherplatz abzudecken. Der Befehl, der zum Ausführen des Vorgangs verwendet wird, variiert je nach Dateisystemtyp.

Angenommen, wir haben ein ext4-Dateisystem auf der Partition, würden wir zuerst eine Prüfung mit dem Befehl e2fsck mit der Option -f durchführen (um die Prüfung auch dann zu erzwingen, wenn das Dateisystem sauber aussieht), und dann mit der eigentlichen Größenänderung mit resize2fs fortfahren, die, wenn sie ohne Optionen aufgerufen wird, das Dateisystem auf den gesamten verfügbaren Partitionsplatz erweitert:

sudo e2fsck -f /dev/sdc2 && sudo resize2fs /dev/sdc2

Verkleinern einer Partition

Um eine Partition zu verkleinern, sollten wir die obigen Schritte in umgekehrter Reihenfolge ausführen: Zuerst verkleinern wir das Dateisystem (falls vorhanden) auf eine Größe, die etwas kleiner ist als die neue Größe, die wir für die Partition verwenden werden, oder auf die minimal mögliche Größe (das ist es, was wir im Beispiel unten mit der Option -M tun), dann verkleinern wir die Partition
selbst, Und schließlich vergrößern wir das Dateisystem wieder, so dass es den gesamten verfügbaren Platz nutzt.

Angenommen, wir möchten die zweite Partition auf der Festplatte auf 2 GiB verkleinern, würden wir Folgendes ausführen:

sudo e2fsck -f /dev/sdc2 && sudo resize2fs -M /dev/sdc2

An diesem Punkt können wir gdisk starten und die gleichen Schritte wie im vorherigen Beispiel ausführen, diesmal mit einem Endsektor oder einer Partitionsgröße, die kleiner als die aktuelle ist. Sobald die Änderungen gespeichert und auf die Festplatte geschrieben sind, vergrößern wir das Dateisystem so, dass es den gesamten verfügbaren Speicherplatz abdeckt:

sudo e2fsck -f /dev/sdc2 && sudo resize2fs /dev/sdc2

Nicht-interaktives Ausführen von Operationen mit sgdisk

Wie wir bereits sagten, ist gdisk zwar ein interaktives Programm, aber sgdisk ist ein Befehlszeilenprogramm, das verwendet werden kann, um Operationen nicht interaktiv durchzuführen. Sehen wir uns an, wie wir die gleichen Operationen, die wir in den vorherigen Beispielen durchgeführt haben, direkt mit sgdisk ausführen können.

Erstellen einer GPT-Partitionstabelle

Um eine GPT-Partitionstabelle mit sgdisk zu erstellen, müssen wir lediglich den folgenden Befehl ausführen:

sudo sgdisk -o /dev/sdc

Wenn sgdisk mit der Option -o (oder --clear) aufgerufen wird, löscht es alle vorhandenen Partitionstabellen auf dem angegebenen Gerät und erstellt eine neue GPT-Partitionstabelle. Da das Programm für die Verwendung aus Skripten gedacht ist, werden keine Warnungen ausgegeben und keine Bestätigungen angefordert, daher sollte es vorsichtig verwendet werden.

Erstellen einer Partition

Um eine neue Partition zu erstellen, rufen wir sgdisk mit der Option -n (kurz für --new) auf und geben die Partitionsnummer, den Partitionsstart und das Partitionsende mit der folgenden Syntax an:

partition_number:partition_start:partition_end

Um eine Partition mit der Nummer 2 zu erstellen, die den ersten verfügbaren Startsektor mit einer Größe von 1GiB (1024 MiB) verwendet, würden wir daher schreiben:

2::+1G

Wenn wir möchten, dass die Partition den gesamten verfügbaren Speicherplatz auf der Festplatte abdeckt, würden wir stattdessen 0 als Partitionsendewert verwenden:

2::0

Wenn wir einen bestimmten HEX-Code für die Partition verwenden möchten, sollten wir die Option -t (kurz für --typecode) mit der folgenden Syntax verwenden:

partition_number:hexcode

Der vollständige Befehl, um die Partition zu erstellen und ihr den 8300-Hex-Code explizit zuzuweisen, lautet daher:

sudo sgdisk --new 2::+1G --typecode 2:8300 /dev/sdc

Entfernen einer Partition

Um eine Partition direkt von der Befehlszeile aus von der Festplatte zu entfernen, ohne jegliche Interaktion, müssen wir sgdisk mit der Option -d (--delete) verwenden und die Partitionsnummer als Optionsargument angeben. Um die Partitionsnummer 2 zu löschen, würden wir schreiben:

sudo sgdisk --delete 2 /dev/sdc

Ändern der Größe einer Partition

Der Prozess der Größenänderung einer Partition mit sgdisk ist derselbe, den wir interaktiv mit gdisk verwendet haben, aber er wird in einer Zeile durchgeführt, zum Beispiel, um die zweite Partition der Festplatte so zu vergrößern, dass sie den gesamten verfügbaren Speicherplatz abdeckt, würden wir ausführen:

sudo sgdisk \
  -d 2 \
  -n 2:0:0 \
  -u 2:D6FF2779-6F14-4E3E-876C-83E38F3A3FD7 \
  /dev/sdc

Im obigen Beispiel wird die Option -d, wie wir wissen, zum Löschen der Partition verwendet, -n wird verwendet, um eine neue Partition mit der gleichen Nummer und dem Standardwert für Start- und Endsektoren zu erstellen (0, bedeutet "den Standard verwenden").

Schließlich ist die Option -u die Abkürzung für --partition-guid: Wir haben sie verwendet, um der neuen Partition die gleiche GUID wie der gelöschten zuzuweisen.

Um Informationen über eine bestimmte Partition anzufordern, können wir die Option -i verwenden und die Partitionsnummer angeben. Zum Beispiel:

sudo sgdisk -i 2 /dev/sdc

Schlüsse

In diesem Tutorial haben wir gelernt, die Dienstprogramme gdisk und sgdisk zu verwenden, um GPT-Partitionstabellen zu manipulieren. Wir haben gesehen, dass ersteres ein Programm ist, das interaktiv verwendet werden soll und Bestätigungsaufforderungen und andere Sicherheitsmaßnahmen bietet, während letzteres dazu gedacht ist, direkt von der Befehlszeile oder innerhalb von Shell-Skripten verwendet zu werden, und Änderungen, die wir daran vorgenommen haben, sind sofort wirksam. Wir haben gesehen, wie man eine neue Partitionstabelle erstellt und wie man mit beiden Tools Partitionen erstellt, entfernt und die Größe ändert. Die Manipulation von Partitionen ist eine gefährliche Aktivität und sollte mit Vorsicht durchgeführt werden. Weitere Informationen zu den genannten Tools finden Sie in den jeweiligen Handbüchern.

Verwandte Artikel: