$ truncate -s 1G test.img
$ echo -e "label:dos\nsize=100M,bootable,type=L\nsize=200M,type=L\nsize=300M,type=L\ntype=Ex\nsize=+" | sfdisk test.img
Проверяется, чтобы сейчас никто не использовал этот диск... ОК
Диск test.img: 1 GiB, 1073741824 байт, 2097152 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
>>> Заголовок скрипта принят.
>>> Создана новая метка DOS с идентификатором 0xa605c035.
test.img1: Создан новый раздел 1 с типом 'Linux' и размером 100 MiB.
test.img2: Создан новый раздел 2 с типом 'Linux' и размером 200 MiB.
test.img3: Создан новый раздел 3 с типом 'Linux' и размером 300 MiB.
test.img4: Создан новый раздел 4 с типом 'Extended' и размером 423 MiB.
test.img5: Создан новый раздел 5 с типом 'Linux' и размером 422 MiB.
test.img6: Done.
Новая ситуация:
Тип метки диска: dos
Идентификатор диска: 0xa605c035
Устр-во    Загрузочный  начало   Конец Секторы Размер Идентификатор Тип
test.img1  *              2048  206847  204800   100M            83 Linux
test.img2               206848  616447  409600   200M            83 Linux
test.img3               616448 1230847  614400   300M            83 Linux
test.img4              1230848 2097151  866304   423M             5 Расширенный
test.img5              1232896 2097151  864256   422M            83 Linux
Таблица разделов была изменена
Синхронизируются диски.
$ losetup --partscan --show --find test.img
/dev/loop0
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
/dev/loop0     loop           1G
├─/dev/loop0p1 part         100M
├─/dev/loop0p2 part         200M
├─/dev/loop0p3 part         300M
├─/dev/loop0p4 part           1K
└─/dev/loop0p5 part         422M
$ mkfs.ext4 /dev/loop0p5
$ mkdir /tmp/mnt
$ sudo mount /dev/loop0p5 /tmp/mnt
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
/dev/loop0     loop           1G
├─/dev/loop0p1 part         100M
├─/dev/loop0p2 part         200M
├─/dev/loop0p3 part         300M
├─/dev/loop0p4 part           1K
└─/dev/loop0p5 part ext4    422M 385,2M /tmp/mnt
$ truncate -s +1G test.img
$ sudo losetup --verbose --set-capacity /dev/loop0
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
/dev/loop0     loop           2G
├─/dev/loop0p1 part         100M
├─/dev/loop0p2 part         200M
├─/dev/loop0p3 part         300M
├─/dev/loop0p4 part           1K
└─/dev/loop0p5 part ext4    422M 385,2M /tmp/mnt
$ echo ", +" | sudo sfdisk --no-reread -N 4 /dev/loop0
$ sfdisk --dump /tmp/test.img
label: dos
label-id: 0xa605c035
device: /tmp/test.img
unit: sectors
sector-size: 512
/tmp/test.img1 : start=        2048, size=      204800, type=83, bootable
/tmp/test.img2 : start=      206848, size=      409600, type=83
/tmp/test.img3 : start=      616448, size=      614400, type=83
/tmp/test.img4 : start=     1230848, size=     2963456, type=5
/tmp/test.img5 : start=     1232896, size=      864256, type=83
$ echo ", +" | sudo sfdisk --no-reread -N 5 /dev/loop0
$ sfdisk --dump /tmp/test.img
label: dos
label-id: 0xa605c035
device: /tmp/test.img
unit: sectors
sector-size: 512
/tmp/test.img1 : start=        2048, size=      204800, type=83, bootable
/tmp/test.img2 : start=      206848, size=      409600, type=83
/tmp/test.img3 : start=      616448, size=      614400, type=83
/tmp/test.img4 : start=     1230848, size=     2963456, type=5
/tmp/test.img5 : start=     1232896, size=     2961408, type=83
$ sudo partx --update /dev/loop0
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
/dev/loop0     loop           2G
├─/dev/loop0p1 part         100M
├─/dev/loop0p2 part         200M
├─/dev/loop0p3 part         300M
├─/dev/loop0p4 part           1K
└─/dev/loop0p5 part ext4    1,4G 385,2M /tmp/mnt
$ sudo resize2fs /dev/loop0p5
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
/dev/loop0     loop           2G
├─/dev/loop0p1 part         100M
├─/dev/loop0p2 part         200M
├─/dev/loop0p3 part         300M
├─/dev/loop0p4 part           1K
└─/dev/loop0p5 part ext4    1,4G   1,3G /tmp/mnt
$ sudo umount /tmp/mnt
$ losetup -d /dev/loop0