X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/7f717a7fe9f9c799a6f494d294c552386446bfc2..HEAD:/INSTALL/tool/VentoyWorker.sh diff --git a/INSTALL/tool/VentoyWorker.sh b/INSTALL/tool/VentoyWorker.sh index cdb1dbb..7844b92 100644 --- a/INSTALL/tool/VentoyWorker.sh +++ b/INSTALL/tool/VentoyWorker.sh @@ -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