### Уменьшение размера образа .img При создании образа SD-карты с помощью стандартной утилиты Диски в Linux Mint, образ получается размером равным размеру SD-карты вне зависимости от занятого места на ней. Таким образом, восстановить этот образ на диск меньшего размера не получится. Необходимо привести размер образа максимально к приближенному значению занятого в нем места. *это перевод англоязычной инструкции. Работоспособность метода проверена на себе.* *Используемая ОС - Debian based* 1. Создать loopback device (как это корректно перевести не понял - устройство петли?) Включим создание петли ```bash sudo modprobe loop ``` Создадим новый (пустой) `loopback device` ```bash sudo losetup -f ``` команда вернет путь к устройству ```bash /dev/loop0 ``` Подключаем наш образ к созданному устройству ```bash sudo losetup /dev/loop0 myimage.img ``` Чтобы получить доступ к разделам, которые есть в образе, нужно сказать ядру ​​загрузить и их ```bash sudo partprobe /dev/loop0 ``` 2. Уменьшение размера раздела в образе После создания `loopback device` в стандартном приложении Диски (Linux Mint) появится новый диск. Чтобы изменить размер раздела в образе нужно: выбрать нужный раздел -> нажать шестеренку ниже -> в выпадающем меню выбрать пункт *Изменить размер* Эту же процедуру можно выполнить с помощью **Gparted**, но при запуске приложения `loopback device` будет отсутствовать в списке доступных дисков. Gparted нужно запускать явно указав на устройство ```bash sudo gparted /dev/loop0 ``` После изменения размера образа loopback-устройство нам больше не нужно, отключим его ```bash sudo losetup -d /dev/loop0 ``` 3. Уменьшение размера образа *уменьшение раздела никак не повлияло на размер самого образа, в нем появилось свободное место* Теперь нужно удалить ненужное свободное место в образе. *узнаем где оно начинается* ```bash fdisk -l myimage.img ``` *увидим нечто подобное* ```bash Disk myimage.img: 6144 MB, 6144000000 bytes, 12000000 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: 0x000ea37d Device Boot Start End Blocks Id System myimage.img1 2048 9181183 4589568 b W95 FAT32 ``` _Обратите внимание на две вещи в выводе: Раздел заканчивается на блоке 9181183 (End). Размер блока составляет 512 байт (Units = sectors of 1 * 512 = 512 bytes)._ Теперь уменьшаем файл образа до размера, содержащего данные. С помощью команды *truncate* необходимо указать размер файла в байтах. Последний блок был *9181183*, а номера блоков начинались с *0*. Это означает, что нам нужно **(9181183 + 1) * 512** байт. **Это важно, иначе раздел не поместится в образ.** ```bash truncate --size=$[(9181183+1)*512] myimage.img ``` Если *truncate* по какой-то причине не доступна, можно с помощью *dd* создать новый образ на основе нашего, скопировав в него только необходимые нам сектора (мы их вычислили) `(9181183+1)*512 (размер сектора) = 4700766208 байт` `4700766208 / 1024 / 1024 = 4483 Мб` (обязательно округляем в большую сторону) *образ можно сразу сжать при создании* ```bash sudo dd if=myimage.img bs=1M count=2578 conv=noerror,sync | gzip -c > /$HOME/Backup/image.img.gz ``` 4. Восстановление образа если образ создавали без сжатия ```bash sudo dd if=$HOME/Backup/image.img of=/dev/sdb bs=1M conv=noerror,sync status=progress ``` если создавали со сжатием ```bash gunzip -c $HOME/Backup/image.img.gz | sudo dd of=/dev/sdb conv=noerror,sync status=progress ```