]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - INSTALL/ExtendPersistentImg.sh
Fix an issue when install some Lite Windows version with special file name.
[Ventoy.git] / INSTALL / ExtendPersistentImg.sh
1 #!/bin/sh
2
3 print_usage() {
4 echo 'Usage: ExtendPersistentImg.sh file size'
5 echo ' file persistent dat file'
6 echo ' size extend size in MB'
7 echo 'Example:'
8 echo ' sh ExtendPersistentImg.sh ubuntu.dat 2048'
9 echo ''
10 }
11
12 if [ -z "$1" -o "$1" = "-h" ]; then
13 print_usage
14 exit 1
15 fi
16
17 if [ -z "$2" ]; then
18 print_usage
19 exit 1
20 fi
21
22 file=$1
23 size=$2
24
25 if [ ! -f "$file" ]; then
26 echo "$file not exist."
27 exit 1
28 fi
29
30 if echo $size | grep -q "[^0-9]"; then
31 print_usage
32 exit 1
33 fi
34
35 fsize=$(stat -c '%s' $file)
36
37 fsmod=$(expr $fsize % 1024)
38 if [ $fsmod -ne 0 ]; then
39 echo "File size of $file is not aligned by 1MB, please check."
40 exit 1
41 fi
42
43
44 fsMB=$(expr $fsize / 1024 / 1024)
45 total=$(expr $fsMB + $size)
46
47 magic=$(hexdump -n3 -e '3/1 "%02X"' $file)
48 if [ "$magic" = "584653" ]; then
49 if which xfs_growfs >/dev/null 2>&1; then
50 cmd=xfs_growfs
51 else
52 echo 'xfs_growfs not found, please install xfsprogs first'
53 exit 1
54 fi
55 else
56 if which resize2fs >/dev/null 2>&1; then
57 cmd=resize2fs
58 else
59 echo 'resize2fs not found, please install e2fsprogs first'
60 exit 1
61 fi
62 fi
63
64
65 echo "Extend dat file... (current is ${fsMB}MB, append ${size}MB, total ${total}MB)"
66 dd if=/dev/zero bs=1M count=$size status=none >> "$file"
67 sync
68
69 freeloop=$(losetup -f)
70 losetup $freeloop "$file"
71
72 if [ "$cmd" = "resize2fs" ]; then
73 echo "Extend ext filesystem by resize2fs ..."
74 echo "resize2fs $freeloop ${total}M"
75 e2fsck -f $freeloop
76 resize2fs $freeloop ${total}M
77 ret=$?
78 else
79 echo "Extend xfs filesystem by xfs_growfs ..."
80
81 tmpdir=$(mktemp -d)
82 mount $freeloop $tmpdir
83 xfs_growfs $freeloop
84 ret=$?
85 umount $tmpdir && rm -rf $tmpdir
86 fi
87
88 losetup -d $freeloop
89
90 echo ""
91 if [ $ret -eq 0 ]; then
92 echo "======= SUCCESS ========="
93 else
94 echo "======= FAILED ========="
95 fi
96 echo ""
97