X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/9ecbff9ce6736a73cb020fe4860bd2d47f3ec968..0faba673a511e6988244df5b7f062514c248f79c:/INSTALL/tool/VentoyWorker.sh diff --git a/INSTALL/tool/VentoyWorker.sh b/INSTALL/tool/VentoyWorker.sh index 099b2d5..ac61997 100644 --- a/INSTALL/tool/VentoyWorker.sh +++ b/INSTALL/tool/VentoyWorker.sh @@ -3,18 +3,18 @@ . ./tool/ventoy_lib.sh print_usage() { + echo 'Usage: Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX' echo ' CMD:' echo ' -i install ventoy to sdX (fail if disk already installed with ventoy)' - echo ' -u update ventoy in sdX' echo ' -I force install ventoy to sdX (no matter installed or not)' + echo ' -u update ventoy in sdX' echo '' echo ' OPTION: (optional)' echo ' -r SIZE_MB preserve some space at the bottom of the disk (only for install)' echo ' -s enable secure boot support (default is disabled)' echo ' -g use GPT partition style, default is MBR (only for install)' echo '' - } RESERVE_SIZE_MB=0 @@ -34,6 +34,11 @@ while [ -n "$1" ]; do RESERVE_SPACE="YES" shift RESERVE_SIZE_MB=$1 + elif [ "$1" = "-V" ] || [ "$1" = "--version" ]; then + exit 0 + elif [ "$1" == "-h" ] || [ "$1" = "--help" ]; then + print_usage + exit 0 else if ! [ -b "$1" ]; then vterr "$1 is NOT a valid device" @@ -117,7 +122,7 @@ if [ "$MODE" = "install" ]; then if parted -v > /dev/null 2>&1; then PARTTOOL='parted' else - vterr "parted is not found in the sysstem, Ventoy can't create new partition." + vterr "parted is not found in the system, Ventoy can't create new partition." exit 1 fi else @@ -126,7 +131,7 @@ if [ "$MODE" = "install" ]; then elif fdisk -v >/dev/null 2>&1; then PARTTOOL='fdisk' else - vterr "Both parted and fdisk are not found in the sysstem, Ventoy can't create new partition." + vterr "Both parted and fdisk are not found in the system, Ventoy can't create new partition." exit 1 fi fi @@ -145,7 +150,7 @@ if [ "$MODE" = "install" ]; then disk_sector_num=$(cat /sys/block/${DISK#/dev/}/size) disk_size_gb=$(expr $disk_sector_num / 2097152) - if [ $disk_sector_num -gt 4294967296 ]; then + if [ $disk_sector_num -gt 4294967296 ] && [ -z "$VTGPT" ]; then vterr "$DISK is over 2TB size, MBR will not work on it." exit 1 fi @@ -181,7 +186,7 @@ if [ "$MODE" = "install" ]; then vtwarn "All the data on the disk $DISK will be lost!!!" echo "" - read -p 'Continue? (y/n)' Answer + read -p 'Continue? (y/n) ' Answer if [ "$Answer" != "y" ]; then if [ "$Answer" != "Y" ]; then exit 0 @@ -190,7 +195,7 @@ if [ "$MODE" = "install" ]; then echo "" vtwarn "All the data on the disk $DISK will be lost!!!" - read -p 'Double-check. Continue? (y/n)' Answer + read -p 'Double-check. Continue? (y/n) ' Answer if [ "$Answer" != "y" ]; then if [ "$Answer" != "Y" ]; then exit 0 @@ -223,7 +228,9 @@ if [ "$MODE" = "install" ]; then cmd=./tool/mkexfatfs_32 fi - chmod +x ./tool/* + if [ -d ./tool/ ]; then + chmod +x -R ./tool/ + fi # DiskSize > 32GB Cluster Size use 128KB # DiskSize < 32GB Cluster Size use 32KB @@ -235,8 +242,6 @@ if [ "$MODE" = "install" ]; then $cmd -n ventoy -s $cluster_sectors ${DISK}1 - chmod +x ./tool/vtoy_gen_uuid - vtinfo "writing data to disk ..." dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=446 @@ -327,22 +332,28 @@ else SHORT_PART2=${PART2#/dev/} part2_start=$(cat /sys/class/block/$SHORT_PART2/start) - dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=440 + PART1_TYPE=$(dd if=$DISK bs=1 count=1 skip=450 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"') - PART1_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=446 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"') - PART2_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=462 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"') + if [ "$PART1_TYPE" = "EE" ]; then + vtdebug "This is GPT partition style ..." + ./tool/xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2014 seek=34 + echo -en '\x23' | dd of=$DISK conv=fsync bs=1 count=1 seek=17908 status=none + else + vtdebug "This is MBR partition style ..." + dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=440 - vtdebug "PART1_ACTIVE=$PART1_ACTIVE PART2_ACTIVE=$PART2_ACTIVE" - if [ "$PART1_ACTIVE" = "00" ] && [ "$PART2_ACTIVE" = "80" ]; then - vtdebug "change 1st partition active, 2nd partition inactive ..." - echo -en '\x80' | dd of=$DISK conv=fsync bs=1 count=1 seek=446 status=none - echo -en '\x00' | dd of=$DISK conv=fsync bs=1 count=1 seek=462 status=none + PART1_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=446 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"') + PART2_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=462 status=none | ./tool/hexdump -n1 -e '1/1 "%02X"') + + vtdebug "PART1_ACTIVE=$PART1_ACTIVE PART2_ACTIVE=$PART2_ACTIVE" + if [ "$PART1_ACTIVE" = "00" ] && [ "$PART2_ACTIVE" = "80" ]; then + vtdebug "change 1st partition active, 2nd partition inactive ..." + echo -en '\x80' | dd of=$DISK conv=fsync bs=1 count=1 seek=446 status=none + echo -en '\x00' | dd of=$DISK conv=fsync bs=1 count=1 seek=462 status=none + fi + ./tool/xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1 fi - - ./tool/xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1 - - ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start sync