Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/make_fake_device.sh
blob: c44a0e0b9b55c15de19eb643b7b551ed47082f80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/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] <loop device backing store filename>"
    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 <<EOF
n
p
1


t
83
p
w
q
EOF

losetup -d $LOOP_DEV > /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