Решение - создавать образ диска на HDD, писать туда, затем переносить образ через dd. Создаем таблицу разделов на флешке с двумя разделами - с тем, что нужно записать и остатком флешки.
#!/bin/bash # 1st argument - name of disk device (e.g. /dev/sdb or /dev/flash etc) # 2nd argument - source directory name #FLASH_SIZE=`cat /sys/block/$1/size` FLASH_SIZE=`du -s -k $2 |sed 's/\(.*[0-9]\)\(.*\)/\1*2+65535/'|bc` date echo $FLASH_SIZE sectors to write... dd if=/dev/zero of=/tmp/flash.img bs=512 count=$FLASH_SIZE echo dd image created... /sbin/losetup /dev/loop0 /tmp/flash.img /sbin/losetup -a /sbin/mkfs -t vfat /dev/loop0 echo vfat fs on image made... mount /dev/loop0 /mnt cpstart=$(date +%s.%N); cp -r $2/* /mnt cpdur=$(echo "$(date +%s.%N) - $cpstart" | bc); printf "Copied in %.6f seconds\n" $cpdur echo files copied to image... umount /mnt & wait dd if=/dev/zero of=$1 bs=512 count=1 echo -e "n\np\n1\n2048\n+"$FLASH_SIZE"\nt\nb\na\nw\nq\n"|fdisk $1 >/dev/null dd if=/dev/loop0 of=$1'1' bs=512 count=$FLASH_SIZE & wait echo image moved to flash... /sbin/losetup -D rm /tmp/flash.img echo -e "n\np\n2\n\n\nt\n2\nb\nw\nq\n"|fdisk $1 >/dev/null mkfs -t vfat $1'2' & wait echo cleaning done. date