]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - INSTALL/CreatePersistentImg.sh
IA32 ARM64 support
[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 elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
27 print_usage
28 exit 0
29 else
30 print_usage
31 exit 1
32 fi
33 shift
34 done
35
36
37 # check label
38 if [ -z "$label" ]; then
39 echo "The label can NOT be empty."
40 exit 1
41 fi
42
43 # check size
44 if echo $size | grep -q "^[0-9][0-9]*$"; then
45 if [ $size -le 1 ]; then
46 echo "Invalid size $size"
47 exit 1
48 fi
49 else
50 echo "Invalid size $size"
51 exit 1
52 fi
53
54
55 # check file system type
56 # nodiscard must be set for ext2/3/4
57 # -K must be set for xfs
58 if echo $fstype | grep -q '^ext[234]$'; then
59 fsopt='-E nodiscard'
60 elif [ "$fstype" = "xfs" ]; then
61 fsopt='-K'
62 else
63 echo "unsupported file system $fstype"
64 exit 1
65 fi
66
67 # 00->ff avoid sparse file
68 dd if=/dev/zero bs=1M count=$size | tr '\000' '\377' > persistence.dat
69 sync
70
71 freeloop=$(losetup -f)
72
73 losetup $freeloop persistence.dat
74
75 mkfs -t $fstype $fsopt -L $label $freeloop
76
77 sync
78
79 losetup -d $freeloop
80