Questa è una sintesi delle risposte sopra e altrove che ha funzionato per me - esegui il backup della tua immagine in caso di errore:
Innanzitutto ingrandisci il file di immagine (qui stiamo aggiungendo 1 GB alla fine):
truncate -s +1G ./image.img
Quindi mappa l'intera immagine come un dispositivo loop in modo da poter colpire la tabella delle partizioni
sudo losetup /dev/loop0 ./image.img
Per riferimento futuro, dump:
sudo fdisk -l /dev/loop0
L'output è simile a:
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
Ora rifaremo l'ultima partizione eliminandola, quindi ricrearla nella stessa posizione iniziale, stesso tipo ma diversa posizione finale. Quindi prendi nota della colonna "Start" per loop0p2 (partizione 2 - la partizione Linux) - la useremo più tardi - qui è 122880.
sudo fdisk /dev/loop0
Inserisci quanto segue - sono sicuri da inserire - non succede nulla di permanente finché non leggi la mia spiegazione che segue:
p
d
2
n
p
2
122880
- basta premere invio per accettare il valore predefinito
p
Passaggio 1: stampa la tabella corrente. Passaggi 2-3: eliminare la partizione 2, Passaggi 4-8: ricreare la partizione 2 con il nuovo punto finale (l'impostazione predefinita è la fine dell'immagine), Passaggio 9: stampare la nuova tabella.
Supponendo che la tabella appena stampata sia identica alla tabella originale ad eccezione del valore Fine e del valore Blocchi (ovvero la dimensione è stata modificata), sei pronto per eseguire il commit.
Invio w
per confermare la modifica, quindi entra q
per uscire.
Puoi eliminare quel dispositivo di loopback, ne faremo un altro per la seconda partizione. Ricorda l'offset iniziale che hai notato e usato sopra - lo useremo di nuovo:
sudo losetup -d /dev/loop0 # delete the old loop setup
sudo losetup -o $((122880*512)) /dev/loop0 ./image.img
Ciò creerà una nuova mappatura sul /dev/loop0
puntamento solo alla partizione 2 - per riferimento 512 è la dimensione del settore che puoi vedere nel primo fdisk
output.
Ora ridimensiona la partizione per riempire lo spazio disponibile:
sudo e2fsck -f /dev/loop0
sudo resize2fs /dev/loop0
Fatto - ora ripulisci:
sudo losetup -d /dev/loop0