X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/82977d9b8a3328c2532c8e50fb82b36b95c22333..f4987fd7f489d1f3a41097ce10f97d2cdc978b3d:/INSTALL/tool/ventoy_lib.sh diff --git a/INSTALL/tool/ventoy_lib.sh b/INSTALL/tool/ventoy_lib.sh index c108197..04eea64 100644 --- a/INSTALL/tool/ventoy_lib.sh +++ b/INSTALL/tool/ventoy_lib.sh @@ -68,10 +68,10 @@ check_tool_work_ok() { return fi - if vtoyfat -T; then - vtdebug "vtoyfat test ok ..." + if vtoycli fat -T; then + vtdebug "vtoycli fat test ok ..." else - vtdebug "vtoyfat test fail ..." + vtdebug "vtoycli fat test fail ..." ventoy_false return fi @@ -97,6 +97,14 @@ get_disk_part_name() { fi } +check_umount_disk() { + DiskOrPart="$1" + grep "^${DiskOrPart}" /proc/mounts | while read mtline; do + mtpnt=$(echo $mtline | awk '{print $2}') + vtdebug "Trying to umount $mtpnt ..." + umount $mtpnt >/dev/null 2>&1 + done +} get_ventoy_version_from_cfg() { if grep -q 'set.*VENTOY_VERSION=' $1; then @@ -175,7 +183,7 @@ check_disk_secure_boot() { PART2=$(get_disk_part_name $1 2) - vtoyfat -s $PART2 + vtoycli fat -s $PART2 } get_disk_ventoy_version() { @@ -187,7 +195,7 @@ get_disk_ventoy_version() { PART2=$(get_disk_part_name $1 2) - ParseVer=$(vtoyfat $PART2) + ParseVer=$(vtoycli fat $PART2) if [ $? -eq 0 ]; then vtdebug "Ventoy version in $PART2 is $ParseVer" echo $ParseVer @@ -218,6 +226,14 @@ format_ventoy_disk_mbr() { fi part2_start_sector=$(expr $part1_end_sector + 1) + + modsector=$(expr $part2_start_sector % 8) + if [ $modsector -gt 0 ]; then + vtdebug "modsector:$modsector need to be aligned with 4KB" + part1_end_sector=$(expr $part1_end_sector - $modsector) + part2_start_sector=$(expr $part1_end_sector + 1) + fi + part2_end_sector=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1) export part2_start_sector @@ -225,6 +241,11 @@ format_ventoy_disk_mbr() { vtdebug "part1_start_sector=$part1_start_sector part1_end_sector=$part1_end_sector" vtdebug "part2_start_sector=$part2_start_sector part2_end_sector=$part2_end_sector" + if [ -e $PART1 ]; then + echo "delete $PART1" + rm -f $PART1 + fi + if [ -e $PART2 ]; then echo "delete $PART2" rm -f $PART2 @@ -277,32 +298,41 @@ EOF sleep 3 echo "Done" - echo 'mkfs on disk partitions ...' - for i in 1 2 3 4 5 6 7; do - if [ -b $PART2 ]; then + + echo 'Wait for partitions ...' + for i in 0 1 2 3 4 5 6 7 8 9; do + if [ -b $PART1 -a -b $PART2 ]; then break else - echo "wait $PART2 ..." + echo "Wait for $PART1/$PART2 ..." sleep 1 fi done - + if ! [ -b $PART1 ]; then + MajorMinor=$(sed "s/:/ /" /sys/class/block/${PART1#/dev/}/dev) + echo "mknod -m 0660 $PART1 b $MajorMinor ..." + mknod -m 0660 $PART1 b $MajorMinor + fi + if ! [ -b $PART2 ]; then MajorMinor=$(sed "s/:/ /" /sys/class/block/${PART2#/dev/}/dev) echo "mknod -m 0660 $PART2 b $MajorMinor ..." - mknod -m 0660 $PART2 b $MajorMinor - - if ! [ -b $PART1 ]; then - MajorMinor=$(sed "s/:/ /" /sys/class/block/${PART1#/dev/}/dev) - echo "mknod -m 0660 $PART1 b $MajorMinor ..." - mknod -m 0660 $PART1 b $MajorMinor - fi + mknod -m 0660 $PART2 b $MajorMinor + fi + + if [ -b $PART1 -a -b $PART2 ]; then + echo "partition exist OK" + else + echo "[FAIL] $PART1/$PART2 does not exist" + exit 1 fi echo "create efi fat fs $PART2 ..." for i in 0 1 2 3 4 5 6 7 8 9; do - if mkfs.vfat -F 16 -n VTOYEFI $PART2; then + check_umount_disk "$PART2" + + if mkfs.vfat -F 16 -n VTOYEFI -s 1 $PART2; then echo 'success' break else @@ -333,6 +363,14 @@ format_ventoy_disk_gpt() { fi part2_start_sector=$(expr $part1_end_sector + 1) + + modsector=$(expr $part2_start_sector % 8) + if [ $modsector -gt 0 ]; then + vtdebug "modsector:$modsector need to be aligned with 4KB" + part1_end_sector=$(expr $part1_end_sector - $modsector) + part2_start_sector=$(expr $part1_end_sector + 1) + fi + part2_end_sector=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1) export part2_start_sector @@ -340,6 +378,11 @@ format_ventoy_disk_gpt() { vtdebug "part1_start_sector=$part1_start_sector part1_end_sector=$part1_end_sector" vtdebug "part2_start_sector=$part2_start_sector part2_end_sector=$part2_end_sector" + if [ -e $PART1 ]; then + echo "delete $PART1" + rm -f $PART1 + fi + if [ -e $PART2 ]; then echo "delete $PART2" rm -f $PART2 @@ -365,7 +408,7 @@ format_ventoy_disk_gpt() { sync - vtoygpt -f $DISK + vtoycli gpt -f $DISK sync udevadm trigger --name-match=$DISK >/dev/null 2>&1 @@ -373,31 +416,40 @@ format_ventoy_disk_gpt() { sleep 3 echo "Done" - echo 'mkfs on disk partitions ...' - for i in 1 2 3 4 5 6 7; do - if [ -b $PART2 ]; then + echo 'Wait for partitions ...' + for i in 0 1 2 3 4 5 6 7 8 9; do + if [ -b $PART1 -a -b $PART2 ]; then break else - echo "wait $PART2 ..." + echo "Wait for $PART1/$PART2 ..." sleep 1 fi done - + if ! [ -b $PART1 ]; then + MajorMinor=$(sed "s/:/ /" /sys/class/block/${PART1#/dev/}/dev) + echo "mknod -m 0660 $PART1 b $MajorMinor ..." + mknod -m 0660 $PART1 b $MajorMinor + fi + if ! [ -b $PART2 ]; then MajorMinor=$(sed "s/:/ /" /sys/class/block/${PART2#/dev/}/dev) echo "mknod -m 0660 $PART2 b $MajorMinor ..." - mknod -m 0660 $PART2 b $MajorMinor - - if ! [ -b $PART1 ]; then - MajorMinor=$(sed "s/:/ /" /sys/class/block/${PART1#/dev/}/dev) - echo "mknod -m 0660 $PART1 b $MajorMinor ..." - mknod -m 0660 $PART1 b $MajorMinor - fi + mknod -m 0660 $PART2 b $MajorMinor + fi + + if [ -b $PART1 -a -b $PART2 ]; then + echo "partition exist OK" + else + echo "[FAIL] $PART1/$PART2 does not exist" + exit 1 fi echo "create efi fat fs $PART2 ..." + for i in 0 1 2 3 4 5 6 7 8 9; do + check_umount_disk "$PART2" + if mkfs.vfat -F 16 -n VTOYEFI $PART2; then echo 'success' break