Esta é uma síntese das respostas acima e de outros lugares que funcionaram para mim - faça backup da sua imagem caso você cometa um erro:
Primeiro, aumente o arquivo de imagem (aqui estamos adicionando 1 GB ao final):
truncate -s +1G ./image.img
Em seguida, mapeie toda a imagem como um dispositivo de loop, para que possamos cutucar a tabela de partição
sudo losetup /dev/loop0 ./image.img
Para referência futura, vamos despejá-lo:
sudo fdisk -l /dev/loop0
A saída se parece com:
Disk /dev/loop0: 2962 MB, 2962227200 bytes
255 heads, 63 sectors/track, 360 cylinders, total 5785600 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
Disk identifier: 0x000c4661
Device Boot Start End Blocks Id System
/dev/loop0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/loop0p2 122880 5785599 2831360 83 Linux
Agora, refazemos a última partição excluindo-a e recriando-a no mesmo local de início, mesmo tipo, mas com local final diferente. Portanto, anote a coluna "Iniciar" da loop0p2 (partição 2 - a partição Linux) - nós a usaremos mais tarde - seu 122880 aqui.
sudo fdisk /dev/loop0
Digite o seguinte - eles são seguros para entrar - nada permanente acontece até que você leia minha explicação a seguir:
p
d
2
n
p
2
122880
- basta pressionar enter para aceitar o padrão
p
Etapa 1 - imprima a tabela atual. Etapas 2-3 - exclua a partição 2, Etapas 4-8 - recrie a partição 2 com o novo ponto final (o padrão é o fim da imagem), Etapa 9 - imprima a nova tabela.
Supondo que sua tabela recém-impressa seja idêntica à tabela original, exceto pelos valores Final e Blocos (ou seja, o tamanho foi alterado) que você está pronto para confirmar.
Digite w
para confirmar sua alteração e digiteq
para sair.
Você pode excluir esse dispositivo de loopback, criaremos outro para a segunda partição. Lembre-se do deslocamento inicial que você anotou e usou acima - nós o usaremos novamente:
sudo losetup -d /dev/loop0 # delete the old loop setup
sudo losetup -o $((122880*512)) /dev/loop0 ./image.img
Isso criará um novo mapeamento ao /dev/loop0
apontar apenas para a partição 2 - pois a referência 512 é o tamanho do setor que você pode ver na primeira fdisk
saída.
Agora redimensione a partição para preencher o espaço disponível:
sudo e2fsck -f /dev/loop0
sudo resize2fs /dev/loop0
Concluído - agora limpe:
sudo losetup -d /dev/loop0