пятница, 8 ноября 2019 г.

Расширение раздела ext2 и файловой системы в bash

В bash-скрипте я создаю 200M-образ, связываю его с loop-устройством, монтирую, создаю файловую систему ext2, делаю сборку из необходимых файлов и в конце собираю бинарник на qt при помощи кросс-компилятора:

# 200 метров должно хватить для любого диска с прогой, скриптов и настроек 
dd if=/dev/zero of=./dump.img bs=1M count=200

# освобождаем loop0-устройство
losetup -d /dev/loop0

# сопоставляем образ с loop-устройством
losetup /dev/loop0 ./dump.img

# формируем таблицу разделов на /dev/loop0
sfdisk /dev/loop0 <<-__EOF__
;
__EOF__

# перечитываем
partprobe /dev/loop0

# создаем файловую систему ext2
mkfs.ext2 -F -L "$FIRMWARE_VER1" /dev/loop0p1

# создаем папку, на всякий случай
mkdir ./imgmnt

# монтируем loop-устройство в папку

mount /dev/loop0p1 ./imgmnt

Записываем созданный распакованный образ на microsd-карту через usb-переходник (microsd-карта монтируется как /dev/sdc1):

sudo dd if=./myimage.img of=/dev/sdc bs=1M

На плате BBB делаем авторасширение ext2-раздела (microsd-карта монтируется как /dev/mmcblk0p1) в моем bash-скрипте, запускаемом при инициализации (/etc/init.d/mystart.sh).

Авторасширение делается в два этапа:
1) до монтирования microsd-карты делаем расширение раздела с предварительной проверкой на размер раздела:

# расширение раздела до монтирования
read MSIZE < /sys/class/block/mmcblk0/size
read NR START END TYPE < <( partx -gbro NR,START,END,TYPE /dev/mmcblk0 )
if [ "$END" -lt "$(($MSIZE - 1))" ] && [ "$TYPE" == "0x83" ]; then
  dd if=/usr/share/medteco/sdresize.rgb of=/dev/fb0
  parted /dev/mmcblk0 resizepart 1 100%
  e2fsck -f /dev/mmcblk0p1
fi

2) после монтирования microsd-карты делаем расширение файловой системы (этот этап можно было сделать до монтирования, но почему-то на нем в таком случае часто случались косяки):

# расширяем файловую систему после монтирования
resize2fs /dev/mmcblk0p1

Источники:

Комментариев нет:

Отправить комментарий