4 VENTOY_PART_SIZE
=33554432
7 VENTOY_SECTOR_NUM
=65536
18 if uname
-a | egrep -q 'x86_64|amd64'; then
27 echo -e "\033[32m$*\033[0m"
31 echo -e "\033[33m$*\033[0m"
36 echo -e "\033[31m$*\033[0m"
40 echo "$*" >> .
/log.txt
43 check_tool_work_ok
() {
45 if ventoy_is_linux64
; then
46 vtdebug
"This is linux 64"
47 mkexfatfs
=mkexfatfs_64
50 vtdebug
"This is linux 32"
51 mkexfatfs
=mkexfatfs_32
55 if echo 1 | hexdump > /dev
/null
; then
56 vtdebug
"hexdump test ok ..."
58 vtdebug
"hexdump test fail ..."
63 if .
/tool
/$mkexfatfs -V > /dev
/null
; then
64 vtdebug
"$mkexfatfs test ok ..."
66 vtdebug
"$mkexfatfs test fail ..."
71 if .
/tool
/$vtoyfat -T; then
72 vtdebug
"$vtoyfat test ok ..."
74 vtdebug
"$vtoyfat test fail ..."
79 vtdebug
"tool check success ..."
84 get_disk_part_name
() {
87 if echo $DISK | grep -q "/dev/loop"; then
89 elif echo $DISK | grep -q "/dev/nvme[0-9][0-9]*n[0-9]"; then
91 elif echo $DISK | grep -q "/dev/mmcblk[0-9]"; then
99 get_ventoy_version_from_cfg
() {
100 if grep -q 'set.*VENTOY_VERSION=' $1; then
101 grep 'set.*VENTOY_VERSION=' $1 | awk -F'"' '{print $2}'
107 is_disk_contains_ventoy
() {
110 PART1
=$(get_disk_part_name $1 1)
111 PART2
=$(get_disk_part_name $1 2)
113 if [ -e /sys
/class
/block
/${PART2#/dev/}/size
]; then
114 SIZE
=$(cat /sys/class/block/${PART2#/dev/}/size)
119 if ! [ -b $PART1 ]; then
120 vtdebug
"$PART1 not exist"
125 if ! [ -b $PART2 ]; then
126 vtdebug
"$PART2 not exist"
131 PART1_TYPE
=$(dd if=$DISK bs=1 count=1 skip=450 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"')
132 PART2_TYPE
=$(dd if=$DISK bs=1 count=1 skip=466 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"')
134 # if [ "$PART1_TYPE" != "EE" ]; then
135 # if [ "$PART2_TYPE" != "EF" ]; then
136 # vtdebug "part2 type is $PART2_TYPE not EF"
142 # PART1_TYPE=$(dd if=$DISK bs=1 count=1 skip=450 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"')
143 # if [ "$PART1_TYPE" != "07" ]; then
144 # vtdebug "part1 type is $PART2_TYPE not 07"
149 if [ -e /sys
/class
/block
/${PART1#/dev/}/start
]; then
150 PART1_START
=$(cat /sys/class/block/${PART1#/dev/}/start)
153 if [ "$PART1_START" != "2048" ]; then
154 vtdebug
"part1 start is $PART1_START not 2048"
159 if [ "$VENTOY_SECTOR_NUM" != "$SIZE" ]; then
160 vtdebug
"part2 size is $SIZE not $VENTOY_SECTOR_NUM"
168 get_disk_ventoy_version
() {
170 if ! is_disk_contains_ventoy
$1; then
175 PART2
=$(get_disk_part_name $1 2)
177 if ventoy_is_linux64
; then
178 cmd
=.
/tool
/vtoyfat_64
180 cmd
=.
/tool
/vtoyfat_32
183 ParseVer
=$($cmd $PART2)
184 if [ $?
-eq 0 ]; then
185 vtdebug
"Ventoy version in $PART2 is $ParseVer"
194 format_ventoy_disk_mbr
() {
199 PART1
=$(get_disk_part_name $DISK 1)
200 PART2
=$(get_disk_part_name $DISK 2)
202 sector_num
=$(cat /sys/block/${DISK#/dev/}/size)
204 part1_start_sector
=2048
206 if [ $reserve_mb -gt 0 ]; then
207 reserve_sector_num
=$(expr $reserve_mb \* 2048)
208 part1_end_sector
=$(expr $sector_num - $reserve_sector_num - $VENTOY_SECTOR_NUM - 1)
210 part1_end_sector
=$(expr $sector_num - $VENTOY_SECTOR_NUM - 1)
213 part2_start_sector
=$(expr $part1_end_sector + 1)
214 part2_end_sector
=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1)
216 export part2_start_sector
218 vtdebug
"part1_start_sector=$part1_start_sector part1_end_sector=$part1_end_sector"
219 vtdebug
"part2_start_sector=$part2_start_sector part2_end_sector=$part2_end_sector"
221 if [ -e $PART2 ]; then
227 echo "Create partitions on $DISK by $PARTTOOL in MBR style ..."
229 if [ "$PARTTOOL" = "parted" ]; then
230 vtdebug
"format disk by parted ..."
231 parted
-a none
--script $DISK \
234 mkpart primary ntfs
$part1_start_sector $part1_end_sector \
235 mkpart primary fat16
$part2_start_sector $part2_end_sector \
240 echo -en '\xEF' | dd of
=$DISK conv
=fsync bs
=1 count
=1 seek
=466 > /dev
/null
2>&1
242 vtdebug
"format disk by fdisk ..."
244 fdisk
$DISK >>.
/log.txt
2>&1 <<EOF
268 udevadm trigger
>/dev
/null
2>&1
269 partprobe
>/dev
/null
2>&1
273 echo 'mkfs on disk partitions ...'
274 for i
in 1 2 3 4 5 6 7; do
275 if [ -b $PART2 ]; then
278 echo "wait $PART2 ..."
284 if ! [ -b $PART2 ]; then
285 MajorMinor
=$(sed "s/:/ /" /sys/class/block/${PART2#/dev/}/dev)
286 echo "mknod -m 0660 $PART2 b $MajorMinor ..."
287 mknod
-m 0660 $PART2 b
$MajorMinor
289 if ! [ -b $PART1 ]; then
290 MajorMinor
=$(sed "s/:/ /" /sys/class/block/${PART1#/dev/}/dev)
291 echo "mknod -m 0660 $PART1 b $MajorMinor ..."
292 mknod
-m 0660 $PART1 b
$MajorMinor
296 echo "create efi fat fs $PART2 ..."
297 for i
in 0 1 2 3 4 5 6 7 8 9; do
298 if mkfs.vfat
-F 16 -n VTOYEFI
$PART2; then
309 format_ventoy_disk_gpt
() {
314 PART1
=$(get_disk_part_name $DISK 1)
315 PART2
=$(get_disk_part_name $DISK 2)
317 sector_num
=$(cat /sys/block/${DISK#/dev/}/size)
319 part1_start_sector
=2048
321 if [ $reserve_mb -gt 0 ]; then
322 reserve_sector_num
=$(expr $reserve_mb \* 2048 + 33)
323 part1_end_sector
=$(expr $sector_num - $reserve_sector_num - $VENTOY_SECTOR_NUM - 1)
325 part1_end_sector
=$(expr $sector_num - $VENTOY_SECTOR_NUM - 34)
328 part2_start_sector
=$(expr $part1_end_sector + 1)
329 part2_end_sector
=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1)
331 export part2_start_sector
333 vtdebug
"part1_start_sector=$part1_start_sector part1_end_sector=$part1_end_sector"
334 vtdebug
"part2_start_sector=$part2_start_sector part2_end_sector=$part2_end_sector"
336 if [ -e $PART2 ]; then
342 echo "Create partitions on $DISK by $PARTTOOL in GPT style ..."
344 vtdebug
"format disk by parted ..."
345 parted
-a none
--script $DISK \
348 mkpart Ventoy ntfs
$part1_start_sector $part1_end_sector \
349 mkpart VTOYEFI fat16
$part2_start_sector $part2_end_sector \
356 if ventoy_is_linux64
; then
357 vtoygpt
=.
/tool
/vtoygpt_64
359 vtoygpt
=.
/tool
/vtoygpt_32
365 udevadm trigger
>/dev
/null
2>&1
366 partprobe
>/dev
/null
2>&1
370 echo 'mkfs on disk partitions ...'
371 for i
in 1 2 3 4 5 6 7; do
372 if [ -b $PART2 ]; then
375 echo "wait $PART2 ..."
381 if ! [ -b $PART2 ]; then
382 MajorMinor
=$(sed "s/:/ /" /sys/class/block/${PART2#/dev/}/dev)
383 echo "mknod -m 0660 $PART2 b $MajorMinor ..."
384 mknod
-m 0660 $PART2 b
$MajorMinor
386 if ! [ -b $PART1 ]; then
387 MajorMinor
=$(sed "s/:/ /" /sys/class/block/${PART1#/dev/}/dev)
388 echo "mknod -m 0660 $PART1 b $MajorMinor ..."
389 mknod
-m 0660 $PART1 b
$MajorMinor
393 echo "create efi fat fs $PART2 ..."
394 for i
in 0 1 2 3 4 5 6 7 8 9; do
395 if mkfs.vfat
-F 16 -n VTOYEFI
$PART2; then