Увеличивать стандартный образ для Flash накопителя/MicroSD может потребоваться, если вы хотите установить больше программ на образ или каким-то другим способом его улучшить. Я в качестве примера буду использовать Raspberry Pi OS, но рецепт в целом универсален.

Для начала нужно узнаться размер текущего образа и какие разделы на нём располагаются. Это можно сделать с помощью утилит parted, fsck, но я выбрал gparted для наглядности:

$ ls -la 2020-08-20-raspios-buster-armhf-lite.img
-rw-r--r-- 1 ozi ozi 1845493760 Nov  8 17:12 2020-08-20-raspios-buster-armhf-lite.img
# gparted 2020-08-20-raspios-buster-armhf-lite.img
gparted: разделы на образе до увеличения

Увеличить образ Linux

Теперь, зная размер образа и разделов на нём, следует вооружиться калькулятором и посчитать с каким размером нам нужен новый образ. В моём случае это 3 ГиБ или 3072 МиБ.

Чтобы никак случайно не повредить существующий образ, создадим новый — пустой файл enlarged.img нужного размера, заполненный нулями:

$ dd if=/dev/zero of=enlarged.img bs=1M count=3072

С помощью параметра bs (количество данных за раз) и count (это самое количество) можно отрегулировать размер получившегося файла по формуле: размер = bs * count.

Теперь скопируем существующий образ в начало нашего файла:

$ dd if=2020-08-20-raspios-buster-armhf-lite.img of=enlarged.img bs=1M conv=notrunc

Параметр conv=notrunc необходим для того, чтобы после копирования наш новый образ не был обрезан до размера старого. Пол пути пройдено, у нас уже есть увеличенный образ enlarged.img

Увеличить разделы на образе Linux для USB Flash/MicroSD

Сейчас пустое место в конце образа никак не используется. Чтобы занять это пространство можно добавить больше разделов или же увеличить существующие. Создадим виртуальное устройство, которое бы ассоциировалось у операционной системы с нашим файлом-образом:

$ losetup --show --find --partscan enlarged.img
/dev/loop0

После выполнения команды будет напечатано имя устройства, в моём случае это /dev/loop0. Теперь его можно использовать для увеличения разделов или создания новых. Тут нет универсального рецепта — всё зависит от ваших потребностей. Я же ещё раз воспользуюсь gparted:

$ ls -la enlarged.img 
-rw-r--r-- 1 ozi ozi 3221225472 Nov  8 17:36 enlarged.img
# gparted /dev/loop0
gparted: разделы на образе после увеличения

По завершении работы нужно удалить виртуальное устройство и синхронизировать данные на файловой системе:

# losetup -d /dev/loop0
# sync

Теперь новый, увеличенный образ готов к записи на флешку или MicroSD карточку!

Заключение

Если операционная система перестала загружаться после изменений, то следует сравнить две вещи до и после увеличение размера:

  1. Численное обозначение каждого из старых разделов.
  2. UUID каждого из старых разделов.

Если они обновились, то следует обновить файл /etc/fstab на разделе с корневой файловой системой и параметры загрузчика на образе. Опять же, тут нет универсального рецепта, но с помощью виртуального устройства можно работать с разделами точно так же, как и с обычными:

# mount /dev/loop0p1 /mnt
... edit something ...
# umount /mnt

А значит и редактировать на них файлы конфигурации.

Навигация по записям