
Ich habe vor Kurzem über das Control Panel meines Hosters die Größe eines VPS von einer 50 GB SSD auf eine 300 GB SSD geändert. Jetzt versuche ich, die Größe meiner Hauptpartition mit fdisk zu ändern, um den gesamten neuen Speicherplatz nutzen zu können. Allerdings gibt fdisk beim Start eine Warnung aus:
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
Es scheint offensichtlich, dass es sich um das Sechsfache der vorherigen Größe handelt, da ich von 50 GB auf 300 GB gestiegen bin. Also beschließe ich, dem Hinweis zu folgen und die Tabelle zu schreiben ...
Command (m for help): w
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
fdisk: failed to write disklabel: Invalid argument
.. was nicht funktioniert. Ich kann trotz vieler Suchanfragen nirgendwo die Ursache für diesen Fehler finden. Ich verwende kein LVM und meine Partitionstabelle sieht folgendermaßen aus:
Disk /dev/vda: 300 GiB, 322122547200 bytes, 629145600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 30D92031-0C13-42FF-AC16-D34F36DD3907
Device Start End Sectors Size Type
/dev/vda1 2048 32767 30720 15M BIOS boot
/dev/vda2 32768 16809983 16777216 8G Linux swap
/dev/vda3 16809984 104857566 88047583 42G Linux filesystem
Beachten Sie, dass auf der Festplatte 300 GiB angezeigt werden, die Größenänderung wird also erkannt.
Antwort1
Ich konnte das Problem ziemlich einfach lösen. Ich installierte parted und als ich es ausführte, wurde mir mitgeteilt, dass die Partitionstabelle nicht die gesamte Festplatte abdeckte (natürlich). Ich wurde also gefragt, Fix/Cancel
worauf ich mit antwortete Fix
. Anscheinend hat das geholfen, da ich die Partition mithilfe von auf die volle Größe ändern konnte sudo fdisk /dev/vda
, aber danach musste ich ausführen, sudo resize2fs /dev/vda3
damit die Änderungen angewendet wurden.
Antwort2
Das hat bei mir funktioniert, als ich versucht habe, eine GPT-Partition zu vergrößern. Wie immer ist beim Ändern einer Partitionstabelle eine Sicherungskopie unerlässlich, falls dies nicht wie geplant verläuft.
Erstens sind nicht alle Fdisks gleich. Unter Ubuntu 18.04 verwende ich diese Version von Fdisk:
$ fdisk -v
fdisk from util-linux 2.31.1
Starten Sie fdisk. Drucken Sie Ihre Partitionstabelle mit „p“ und überprüfen Sie, ob die vorhandene Partitionstabelle GPT ist:
Disklabel type: gpt
Kopieren Sie die Partitionsinformationen und fügen Sie sie in ein anderes Fenster ein, damit Sie die Partitionen mit genau denselben Startsektoren neu erstellen können.
Ersetzen Sie die alte GPT-Partitionstabelle durch eine neue GPT-Partitionstabelle, indem Sie „g“ drücken.
Drücken Sie erneut „p“, um die neuen Tabelleninformationen auszudrucken und zu überprüfen, ob sie jetzt in der größeren Größe angezeigt werden.
Drücken Sie „n“, um Ihre Partitionen neu zu erstellen. Alle Partitionen müssen mit genau denselben Start- und Endsektoren neu erstellt werden, mit Ausnahme Ihrer letzten Partition, die denselben Startsektor haben muss, aber einen größeren Endsektor haben kann.
Wenn Ihre Partitionen Dateisysteme enthalten, sollten Sie etwa Folgendes sehen:
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: N
Antworten Sie mit „N“, da Sie Ihre Dateisystemsignaturen behalten möchten.
Geben Sie an der fdisk-Eingabeaufforderung noch einmal „p“ ein, um in der Tabelle nachzuschauen und zu bestätigen, dass alles so aussieht, wie es sollte.
Geben Sie „w“ ein, um die Änderungen zu schreiben (festzuschreiben).
Beenden Sie von dort aus fdisk und folgen Sie einem Standardverfahren, um die Größe Ihres Dateisystems zu ändern (z. B. e2fsck -f
dann resize2fs
, wenn ext4). Wenn Sie mit einer Roh-Disk-Image-Datei arbeiten (z. B. für QEMU), können Sie kpartx -av disk.img
Loop-Geräte für Ihre Partitionen abrufen, damit Sie diese Loop-Geräte e2fsck
ausführen können.resize2fs
Antwort3
Das Problem ist, dass der schützende MBR (PMBR) zu klein ist. Sie können den schützenden MBR folgendermaßen ändern:
x
für zusätzliche FunktionalitätM
zum Eingeben eines schützenden/hybriden MBR- (
p
ermöglicht die Anzeige des schützenden MBR) r
um zum Hauptmenü zurückzukehren (immer noch im geschützten MBR-Modus!)d
um die falsch dimensionierte schützende MBR-Partition zu löschenn
, um eine neue Partition zu erstellen und 4x, enterum die Standardeinstellungen zu akzeptieren (primär, Partitionsnummer 1 und volle Größe)t
undee
den Typ in GPT ändernx
für zusätzliche FunktionalitätM
um den schützenden/hybriden MBR-Modus zu verlassenr
um zum Hauptmenü zurückzukehren (jetzt wieder im GPT-Modus)w
schreiben
Damit konnte ich die GPT-PMBR-Größeninkongruenz beheben.
Um das Disklabel-Problem zu beheben, musste ich die Partitionstabelle mit sichern O
und last-lba im exportierten Skript auf die in angegebene Datenträgergröße fdisk
minus 34 (für sekundäres GPT) ändern. Anschließend habe ich das Skript mit erneut importiert I
.
Antwort4
Ich habe das Problem mit gdisk behoben. Folgendes habe ich getan:
sudo fdisk --list
GPT PMBR size mismatch (41943039 != 62914559) will be corrected by w(rite).
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 62D6A220-B955-44BE-9730-CC89FE5CA928
# Naive fix attempt:
sudo fdisk /dev/sda
w
# ^^ fails with:
# GPT PMBR size mismatch (62914559 != 83886079) will be corrected by w(rite).
# fdisk: failed to write disklabel: Invalid argument
# try (because it is a GPT disk?)
viradmin@instance-2:~$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help): w
Warning! Secondary header is placed too early on the disk! Do you want to
correct this problem? (Y/N): y
Have moved second header and partition table to correct location.
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/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
# then
sudo reboot
dann habe ich auch folgendes gemacht, da dies auf einer Ubuntu-Maschine in der Google Cloud war (nach der Anleitunghttps://slacker.ro/2019/07/17/wie-erhöht-man-die-Festplattengröße-einer-virtuellen-Maschine-in-der-Google-Cloud/):
sudo apt install -y cloud-guest-utils
sudo growpart /dev/sda 1
sudo resize2fs /dev/sda1
stage@instance-2:/$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 30308240 16684136 13607720 56% /
# fixed:
sudo fdisk --list
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 62D6A220-B955-44BE-9730-CC89FE5CA928
Device Start End Sectors Size Type
/dev/sda1 227328 83886046 83658719 39.9G Linux filesystem
/dev/sda14 2048 10239 8192 4M BIOS boot
/dev/sda15 10240 227327 217088 106M EFI System
Danach wurden die Festplatte und die Partition ordnungsgemäß auf die neue Größe vergrößert:
Ich hoffe das hilft.