
Недавно я изменил размер 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 с помощью:
x
для дополнительной функциональностиM
для входа в защитный/гибридный МБР- (
p
позволяет показать защитный МБР) r
для возврата в главное меню (все еще в защитном режиме MBR!)d
удалить защитный раздел MBR неправильного размераn
для создания нового раздела и 4x enterдля принятия настроек по умолчанию (первичный, раздел номер 1 и полный размер)t
иee
изменить тип на GPTx
для дополнительной функциональностиM
чтобы выйти из защитного/гибридного режима MBRr
для возврата в главное меню (теперь снова в режиме GPT)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
После этого диск и раздел были правильно увеличены до нового размера:
Надеюсь, это поможет.