notes/Уменьшение размера образа i...

5.2 KiB
Raw Permalink Blame History

Уменьшение размера образа .img

При создании образа SD-карты с помощью стандартной утилиты Диски в Linux Mint, образ получается размером равным размеру SD-карты вне зависимости от занятого места на ней. Таким образом, восстановить этот образ на диск меньшего размера не получится. Необходимо привести размер образа максимально к приближенному значению занятого в нем места. это перевод англоязычной инструкции. Работоспособность метода проверена на себе. Используемая ОС - Debian based

  1. Создать loopback device (как это корректно перевести не понял - устройство петли?) Включим создание петли
sudo modprobe loop

Создадим новый (пустой) loopback device

sudo losetup -f

команда вернет путь к устройству

/dev/loop0

Подключаем наш образ к созданному устройству

sudo losetup /dev/loop0 myimage.img

Чтобы получить доступ к разделам, которые есть в образе, нужно сказать ядру ​​загрузить и их

sudo partprobe /dev/loop0
  1. Уменьшение размера раздела в образе После создания loopback device в стандартном приложении Диски (Linux Mint) появится новый диск. Чтобы изменить размер раздела в образе нужно: выбрать нужный раздел -> нажать шестеренку ниже -> в выпадающем меню выбрать пункт Изменить размер Эту же процедуру можно выполнить с помощью Gparted, но при запуске приложения loopback device будет отсутствовать в списке доступных дисков. Gparted нужно запускать явно указав на устройство
sudo gparted /dev/loop0

После изменения размера образа loopback-устройство нам больше не нужно, отключим его

sudo losetup -d /dev/loop0
  1. Уменьшение размера образа уменьшение раздела никак не повлияло на размер самого образа, в нем появилось свободное место Теперь нужно удалить ненужное свободное место в образе. узнаем где оно начинается
fdisk -l myimage.img

увидим нечто подобное

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 байт. Это важно, иначе раздел не поместится в образ.

truncate --size=$[(9181183+1)*512] myimage.img

Если truncate по какой-то причине не доступна, можно с помощью dd создать новый образ на основе нашего, скопировав в него только необходимые нам сектора (мы их вычислили) (9181183+1)*512 (размер сектора) = 4700766208 байт 4700766208 / 1024 / 1024 = 4483 Мб (обязательно округляем в большую сторону) образ можно сразу сжать при создании

sudo dd if=myimage.img bs=1M count=2578 conv=noerror,sync | gzip -c  > /$HOME/Backup/image.img.gz
  1. Восстановление образа если образ создавали без сжатия
sudo dd if=$HOME/Backup/image.img of=/dev/sdb bs=1M conv=noerror,sync status=progress

если создавали со сжатием

gunzip -c $HOME/Backup/image.img.gz | sudo dd of=/dev/sdb conv=noerror,sync status=progress