Here’s a small shell script based on dd’s output which helps to partition a flat file, split it up into its respective partitions so they can be formatted and put them all back together again.
#!/bin/bash if [ "${1}" == "c" ] then if [ "${3}" == "" ] then echo "Usage: $0 $1 <filename> <filesize>" exit 1 fi echo "Creating new file [${2}]..." dd if=/dev/zero of=${2} bs=${3}G count=1 > /dev/null 2>&1 echo "Partition the new flat file ( fdisk ${2} )" echo fi if [ "${1}" == "s" ] then if [ "${2}" == "" ] then echo "Usage: $0 $1 <filename>" exit 1 fi unit=`fdisk -l "${2}" | grep -i '^Units' | sed -e 's/^.* \([0-9][0-9]*\) bytes.*$/\1/g'` lase="-1" numb=0 fdisk -l "${2}" | sed -e 's/^[ \t]*//g' -e 's/\*//g' | grep -i "^${2}[0-9][0-9]*" | while read line do curb=`echo "${line}" | awk '{ print $2 }'` cure=`echo "${line}" | awk '{ print $3 }'` let size="${cure} - ${curb} + 1" let diff="${curb} - ${lase} - 1" if [ ${diff} -gt 0 ] then let endi="${curb} - 1" let skip="${lase} + 1" echo "[${numb}] Unused space [${skip} - ${endi}] [${diff} blocks]..." dd if=${2} bs=${unit} skip=${skip} count=${diff} of=${2}${numb} > /dev/null 2>&1 let numb="${numb} + 1" fi echo "[${numb}] Carving partition [${curb} - ${cure}] [${size} blocks]..." dd if=${2} bs=${unit} skip=${curb} count=${size} of=${2}${numb} > /dev/null 2>&1 let numb="${numb} + 1" lase="${cure}" done fdisk -l "${2}" | sed -e 's/^[ \t]*//g' -e 's/\*//g' | grep -i "^${2}[0-9][0-9]*" | tail -n 1 | while read line do endi=`echo "${line}" | awk '{ print $3 }'` let rest="${endi} + 1" numb="9" echo "[${numb}] Copying ending [${rest} - <end>]..." dd if=${2} bs=${unit} skip=${rest} of=${2}${numb} > /dev/null 2>&1 done echo echo "Create any filesystem needed ( mkfs.* ${2}[0-9] )" echo "Mount any filesystem needed ( mount -o loop ${2}[0-9] /mnt/tmp[0-9] )" echo "Copy any files needed ( cp -r source/* /mnt/tmp[0-9]/ )" echo "Unmount any filesystem needed ( umount /mnt/tmp[0-9] )" echo fi if [ "${1}" == "j" ] then if [ "${2}" == "" ] then echo "Usage: $0 $1 <filename>" exit 1 fi echo "Writing to file [${2}.join]..." cat ${2}[0-9]* > ${2}.join echo fi