
Recentemente redimensionei um VPS de um SSD de 50 GB para um SSD de 300 GB através do painel de controle do meu hoster. Agora estou tentando redimensionar minha partição principal com fdisk para poder usar todo o novo espaço. No entanto, o fdisk me avisa ao iniciar:
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
Parece óbvio que é seis vezes maior que o tamanho anterior, já que passei de 50 GB para 300 GB. Então, decido seguir a dica e escrever a tabela...
Command (m for help): w
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
fdisk: failed to write disklabel: Invalid argument
.. o que não funciona. Não consigo encontrar o que causa esse erro em nenhum lugar, apesar de muitas consultas de pesquisa. Eu não uso LVM e minha tabela de partições se parece com:
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
Observe como o disco mostra 300GiB, para reconhecer a alteração de tamanho.
Responder1
Consegui resolver isso de forma bastante simples. Instalei o parted e quando executei ele me informou que a tabela de partições não cobria o disco inteiro (duh), então me perguntou Fix/Cancel
qual eu respondi com Fix
. Aparentemente, isso funcionou, pois consegui modificar a partição para o tamanho total usando sudo fdisk /dev/vda
, mas depois precisei executar sudo resize2fs /dev/vda3
para que as alterações fossem aplicadas.
Responder2
Foi isso que funcionou para mim ao tentar ampliar uma partição GPT. Como sempre, ao alterar uma tabela de partição, um backup é vital caso isso não corra conforme planejado.
Primeiro, nem todos os fdisks são criados iguais. No Ubuntu 18.04, esta é a versão do fdisk que estou usando:
$ fdisk -v
fdisk from util-linux 2.31.1
Inicie o fdisk. Imprima sua tabela de partição com 'p' e verifique se a tabela de partição existente é GPT:
Disklabel type: gpt
Copie e cole as informações da partição em outra janela para poder recriar as partições com exatamente os mesmos setores iniciais.
Substitua a tabela de partição GPT antiga por uma nova tabela de partição GPT pressionando 'g'.
Pressione 'p' novamente para imprimir as informações da nova tabela e verificar se agora ela mostra o tamanho maior.
Pressione 'n' para recriar suas partições. Todas as partições devem ser recriadas exatamente com os mesmos setores inicial e final, exceto sua última partição, que deve ter o mesmo setor inicial, mas pode ter um setor final maior.
Se suas partições tiverem sistemas de arquivos, você deverá ver algo assim:
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: N
Responda com 'N' porque deseja manter as assinaturas do sistema de arquivos.
De volta ao prompt do fdisk, digite 'p' mais uma vez para olhar a tabela e confirmar se tudo está como deveria.
Digite 'w' para escrever (confirmar) as alterações.
A partir daí, saia do fdisk e siga um procedimento padrão para redimensionar seu sistema de arquivos (por exemplo, e2fsck -f
se resize2fs
for ext4). Se você estiver trabalhando com um arquivo de imagem de disco bruto (ou seja, para QEMU), poderá usá-lo kpartx -av disk.img
para obter dispositivos de loop para suas partições, para que possa executar e2fsck
esses resize2fs
dispositivos de loop.
Responder3
O problema é que o MBR protetor (PMBR) é muito pequeno. Você pode alterar o MBR de proteção usando:
x
para funcionalidade extraM
para entrar no MBR protetor/híbrido- (
p
permite mostrar o MBR protetor) r
para retornar ao menu principal (ainda no modo MBR de proteção!)d
para excluir a partição MBR protetora de tamanho incorreton
para criar uma nova partição e 4x enterpara aceitar as configurações padrão (primária, partição número 1 e tamanho completo)t
eee
para alterar o tipo para GPTx
para funcionalidade extraM
para sair do modo MBR protetor/híbridor
para retornar ao menu principal (agora no modo GPT novamente)w
escrever
Com isso eu poderia corrigir a incompatibilidade de tamanho do GPT PMBR.
Para corrigir o problema do disklabel, tive que despejar a tabela de partição usando O
e alterar last-lba no script exportado para o tamanho do disco conforme relatado em fdisk
, menos 34 (para GPT secundário). Em seguida, reimportei o script usando I
.
Responder4
Resolvi o problema com o gdisk. Aqui está o que eu fiz:
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
então também fiz o seguinte, pois estava em uma máquina Ubuntu no Google Cloud (seguindo o guiahttps://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
Depois disso, o disco e a partição cresceram adequadamente para o novo tamanho:
Eu espero que isso ajude.