Die Größenänderung der Partition fdisk schlägt mit einem ungültigen Argument fehl

Die Größenänderung der Partition fdisk schlägt mit einem ungültigen Argument fehl

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/Cancelworauf 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/vda3damit 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 -fdann resize2fs, wenn ext4). Wenn Sie mit einer Roh-Disk-Image-Datei arbeiten (z. B. für QEMU), können Sie kpartx -av disk.imgLoop-Geräte für Ihre Partitionen abrufen, damit Sie diese Loop-Geräte e2fsckausfü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:

  1. xfür zusätzliche Funktionalität
  2. Mzum Eingeben eines schützenden/hybriden MBR
  3. ( permöglicht die Anzeige des schützenden MBR)
  4. rum zum Hauptmenü zurückzukehren (immer noch im geschützten MBR-Modus!)
  5. dum die falsch dimensionierte schützende MBR-Partition zu löschen
  6. n, um eine neue Partition zu erstellen und 4x, enterum die Standardeinstellungen zu akzeptieren (primär, Partitionsnummer 1 und volle Größe)
  7. tund eeden Typ in GPT ändern
  8. xfür zusätzliche Funktionalität
  9. Mum den schützenden/hybriden MBR-Modus zu verlassen
  10. rum zum Hauptmenü zurückzukehren (jetzt wieder im GPT-Modus)
  11. wschreiben

Damit konnte ich die GPT-PMBR-Größeninkongruenz beheben.

Um das Disklabel-Problem zu beheben, musste ich die Partitionstabelle mit sichern Ound last-lba im exportierten Skript auf die in angegebene Datenträgergröße fdiskminus 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.

verwandte Informationen