]> 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() {
-    
+
     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 '   -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)'
@@ -21,6 +21,7 @@ print_usage() {
 }
 
 
+SECUREBOOT="YES"
 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
-    
+
     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"
-        
+
         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
-        
+
         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
@@ -142,14 +143,14 @@ if grep "$DISK" /proc/mounts; then
 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
 
-#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
@@ -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
-        vterr "tmp_mnt directory exits, please delete it first."
+        vterr "tmp_mnt directory exists, please delete it first."
         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
-            PARTTOOL='parted'
+            PARTTOOL='parted'            
         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
     
+    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
@@ -203,7 +217,7 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
             exit 1
         fi
     fi
-    
+
     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 [ $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
-    echo "Size : $disk_size_gb GB"    
+    echo "Size : $disk_size_gb GB"
     if [ -n "$VTGPT" ]; then
         echo "Style: GPT"
     else
         echo "Style: MBR"
-    fi    
+    fi
     echo ''
 
     if [ -n "$RESERVE_SPACE" ]; then
@@ -259,7 +273,7 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
         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
@@ -290,8 +304,8 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
         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
@@ -315,11 +329,11 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
         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
-    
+
     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
@@ -328,23 +342,24 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
     
     # 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
-    
+
     #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 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 ..."
+
     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
             
-            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
@@ -450,7 +465,7 @@ elif [ "$MODE" = "install" -a -n "$NONDESTRUCTIVE" ]; then
                     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
@@ -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 ""
 
-    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
@@ -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)
-    
+
     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
-    
+
     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
-        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 ..."
-    
+
         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 ..."
@@ -611,10 +626,18 @@ else
         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 ""
-    
+
 fi