Снять образ системы с SD карты
-
Есть преднастроенная система, необходимо снять образ с нее для последующего распространения.
Система устанавливалась и настравивалась на SD карте объемом 8 Гб, настроеная система занимает около 2,5 Гб.Нужно снять образ системы так, чтобы он мог развернуться на 4 Гб карте. Как это лучше сделать?
Пытался следующим образом:
В gparted уменьшил корневой раздел до ~3 Гб:fdisk -l /dev/sdb Disk /dev/sdb: 7,3 GiB, 7861174272 bytes, 15353856 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 Disklabel type: dos Disk identifier: 0x4b047071 Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 137215 129024 63M c W95 FAT32 (LBA) /dev/sdb2 137216 6375423 6238208 3G 83 Linux
Снял образ:
3264217088 = 6375423 * 512 + 512 ddrescue --sparse -s 3264217088 /dev/sdb image.img fdisk -l image.img Disk image.img: 3 GiB, 3264216576 bytes, 6375423 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 Disklabel type: dos Disk identifier: 0x4b047071 Device Boot Start End Sectors Size Id Type image.img1 8192 137215 129024 63M c W95 FAT32 (LBA) image.img2 137216 6375423 6238208 3G 83 Linux
Если этот образ смонтировать вручную, то все нормально монтируется и работает:
mount -o loop,offset=70254592 image.img /tmp/mnt_test
Но стоит записать на SD карту — система не загружается, т.к. происходит ошибка монтирования root раздела (из-за кривой разметки???).
Как правильно снять образ?И второй вопрос — как расширить раздел на всю свободную область SD карты при первом запуске?
Закидывал скрипт /etc/init.d/resize2fs_once в автозапуск при загрузке — ФС не увеличивается, что не удивительно, нужно увеличить раздел перед расширением ФС.
В логах первой загрузки системы обнаружил следующее:May 27 11:50:22 raspberrypi kernel: [ 8.462819] EXT4-fs (mmcblk0p2): resizing filesystem from 964096 to 1902080 blocks May 27 11:50:22 raspberrypi resize2fs_once[390]: Starting resize2fs_once:resize2fs 1.42.12 (29-Aug-2014) May 27 11:50:22 raspberrypi resize2fs_once[390]: Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required May 27 11:50:22 raspberrypi resize2fs_once[390]: old_desc_blocks = 1, new_desc_blocks = 1 May 27 11:50:22 raspberrypi resize2fs_once[390]: The filesystem on /dev/mmcblk0p2 is now 1902080 (4k) blocks long.
Насколько я понимаю, сначала увеличивается раздел, а потом файловая система.
Как сделать тоже самое при первой загурзке с моего образа?
Или проще при загрузке выполнить sudo raspi-config --expand-rootfs и перегрузиться?
-
В gparted уменьшил корневой раздел до ~3 Гб:Я так понял это на основной карте делалось. После этого с неё загрузка нормально проходит?
ddrescue --sparse -s 3264217088 /dev/sdb image.imgНикогда не умел пользоваться такими расчетами по байтам. Если раздел уже уменьшен, то я бы предпочел копировать целиком утсройство /dev/sdb, без опции -s. Можно попробовать пойти самым простым путем — копировать вообще без параметров, что-то вроде такого:
ddrescue /dev/sdb /dev/sdc и если заработает, то уже потом оптимизировать процесс.
Также есть еще утилита dd, можно попробовать так:dd if=/dev/sdb of=/dev/sdc bs=1M
Вот еще вспомнил, был такой проект — piclone — копирование образа запущенной системы на карту памяти. Может с ним получится.
Насколько я понимаю, сначала увеличивается раздел, а потом файловая система.Все верно, на десктопе таким занимался: сначала нужно fdisk'ом увеличить размер раздела, потом resize2fs увеличивает размер файловой системы.
Или проще при загрузке выполнить Проще всего, мне кажется, взять 1 карточку на 4Гб, настроить на ней систему (включая расширение раздела на всю карточку) и дальше делать её копии. -
На 4GB карту накатывается произвольный дистрибутив.
Далее удаляем всё в ext разделе этой карты, и копируем туда всё из ext раздела карты на 8GB.
Точно также поступаем с FAT32 разделом.
Всё. Далее снимаем дамп Win32DiskImager'ом с карты 4GB -
Я так понял это на основной карте делалось. После этого с неё загрузка нормально проходит?Да, нормально
Если раздел уже уменьшен, то я бы предпочел копировать целиком утсройство /dev/sdbТогда образ не восстановишь на карте меньшего объема.
Вообще хотелось бы сделать образ меньше 4 Гб, например, 3,5 Гб, т.к. карты разные, несмотря на то, что указан одинаковый объем. Например, у меня не восстановился образ Ubuntu Mate на карту 8Гб, которая шла в комплекте с Pi, т.к. она оказалась немного меньше, чем требуется для развертывания.Проще всего, мне кажется, взять 1 карточку на 4ГбНа 4GB карту накатывается произвольный дистрибутив.
Далее удаляем всё в ext разделе этой карты, и копируем туда всё из ext раздела карты на 8GB.Эх, видимо так и придется делать. -
Снятый win32diskimager'ом образ можно уменьшить скриптом pishrink
https://github.com/Drewsif/PiShrink
работает чёткоsudo pishrink.sh pi.img