CreatePersistentImg.sh 1.97 KB
Newer Older
longpanda's avatar
longpanda committed
1
2
3
4
5
#!/bin/sh

size=1024
fstype=ext4
label=casper-rw
6
config=''
longpanda's avatar
longpanda committed
7
8

print_usage() {
9
    echo 'Usage:  CreatePersistentImg.sh [ -s size ] [ -t fstype ] [ -l LABEL ] [ -c CFG ]'
longpanda's avatar
longpanda committed
10
11
12
13
    echo '  OPTION: (optional)'
    echo '   -s size in MB, default is 1024'
    echo '   -t filesystem type, default is ext4  ext2/ext3/ext4/xfs are supported now'
    echo '   -l label, default is casper-rw'
14
    echo '   -c configfile name inside the persistence file. File content is "/ union"'
longpanda's avatar
longpanda committed
15
16
17
18
19
20
21
22
23
24
25
26
27
    echo ''
}

while [ -n "$1" ]; do
    if [ "$1" = "-s" ]; then
        shift
        size=$1
    elif [ "$1" = "-t" ]; then
        shift
        fstype=$1
    elif [ "$1" = "-l" ]; then
        shift
        label=$1
28
29
30
    elif [ "$1" = "-c" ]; then
        shift
        config=$1
longpanda's avatar
update  
longpanda committed
31
32
33
    elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
        print_usage
        exit 0
longpanda's avatar
longpanda committed
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
72
    else
        print_usage
        exit 1
    fi
    shift
done


# check label
if [ -z "$label" ]; then
    echo "The label can NOT be empty."
    exit 1
fi

# check size
if echo $size | grep -q "^[0-9][0-9]*$"; then
    if [ $size -le 1 ]; then
        echo "Invalid size $size"
        exit 1
    fi
else
    echo "Invalid size $size"
    exit 1
fi


# check file system type
# nodiscard must be set for ext2/3/4
# -K must be set for xfs 
if echo $fstype | grep -q '^ext[234]$'; then
    fsopt='-E nodiscard'
elif [ "$fstype" = "xfs" ]; then
    fsopt='-K'
else
    echo "unsupported file system $fstype"
    exit 1
fi

# 00->ff avoid sparse file
longpanda's avatar
longpanda committed
73
dd if=/dev/zero  bs=1M count=$size | tr '\000' '\377' > persistence.dat
longpanda's avatar
longpanda committed
74
75
76
77
sync

freeloop=$(losetup -f)

longpanda's avatar
longpanda committed
78
losetup $freeloop persistence.dat
longpanda's avatar
longpanda committed
79
80
81
82
83

mkfs -t $fstype $fsopt -L $label $freeloop 

sync

84
85
86
87
88
89
90
91
92
93
94
95
96
if [ -n "$config" ]; then
    if [ -d ./persist_tmp_mnt ]; then
        rm -rf ./persist_tmp_mnt
    fi
    
    mkdir ./persist_tmp_mnt
    if mount $freeloop ./persist_tmp_mnt; then
        echo '/ union' > ./persist_tmp_mnt/$config
        sync
        umount ./persist_tmp_mnt
    fi
    rm -rf ./persist_tmp_mnt
fi
longpanda's avatar
longpanda committed
97

98
losetup -d $freeloop