O redimensionamento da partição fdisk falha com argumento inválido

O redimensionamento da partição fdisk falha com argumento inválido

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/Cancelqual 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/vda3para 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 -fse resize2fsfor ext4). Se você estiver trabalhando com um arquivo de imagem de disco bruto (ou seja, para QEMU), poderá usá-lo kpartx -av disk.imgpara obter dispositivos de loop para suas partições, para que possa executar e2fsckesses resize2fsdispositivos de loop.

Responder3

O problema é que o MBR protetor (PMBR) é muito pequeno. Você pode alterar o MBR de proteção usando:

  1. xpara funcionalidade extra
  2. Mpara entrar no MBR protetor/híbrido
  3. ( ppermite mostrar o MBR protetor)
  4. rpara retornar ao menu principal (ainda no modo MBR de proteção!)
  5. dpara excluir a partição MBR protetora de tamanho incorreto
  6. npara criar uma nova partição e 4x enterpara aceitar as configurações padrão (primária, partição número 1 e tamanho completo)
  7. te eepara alterar o tipo para GPT
  8. xpara funcionalidade extra
  9. Mpara sair do modo MBR protetor/híbrido
  10. rpara retornar ao menu principal (agora no modo GPT novamente)
  11. wescrever

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 Oe 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.

informação relacionada