Сжатие образа в Linux

Требование

  • ПК с  Linux
  • Некоторые знания как работает терминал
  • Не сжатый образ (myimage.img)

Создание loopback устройства

GParted — отличное приложение, которое может достаточно хорошо обрабатывать таблицы разделов и файловые системы. В этом статье мы будем использовать GParted для сжатия файловой системы

Сначала мы включим loopback, если он еще не был включен:

sudo modprobe loop

 

Теперь мы можем запросить новое (свободное) loopback устройство:

sudo losetup -f

 

Далее мы создаем устройство из образа:

sudo losetup /dev/loop0 myimage.img

 

Теперь у нас есть устройство /dev/loop0, которое представляет myimage.img. Мы хотим получить доступ к разделам на образе, поэтому нам нужно попросить ядро загрузить их:

sudo partprobe /dev/loop0

 

Это должно дать нам  /dev/loop0p1, которой представляет первый раздел в myimage.img.

Изменение размера раздела с помощью GParted

Далее мы можем открыть образ с помощью GParted:

sudo gparted /dev/loop0

 

Должно показать окно, подобное этому:

Обратите внимание:

  • В образе один раздел
  • Раздел занимает весь диск
  • Раздел заполнен не полностью

Выберите раздел и нажмите «Изменить размер / переместить«. Появится окно, похожее на следующее:

Перетащите правую полосу влево как можно больше.

Обратите внимание, что иногда GParted потребуется несколько МБ дополнительно для размещения данных, связанных с файловой системой. Рекомендую оставлять свободного места не менее 500MB

Наконец нажмите «Изменить / Переместить». Вы вернетесь в окно GParted.  Диск будет выглядеть примерно так:

Обратите внимание, что часть диска не выделена. Эта часть диска не будет использоваться разделом, поэтому позже мы можем вырезать эту часть образа. GParted — это инструмент для дисков, поэтому он не сжимает образ, а только создает разделы.

Нажмите «Применить» в GParted. Теперь он будет перемещать файлы и, наконец, сокращать раздел. Это может занять минуту или две. После этого закройте GParted.

Теперь нам больше не нужно loopback-устройство, поэтому выгрузите его:

sudo losetup -d /dev/loop0

 

Обрезка образа

Теперь пришло время обрезать эту незанятую часть. Сначала нам нужно знать, где заканчивается наш раздел и где начинается нераспределенная часть. Узнаем это с помощью fdisk:

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 bytes (показано в выводе 1 * 512)

Затем мы сжимаем файл образа до размера раздела. Для этого мы будем использовать команду truncate. С помощью команды truncate необходимо указать размер файла в байтах. Последний блок был 9181183. Это означает, что нам нужно (9181183 + 1) * 512 байт.

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

 

Рейтинг
( 3 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Комментарии: 1
  1. Андрей

    Clonezilla. Создает, сжимает и восстанавливает образ. Проверено-работает.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: