#!/bin/bash set -e set -o pipefail PATH=/usr/sbin:/sbin:$PATH SAFE_SIZE_4G=3758096384 #3584mb SAFE_SIZE_2G=1879048192 #1/2 4g safe size SAFE_SIZE_1G=939524096 #1/2 2g safe size DISK_SIZE=$SAFE_SIZE_4G LOOP_DEV=$(losetup -f) usage() { echo "make_fake_device.sh [--4G|--2G|--1G] " echo " outputs a loop device whose backing store is a partitioned disk " echo " image using a sparse file of the specified size (default is --4G)" exit 1 } while [ $# -gt 1 ]; do case $1 in --4G) DISK_SIZE=$SAFE_SIZE_4G shift ;; --2G) DISK_SIZE=$SAFE_SIZE_2G shift ;; --1G) DISK_SIZE=$SAFE_SIZE_2G shift ;; *) usage ;; esac done IMG=$1 BLOCK_SIZE=512 NUM_HEADS=16 NUM_SECTORS_PER_TRACK=62 NUM_BLOCKS=$(($DISK_SIZE / $BLOCK_SIZE)) NUM_CYLINDERS=$(($NUM_BLOCKS / $NUM_HEADS / $NUM_SECTORS_PER_TRACK)) IMAGE_SIZE=$(($NUM_CYLINDERS * $NUM_HEADS * $NUM_SECTORS_PER_TRACK * $BLOCK_SIZE)) OS_PART1_BEGIN=$(($NUM_SECTORS_PER_TRACK * $BLOCK_SIZE)) dd if=/dev/zero of=$IMG bs=$BLOCK_SIZE count=0 seek=$(($IMAGE_SIZE / $BLOCK_SIZE)) > /dev/null 2>&1 || exitclean /sbin/fdisk -b $BLOCK_SIZE -C $NUM_CYLINDERS -S $NUM_SECTORS_PER_TRACK -H $NUM_HEADS $IMG > /dev/null 2>&1 < /dev/null 2>&1 || /bin/true losetup -o $OS_PART1_BEGIN $LOOP_DEV $IMG mke2fs -O dir_index -L OLPCRoot -F $LOOP_DEV > /dev/null 2>&1 || exitclean echo $LOOP_DEV