Увеличивать стандартный образ для 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
Увеличить образ 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
По завершении работы нужно удалить виртуальное устройство и синхронизировать данные на файловой системе:
# losetup -d /dev/loop0
# sync
Теперь новый, увеличенный образ готов к записи на флешку или MicroSD карточку!
Заключение
Если операционная система перестала загружаться после изменений, то следует сравнить две вещи до и после увеличение размера:
- Численное обозначение каждого из старых разделов.
- UUID каждого из старых разделов.
Если они обновились, то следует обновить файл /etc/fstab на разделе с корневой файловой системой и параметры загрузчика на образе. Опять же, тут нет универсального рецепта, но с помощью виртуального устройства можно работать с разделами точно так же, как и с обычными:
# mount /dev/loop0p1 /mnt
... edit something ...
# umount /mnt
А значит и редактировать на них файлы конфигурации.