Изменение размера раздела fdisk завершается ошибкой из-за недопустимого аргумента

Изменение размера раздела fdisk завершается ошибкой из-за недопустимого аргумента

Недавно я изменил размер VPS с SSD на 50 ГБ на SSD на 300 ГБ через панель управления моего хостера. Теперь я пытаюсь изменить размер моего основного раздела с помощью fdisk, чтобы иметь возможность использовать все новое пространство. Однако fdisk выдает мне предупреждение при запуске:

GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).

Кажется очевидным, что это в шесть раз больше предыдущего размера, так как я перешел с 50 ГБ на 300 ГБ. Поэтому я решил последовать подсказке и написать таблицу...

Command (m for help): w
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
fdisk: failed to write disklabel: Invalid argument

.. что не работает. Я не могу найти причину этой ошибки, несмотря на множество поисковых запросов. Я не использую LVM, и моя таблица разделов выглядит так:

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

Обратите внимание, что диск отображается как 300 ГБ, то есть он распознает изменение размера.

решение1

Мне удалось решить эту проблему довольно просто. Я установил parted, и когда я запустил его, он сообщил мне, что таблица разделов не покрывает весь диск (ну да), поэтому он спросил меня, Fix/Cancelна что я ответил Fix. Видимо, это сработало, так как я смог изменить раздел до полного размера с помощью sudo fdisk /dev/vda, но после этого мне пришлось запустить его, sudo resize2fs /dev/vda3чтобы изменения применились.

решение2

Это то, что сработало для меня, когда я пытался увеличить раздел GPT. Как всегда, при изменении таблицы разделов резервная копия жизненно важна на случай, если все пойдет не так, как планировалось.

Во-первых, не все fdisks одинаковы. В Ubuntu 18.04 я использую вот эту версию fdisk:

$ fdisk -v
fdisk from util-linux 2.31.1

Запустите fdisk. Распечатайте таблицу разделов с помощью 'p' и убедитесь, что существующая таблица разделов — GPT:

Disklabel type: gpt

Скопируйте и вставьте информацию о разделах в другое окно, чтобы можно было заново создать разделы с точно такими же начальными секторами.

Замените старую таблицу разделов GPT новой таблицей разделов GPT, нажав «g».

Нажмите «p» еще раз, чтобы распечатать новую информацию о таблице и убедиться, что теперь она отображается в большем размере.

Нажмите 'n', чтобы пересоздать разделы. Все разделы должны быть пересозданы с точно такими же начальными и последними секторами, за исключением последнего раздела, который должен иметь тот же начальный сектор, но может иметь больший конечный сектор.

Если на ваших разделах есть файловые системы, вы должны увидеть что-то вроде этого:

Partition #1 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: N

Ответьте «N», поскольку вы хотите сохранить подписи своей файловой системы.

Вернувшись к командной строке fdisk, еще раз введите «p», чтобы взглянуть на таблицу и убедиться, что все выглядит так, как должно быть.

Нажмите «w», чтобы записать (принять) изменения.

Оттуда выйдите из fdisk и следуйте стандартной процедуре изменения размера файловой системы (например, e2fsck -fтогда resize2fs, если ext4). Если вы работаете с файлом образа диска raw (например, для QEMU), то вы можете использовать kpartx -av disk.imgдля получения устройств loop для ваших разделов, чтобы вы могли запустить e2fsckи resize2fsна этих устройствах loop.

решение3

Проблема в том, что защитный MBR (PMBR) слишком мал. Вы можете изменить защитный MBR с помощью:

  1. xдля дополнительной функциональности
  2. Mдля входа в защитный/гибридный МБР
  3. ( pпозволяет показать защитный МБР)
  4. rдля возврата в главное меню (все еще в защитном режиме MBR!)
  5. dудалить защитный раздел MBR неправильного размера
  6. nдля создания нового раздела и 4x enterдля принятия настроек по умолчанию (первичный, раздел номер 1 и полный размер)
  7. tи eeизменить тип на GPT
  8. xдля дополнительной функциональности
  9. Mчтобы выйти из защитного/гибридного режима MBR
  10. rдля возврата в главное меню (теперь снова в режиме GPT)
  11. wнаписать

Благодаря этому я смог исправить несоответствие размеров GPT PMBR.

Чтобы исправить проблему с disklabel, мне пришлось выгрузить таблицу разделов с помощью Oи изменить last-lba в экспортированном скрипте на disksize, как указано в fdisk, минус 34 (для вторичного GPT). Затем я повторно импортировал скрипт с помощью I.

решение4

Я исправил проблему с gdisk. Вот что я сделал:

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

затем я также сделал следующее, поскольку это было на машине Ubuntu в Google Cloud (следуя руководствуhttps://slacker.ro/2019/07/17/how-to-increase-google-cloud-virtual-machine-disk-size/):

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

После этого диск и раздел были правильно увеличены до нового размера:

Надеюсь, это поможет.

Связанный контент