Требование
- ПК с 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
Clonezilla. Создает, сжимает и восстанавливает образ. Проверено-работает.