]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - INSTALL/CreatePersistentImg.sh
add XPRESS support (#317)
[Ventoy.git] / INSTALL / CreatePersistentImg.sh
1 #!/bin/sh
2
3 size=1024
4 fstype=ext4
5 label=casper-rw
6
7 print_usage() {
8 echo 'Usage: CreatePersistentImg.sh [ -s size ] [ -t fstype ] [ -l LABEL ]'
9 echo ' OPTION: (optional)'
10 echo ' -s size in MB, default is 1024'
11 echo ' -t filesystem type, default is ext4 ext2/ext3/ext4/xfs are supported now'
12 echo ' -l label, default is casper-rw'
13 echo ''
14 }
15
16 while [ -n "$1" ]; do
17 if [ "$1" = "-s" ]; then
18 shift
19 size=$1
20 elif [ "$1" = "-t" ]; then
21 shift
22 fstype=$1
23 elif [ "$1" = "-l" ]; then
24 shift
25 label=$1
26 else
27 print_usage
28 exit 1
29 fi
30 shift
31 done
32
33
34 # check label
35 if [ -z "$label" ]; then
36 echo "The label can NOT be empty."
37 exit 1
38 fi
39
40 # check size
41 if echo $size | grep -q "^[0-9][0-9]*$"; then
42 if [ $size -le 1 ]; then
43 echo "Invalid size $size"
44 exit 1
45 fi
46 else
47 echo "Invalid size $size"
48 exit 1
49 fi
50
51
52 # check file system type
53 # nodiscard must be set for ext2/3/4
54 # -K must be set for xfs
55 if echo $fstype | grep -q '^ext[234]$'; then
56 fsopt='-E nodiscard'
57 elif [ "$fstype" = "xfs" ]; then
58 fsopt='-K'
59 else
60 echo "unsupported file system $fstype"
61 exit 1
62 fi
63
64 # 00->ff avoid sparse file
65 dd if=/dev/zero bs=1M count=$size | tr '\000' '\377' > persistence.img
66 sync
67
68 freeloop=$(losetup -f)
69
70 losetup $freeloop persistence.img
71
72 mkfs -t $fstype $fsopt -L $label $freeloop
73
74 sync
75
76 losetup -d $freeloop
77