Co-authored-by: longpanda <59477474+ventoy@users.noreply.github.com>
. ./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 ' -u update Ventoy in sdX'
echo ' -l list Ventoy information in sdX'
echo ''
DISK=$(readlink -e -n "$DISK")
fi
fi
DISK=$(readlink -e -n "$DISK")
fi
fi
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"
else
echo "Ventoy Version: NA"
fi
else
echo "Ventoy Version: NA"
fi
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
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."
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
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)
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
#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"
echo ''
if [ -n "$RESERVE_SPACE" ]; then
echo ''
if [ -n "$RESERVE_SPACE" ]; then
- 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
- 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
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
- 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
# 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"
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
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
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 ..."
echo ""
vtinfo "Update Ventoy on $DISK successfully finished."
echo ""
echo ""
vtinfo "Update Ventoy on $DISK successfully finished."
echo ""