]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - INSTALL/tool/VentoyWorker.sh
1.1.07 release
[Ventoy.git] / INSTALL / tool / VentoyWorker.sh
index cdb1dbb87f4f79c1033eac96e27ed2773c7f1717..7844b922994a334a3922fb70b9c45ac61acd2fdf 100644 (file)
@@ -3,17 +3,17 @@
 . ./tool/ventoy_lib.sh
 
 print_usage() {
 . ./tool/ventoy_lib.sh
 
 print_usage() {
-    
+
     echo 'Usage:  Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX'
     echo '  CMD:'
     echo '   -i  install Ventoy to sdX (fails if disk already installed with Ventoy)'
     echo 'Usage:  Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX'
     echo '  CMD:'
     echo '   -i  install Ventoy to sdX (fails if disk already installed with Ventoy)'
-    echo '   -I  force install Ventoy to sdX (no matter installed or not)'
+    echo '   -I  force install Ventoy to sdX (no matter if installed or not)'
     echo '   -u  update Ventoy in sdX'
     echo '   -l  list Ventoy information in sdX'
     echo ''
     echo '  OPTION: (optional)'
     echo '   -r SIZE_MB  preserve some space at the bottom of the disk (only for install)'
     echo '   -u  update Ventoy in sdX'
     echo '   -l  list Ventoy information in sdX'
     echo ''
     echo '  OPTION: (optional)'
     echo '   -r SIZE_MB  preserve some space at the bottom of the disk (only for install)'
-    echo '   -s/-S       enable/disable secure boot support (default is disabled)'
+    echo '   -s/-S       enable/disable secure boot support (default is enabled)'
     echo '   -g          use GPT partition style, default is MBR (only for install)'
     echo '   -L          Label of the 1st exfat partition (default is Ventoy)'
     echo '   -n          try non-destructive installation (only for install)'
     echo '   -g          use GPT partition style, default is MBR (only for install)'
     echo '   -L          Label of the 1st exfat partition (default is Ventoy)'
     echo '   -n          try non-destructive installation (only for install)'
@@ -21,6 +21,7 @@ print_usage() {
 }
 
 
 }
 
 
+SECUREBOOT="YES"
 VTNEW_LABEL='Ventoy'
 RESERVE_SIZE_MB=0
 while [ -n "$1" ]; do
 VTNEW_LABEL='Ventoy'
 RESERVE_SIZE_MB=0
 while [ -n "$1" ]; do
@@ -67,7 +68,7 @@ while [ -n "$1" ]; do
             DISK=$(readlink -e -n "$DISK")
         fi
     fi
             DISK=$(readlink -e -n "$DISK")
         fi
     fi
-    
+
     shift
 done
 
     shift
 done
 
@@ -113,19 +114,19 @@ if [ "$MODE" = "list" ]; then
     version=$(get_disk_ventoy_version $DISK)
     if [ $? -eq 0 ]; then
         echo "Ventoy Version in Disk: $version"
     version=$(get_disk_ventoy_version $DISK)
     if [ $? -eq 0 ]; then
         echo "Ventoy Version in Disk: $version"
-        
+
         vtPart1Type=$(dd if=$DISK bs=1 count=1 skip=450 status=none | hexdump -n1 -e  '1/1 "%02X"')
         vtPart1Type=$(dd if=$DISK bs=1 count=1 skip=450 status=none | hexdump -n1 -e  '1/1 "%02X"')
-        if [ "$vtPart1Type" = "EE" ]; then            
+        if [ "$vtPart1Type" = "EE" ]; then
             echo "Disk Partition Style  : GPT"
         else
             echo "Disk Partition Style  : MBR"
         fi
             echo "Disk Partition Style  : GPT"
         else
             echo "Disk Partition Style  : MBR"
         fi
-        
+
         if check_disk_secure_boot $DISK; then
             echo "Secure Boot Support   : YES"
         else
             echo "Secure Boot Support   : NO"
         if check_disk_secure_boot $DISK; then
             echo "Secure Boot Support   : YES"
         else
             echo "Secure Boot Support   : NO"
-        fi        
+        fi
     else
         echo "Ventoy Version: NA"
     fi
     else
         echo "Ventoy Version: NA"
     fi
@@ -142,14 +143,14 @@ if grep "$DISK" /proc/mounts; then
 fi
 
 #check swap partition
 fi
 
 #check swap partition
-if swapon --help 2>&1 | grep -q '^ \-s,'; then
+if swapon --help 2>&1 | grep -q '^ -s,'; then
     if swapon -s | grep -q "^${DISK}[0-9]"; then
         vterr "$DISK is used as swap, please swapoff it first!"
         exit 1
     fi
 fi
 
     if swapon -s | grep -q "^${DISK}[0-9]"; then
         vterr "$DISK is used as swap, please swapoff it first!"
         exit 1
     fi
 fi
 
-#check access 
+#check access
 if dd if="$DISK" of=/dev/null bs=1 count=1 >/dev/null 2>&1; then
     vtdebug "root permission check ok ..."
 else
 if dd if="$DISK" of=/dev/null bs=1 count=1 >/dev/null 2>&1; then
     vtdebug "root permission check ok ..."
 else
@@ -165,7 +166,7 @@ if [ -d ./tmp_mnt ]; then
     umount ./tmp_mnt >/dev/null 2>&1
     rm -rf ./tmp_mnt
     if [ -d ./tmp_mnt ]; then
     umount ./tmp_mnt >/dev/null 2>&1
     rm -rf ./tmp_mnt
     if [ -d ./tmp_mnt ]; then
-        vterr "tmp_mnt directory exits, please delete it first."
+        vterr "tmp_mnt directory exists, please delete it first."
         exit 1
     fi
 fi
         exit 1
     fi
 fi
@@ -184,15 +185,28 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
         fi
     else
         if parted -v > /dev/null 2>&1; then
         fi
     else
         if parted -v > /dev/null 2>&1; then
-            PARTTOOL='parted'
+            PARTTOOL='parted'            
         elif fdisk -v >/dev/null 2>&1; then
         elif fdisk -v >/dev/null 2>&1; then
-            PARTTOOL='fdisk'
+            PARTTOOL='fdisk'            
         else
             vterr "Both parted and fdisk are not found in the system, Ventoy can't create new partitions."
             exit 1
         fi
     fi
     
         else
             vterr "Both parted and fdisk are not found in the system, Ventoy can't create new partitions."
             exit 1
         fi
     fi
     
+    if [ "$PARTTOOL" = "parted" ]; then
+        if parted -s $DISK p 2>&1 | grep -i -q 'sector size.*4096.*4096'; then
+            vterr "Currently Ventoy does not support 4K native device."
+            exit 1
+        fi
+    else
+        if fdisk -l $DISK | grep -i -q 'sector size.*4096.*4096'; then
+            vterr "Currently Ventoy does not support 4K native device."
+            exit 1
+        fi
+    fi
+    
+
     version=$(get_disk_ventoy_version $DISK)
     if [ $? -eq 0 ]; then
         if [ -z "$FORCE" ]; then
     version=$(get_disk_ventoy_version $DISK)
     if [ $? -eq 0 ]; then
         if [ -z "$FORCE" ]; then
@@ -203,7 +217,7 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
             exit 1
         fi
     fi
             exit 1
         fi
     fi
-    
+
     disk_sector_num=$(cat /sys/block/${DISK#/dev/}/size)
     disk_size_gb=$(expr $disk_sector_num / 2097152)
 
     disk_sector_num=$(cat /sys/block/${DISK#/dev/}/size)
     disk_size_gb=$(expr $disk_sector_num / 2097152)
 
@@ -215,7 +229,7 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
     if [ -n "$RESERVE_SPACE" ]; then
         sum_size_mb=$(expr $RESERVE_SIZE_MB + $VENTOY_PART_SIZE_MB)
         reserve_sector_num=$(expr $sum_size_mb \* 2048)
     if [ -n "$RESERVE_SPACE" ]; then
         sum_size_mb=$(expr $RESERVE_SIZE_MB + $VENTOY_PART_SIZE_MB)
         reserve_sector_num=$(expr $sum_size_mb \* 2048)
-        
+
         if [ $disk_sector_num -le $reserve_sector_num ]; then
             vterr "Can't reserve $RESERVE_SIZE_MB MB space from $DISK"
             exit 1
         if [ $disk_sector_num -le $reserve_sector_num ]; then
             vterr "Can't reserve $RESERVE_SIZE_MB MB space from $DISK"
             exit 1
@@ -225,12 +239,12 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
     #Print disk info
     echo "Disk : $DISK"
     parted -s $DISK p 2>&1 | grep Model
     #Print disk info
     echo "Disk : $DISK"
     parted -s $DISK p 2>&1 | grep Model
-    echo "Size : $disk_size_gb GB"    
+    echo "Size : $disk_size_gb GB"
     if [ -n "$VTGPT" ]; then
         echo "Style: GPT"
     else
         echo "Style: MBR"
     if [ -n "$VTGPT" ]; then
         echo "Style: GPT"
     else
         echo "Style: MBR"
-    fi    
+    fi
     echo ''
 
     if [ -n "$RESERVE_SPACE" ]; then
     echo ''
 
     if [ -n "$RESERVE_SPACE" ]; then
@@ -259,7 +273,7 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
         fi
     fi
 
         fi
     fi
 
-    if [ $disk_sector_num -le $VENTOY_SECTOR_NUM ]; then  
+    if [ $disk_sector_num -le $VENTOY_SECTOR_NUM ]; then
         vterr "No enough space in disk $DISK"
         exit 1
     fi
         vterr "No enough space in disk $DISK"
         exit 1
     fi
@@ -290,8 +304,8 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
         cluster_sectors=64
     fi
 
         cluster_sectors=64
     fi
 
-    PART1=$(get_disk_part_name $DISK 1)  
-    PART2=$(get_disk_part_name $DISK 2)  
+    PART1=$(get_disk_part_name $DISK 1)
+    PART2=$(get_disk_part_name $DISK 2)
 
     #clean part2
     dd status=none conv=fsync if=/dev/zero of=$DISK bs=512 count=32 seek=$part2_start_sector
 
     #clean part2
     dd status=none conv=fsync if=/dev/zero of=$DISK bs=512 count=32 seek=$part2_start_sector
@@ -315,11 +329,11 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
         vterr "${PART1} NOT exist"
     fi
 
         vterr "${PART1} NOT exist"
     fi
 
-    vtinfo "writing data to disk ..."    
+    vtinfo "writing data to disk ..."
     dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=446
     dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=446
-    
+
     if [ -n "$VTGPT" ]; then
     if [ -n "$VTGPT" ]; then
-        echo -en '\x22' | dd status=none of=$DISK conv=fsync bs=1 count=1 seek=92        
+        echo -en '\x22' | dd status=none of=$DISK conv=fsync bs=1 count=1 seek=92
         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
         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
@@ -328,23 +342,24 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
     
     # check and umount
     check_umount_disk "$DISK"
     
     # check and umount
     check_umount_disk "$DISK"
-    
+
     xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start_sector
     xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start_sector
-    
+
     #test UUID
     testUUIDStr=$(vtoy_gen_uuid | hexdump -C)
     vtdebug "test uuid: $testUUIDStr"
     #test UUID
     testUUIDStr=$(vtoy_gen_uuid | hexdump -C)
     vtdebug "test uuid: $testUUIDStr"
-    
+
     #disk uuid
     vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} seek=384 bs=1 count=16
     #disk uuid
     vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} seek=384 bs=1 count=16
-    
+
     #disk signature
     vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} skip=12 seek=440 bs=1 count=4
 
     vtinfo "sync data ..."
     sync
     #disk signature
     vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} skip=12 seek=440 bs=1 count=4
 
     vtinfo "sync data ..."
     sync
-    
+
     vtinfo "esp partition processing ..."
     vtinfo "esp partition processing ..."
+
     if [ "$SECUREBOOT" != "YES" ]; then 
         sleep 2
         check_umount_disk "$DISK"  
     if [ "$SECUREBOOT" != "YES" ]; then 
         sleep 2
         check_umount_disk "$DISK"  
@@ -432,7 +447,7 @@ elif [ "$MODE" = "install" -a -n "$NONDESTRUCTIVE" ]; then
             PART1_BLKID=$(blkid $PART1)
             blkid $PART1
             
             PART1_BLKID=$(blkid $PART1)
             blkid $PART1
             
-            if echo $PART1_BLKID | egrep -q -i 'TYPE=ntfs|TYPE=.ntfs'; then
+            if echo $PART1_BLKID | grep -E -q -i 'TYPE=ntfs|TYPE=.ntfs'; then
                 echo "Partition 1 contains NTFS filesystem"
                 
                 which ntfsresize
                 echo "Partition 1 contains NTFS filesystem"
                 
                 which ntfsresize
@@ -450,7 +465,7 @@ elif [ "$MODE" = "install" -a -n "$NONDESTRUCTIVE" ]; then
                     echo "###[FAIL] ntfsresize failed." 
                     exit 1
                 fi
                     echo "###[FAIL] ntfsresize failed." 
                     exit 1
                 fi
-            elif echo $PART1_BLKID | egrep -q -i 'TYPE=ext[2-4]|TYPE=.ext[2-4]'; then
+            elif echo $PART1_BLKID | grep -E -q -i 'TYPE=ext[2-4]|TYPE=.ext[2-4]'; then
                 echo "Partition 1 contains EXT filesystem"
                 
                 which resize2fs
                 echo "Partition 1 contains EXT filesystem"
                 
                 which resize2fs
@@ -551,7 +566,7 @@ else
     vtinfo "Upgrade operation is safe, all the data in the 1st partition (iso files and other) will be unchanged!"
     echo ""
 
     vtinfo "Upgrade operation is safe, all the data in the 1st partition (iso files and other) will be unchanged!"
     echo ""
 
-    read -p "Update Ventoy  $oldver ===> $curver   Continue? (y/n)"  Answer
+    read -p "Update Ventoy  $oldver ===> $curver   Continue? (y/n) "  Answer
     if [ "$Answer" != "y" ]; then
         if [ "$Answer" != "Y" ]; then
             exit 0
     if [ "$Answer" != "y" ]; then
         if [ "$Answer" != "Y" ]; then
             exit 0
@@ -561,13 +576,13 @@ else
     PART2=$(get_disk_part_name $DISK 2)
     SHORT_PART2=${PART2#/dev/}
     part2_start=$(cat /sys/class/block/$SHORT_PART2/start)
     PART2=$(get_disk_part_name $DISK 2)
     SHORT_PART2=${PART2#/dev/}
     part2_start=$(cat /sys/class/block/$SHORT_PART2/start)
-    
+
     PART1_TYPE=$(dd if=$DISK bs=1 count=1 skip=450 status=none | hexdump -n1 -e  '1/1 "%02X"')
     PART1_TYPE=$(dd if=$DISK bs=1 count=1 skip=450 status=none | hexdump -n1 -e  '1/1 "%02X"')
-    
+
     #reserve disk uuid
     rm -f ./diskuuid.bin
     dd status=none conv=fsync if=${DISK} skip=384 bs=1 count=16 of=./diskuuid.bin
     #reserve disk uuid
     rm -f ./diskuuid.bin
     dd status=none conv=fsync if=${DISK} skip=384 bs=1 count=16 of=./diskuuid.bin
-    
+
     dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=440
     dd status=none conv=fsync if=./diskuuid.bin of=$DISK bs=1 count=16 seek=384
     rm -f ./diskuuid.bin
     dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=440
     dd status=none conv=fsync if=./diskuuid.bin of=$DISK bs=1 count=16 seek=384
     rm -f ./diskuuid.bin
@@ -577,16 +592,16 @@ else
     dd status=none conv=fsync if=${DISK} skip=2040 bs=512 count=8 of=./rsvdata.bin
 
     if [ "$PART1_TYPE" = "EE" ]; then
     dd status=none conv=fsync if=${DISK} skip=2040 bs=512 count=8 of=./rsvdata.bin
 
     if [ "$PART1_TYPE" = "EE" ]; then
-        vtdebug "This is GPT partition style ..."    
+        vtdebug "This is GPT partition style ..."
         echo -en '\x22' | dd status=none of=$DISK conv=fsync bs=1 count=1 seek=92
         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 ..."
         echo -en '\x22' | dd status=none of=$DISK conv=fsync bs=1 count=1 seek=92
         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 ..."
-    
+
         PART1_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=446 status=none | hexdump -n1 -e  '1/1 "%02X"')
         PART2_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=462 status=none | hexdump -n1 -e  '1/1 "%02X"')
         PART1_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=446 status=none | hexdump -n1 -e  '1/1 "%02X"')
         PART2_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=462 status=none | 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 ..."
         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 ..."
@@ -611,10 +626,18 @@ else
         vtoycli partresize -s $DISK $part2_start
     fi
 
         vtoycli partresize -s $DISK $part2_start
     fi
 
+    
+    if [ "$PART1_TYPE" = "EE" ]; then    
+        vtinfo "update esp partition attribute"
+        vtoycli gpt -f $DISK
+        sync
+    fi
+
+
     echo ""
     vtinfo "Update Ventoy on $DISK successfully finished."
     echo ""
     echo ""
     vtinfo "Update Ventoy on $DISK successfully finished."
     echo ""
-    
+
 fi
 
 
 fi