$ 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