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 | .
/tool
/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
97 get_ventoy_version_from_cfg
() {
98 if grep -q 'set.*VENTOY_VERSION=' $1; then
99 grep 'set.*VENTOY_VERSION=' $1 | awk -F'"' '{print $2}'
105 is_disk_contains_ventoy
() {
108 PART1
=$(get_disk_part_name $1 1)
109 PART2
=$(get_disk_part_name $1 2)
111 if [ -e /sys
/class
/block
/${PART2#/dev/}/size
]; then
112 SIZE
=$(cat /sys/class/block/${PART2#/dev/}/size)
117 if ! [ -b $PART1 ]; then
118 vtdebug
"$PART1 not exist"
123 if ! [ -b $PART2 ]; then
124 vtdebug
"$PART2 not exist"
129 PART1_TYPE
=$(dd if=$DISK bs=1 count=1 skip=450 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"')
130 PART2_TYPE
=$(dd if=$DISK bs=1 count=1 skip=466 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"')
132 if [ "$PART1_TYPE" != "EE" ]; then
133 if [ "$PART2_TYPE" != "EF" ]; then
134 vtdebug
"part2 type is $PART2_TYPE not EF"
140 # PART1_TYPE=$(dd if=$DISK bs=1 count=1 skip=450 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"')
141 # if [ "$PART1_TYPE" != "07" ]; then
142 # vtdebug "part1 type is $PART2_TYPE not 07"
147 if [ -e /sys
/class
/block
/${PART1#/dev/}/start
]; then
148 PART1_START
=$(cat /sys/class/block/${PART1#/dev/}/start)
151 if [ "$PART1_START" != "2048" ]; then
152 vtdebug
"part1 start is $PART1_START not 2048"
157 if [ "$VENTOY_SECTOR_NUM" != "$SIZE" ]; then
158 vtdebug
"part2 size is $SIZE not $VENTOY_SECTOR_NUM"
166 get_disk_ventoy_version
() {
168 if ! is_disk_contains_ventoy
$1; then
173 PART2
=$(get_disk_part_name $1 2)
175 if ventoy_is_linux64
; then
176 cmd
=.
/tool
/vtoyfat_64
178 cmd
=.
/tool
/vtoyfat_32
181 ParseVer
=$($cmd $PART2)
182 if [ $?
-eq 0 ]; then
183 vtdebug
"Ventoy version in $PART2 is $ParseVer"
192 format_ventoy_disk_mbr
() {
197 PART1
=$(get_disk_part_name $DISK 1)
198 PART2
=$(get_disk_part_name $DISK 2)
200 sector_num
=$(cat /sys/block/${DISK#/dev/}/size)
202 part1_start_sector
=2048
204 if [ $reserve_mb -gt 0 ]; then
205 reserve_sector_num
=$(expr $reserve_mb \* 2048)
206 part1_end_sector
=$(expr $sector_num - $reserve_sector_num - $VENTOY_SECTOR_NUM - 1)
208 part1_end_sector
=$(expr $sector_num - $VENTOY_SECTOR_NUM - 1)
211 part2_start_sector
=$(expr $part1_end_sector + 1)
212 part2_end_sector
=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1)
214 export part2_start_sector
216 vtdebug
"part1_start_sector=$part1_start_sector part1_end_sector=$part1_end_sector"
217 vtdebug
"part2_start_sector=$part2_start_sector part2_end_sector=$part2_end_sector"
219 if [ -e $PART2 ]; then
225 echo "Create partitions on $DISK by $PARTTOOL in MBR style ..."
227 if [ "$PARTTOOL" = "parted" ]; then
228 vtdebug
"format disk by parted ..."
229 parted
-a none
--script $DISK \
232 mkpart primary ntfs
$part1_start_sector $part1_end_sector \
233 mkpart primary fat16
$part2_start_sector $part2_end_sector \
238 echo -en '\xEF' | dd of
=$DISK conv
=fsync bs
=1 count
=1 seek
=466 > /dev
/null
2>&1
240 vtdebug
"format disk by fdisk ..."
242 fdisk
$DISK >>.
/log.txt
2>&1 <<EOF
266 udevadm trigger
>/dev
/null
2>&1
267 partprobe
>/dev
/null
2>&1
271 echo 'mkfs on disk partitions ...'
272 for i
in 1 2 3 4 5 6 7; do
273 if [ -b $PART2 ]; then
276 echo "wait $PART2 ..."
282 if ! [ -b $PART2 ]; then
283 MajorMinor
=$(sed "s/:/ /" /sys/class/block/${PART2#/dev/}/dev)
284 echo "mknod -m 0660 $PART2 b $MajorMinor ..."
285 mknod
-m 0660 $PART2 b
$MajorMinor
287 if ! [ -b $PART1 ]; then
288 MajorMinor
=$(sed "s/:/ /" /sys/class/block/${PART1#/dev/}/dev)
289 echo "mknod -m 0660 $PART1 b $MajorMinor ..."
290 mknod
-m 0660 $PART1 b
$MajorMinor
294 echo "create efi fat fs $PART2 ..."
295 for i
in 0 1 2 3 4 5 6 7 8 9; do
296 if mkfs.vfat
-F 16 -n VTOYEFI
$PART2; then
307 format_ventoy_disk_gpt
() {
312 PART1
=$(get_disk_part_name $DISK 1)
313 PART2
=$(get_disk_part_name $DISK 2)
315 sector_num
=$(cat /sys/block/${DISK#/dev/}/size)
317 part1_start_sector
=2048
319 if [ $reserve_mb -gt 0 ]; then
320 reserve_sector_num
=$(expr $reserve_mb \* 2048 + 33)
321 part1_end_sector
=$(expr $sector_num - $reserve_sector_num - $VENTOY_SECTOR_NUM - 1)
323 part1_end_sector
=$(expr $sector_num - $VENTOY_SECTOR_NUM - 34)
326 part2_start_sector
=$(expr $part1_end_sector + 1)
327 part2_end_sector
=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1)
329 export part2_start_sector
331 vtdebug
"part1_start_sector=$part1_start_sector part1_end_sector=$part1_end_sector"
332 vtdebug
"part2_start_sector=$part2_start_sector part2_end_sector=$part2_end_sector"
334 if [ -e $PART2 ]; then
340 echo "Create partitions on $DISK by $PARTTOOL in GPT style ..."
342 vtdebug
"format disk by parted ..."
343 parted
-a none
--script $DISK \
346 mkpart Ventoy ntfs
$part1_start_sector $part1_end_sector \
347 mkpart VTOYEFI fat16
$part2_start_sector $part2_end_sector \
354 if ventoy_is_linux64
; then
355 vtoygpt
=.
/tool
/vtoygpt_64
357 vtoygpt
=.
/tool
/vtoygpt_32
363 udevadm trigger
>/dev
/null
2>&1
364 partprobe
>/dev
/null
2>&1
368 echo 'mkfs on disk partitions ...'
369 for i
in 1 2 3 4 5 6 7; do
370 if [ -b $PART2 ]; then
373 echo "wait $PART2 ..."
379 if ! [ -b $PART2 ]; then
380 MajorMinor
=$(sed "s/:/ /" /sys/class/block/${PART2#/dev/}/dev)
381 echo "mknod -m 0660 $PART2 b $MajorMinor ..."
382 mknod
-m 0660 $PART2 b
$MajorMinor
384 if ! [ -b $PART1 ]; then
385 MajorMinor
=$(sed "s/:/ /" /sys/class/block/${PART1#/dev/}/dev)
386 echo "mknod -m 0660 $PART1 b $MajorMinor ..."
387 mknod
-m 0660 $PART1 b
$MajorMinor
391 echo "create efi fat fs $PART2 ..."
392 for i
in 0 1 2 3 4 5 6 7 8 9; do
393 if mkfs.vfat
-F 16 -n VTOYEFI
$PART2; then