From a2f6e4e31f6562932acd2d891aa813ea0bb2aaba Mon Sep 17 00:00:00 2001 From: longpanda Date: Mon, 5 Oct 2026 23:28:02 +0800 Subject: [PATCH] Optimize udev process --- IMG/cpio/ventoy/hook/debian/ubuntu-disk.sh | 52 +++++ IMG/cpio/ventoy/hook/debian/ubuntu-hook.sh | 35 ++++ IMG/cpio/ventoy/hook/debian/ventoy-hook.sh | 9 + .../ventoy/hook/default/11-ventoy-dm.rules | 25 +++ .../ventoy/hook/default/12-dm-ventoy.rules | 1 - .../ventoy/hook/default/12-ventoy-gpt.rules | 5 + .../ventoy/hook/default/90-ventoy-auto.rules | 30 +++ .../hook/default/ventoy-pivot-udev-rule.sh | 15 ++ IMG/cpio/ventoy/hook/ventoy-hook-lib.sh | 188 +++++++++++++++++- IMG/cpio/ventoy/hook/ventoy-os-lib.sh | 18 ++ 10 files changed, 367 insertions(+), 11 deletions(-) create mode 100644 IMG/cpio/ventoy/hook/debian/ubuntu-disk.sh create mode 100644 IMG/cpio/ventoy/hook/debian/ubuntu-hook.sh create mode 100644 IMG/cpio/ventoy/hook/default/11-ventoy-dm.rules delete mode 100644 IMG/cpio/ventoy/hook/default/12-dm-ventoy.rules create mode 100644 IMG/cpio/ventoy/hook/default/12-ventoy-gpt.rules create mode 100644 IMG/cpio/ventoy/hook/default/90-ventoy-auto.rules create mode 100644 IMG/cpio/ventoy/hook/default/ventoy-pivot-udev-rule.sh diff --git a/IMG/cpio/ventoy/hook/debian/ubuntu-disk.sh b/IMG/cpio/ventoy/hook/debian/ubuntu-disk.sh new file mode 100644 index 00000000..e883236a --- /dev/null +++ b/IMG/cpio/ventoy/hook/debian/ubuntu-disk.sh @@ -0,0 +1,52 @@ +#!/ventoy/busybox/sh + +. /ventoy/hook/ventoy-hook-lib.sh + +vtlog "####### $0 $* ########" + +VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH + +wait_for_usb_disk_ready + +vtdiskname=$(get_ventoy_disk_name) +if [ "$vtdiskname" = "unknown" ]; then + vtlog "ventoy disk not found" + PATH=$VTPATH_OLD + exit 0 +fi + +ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" + +mkdir -p /ventoy/mnt/iso /ventoy/mnt/sfs + +vtDM=$(dmsetup info ventoy | grep minor | sed 's/.*\([0-9][0-9]*\)/\1/') + +vtlog "mount -o ro -t iso9660 /dev/dm-${vtDM} /ventoy/mnt/iso" +mount -o ro -t iso9660 /dev/dm-${vtDM} /ventoy/mnt/iso + +mount /ventoy/mnt/iso/casper/minimal.standard.live.squashfs /ventoy/mnt/sfs + +mount --bind /ventoy/mnt/sfs/usr/lib/modules /lib/modules + +ventoy_load_iso_part_fs_ko + +umount /lib/modules +umount /ventoy/mnt/sfs +umount /ventoy/mnt/iso + + +ventoy_remove_all_dm + +if ventoy_mount_iso "${vtdiskname}"; then + vtlog "direcly mount iso partition SUCCESS" +else + vtlog "direcly mount iso partition FAILED, keep use DM" + ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" +fi + + +if [ -f /ventoy/autoinstall ]; then + sh /ventoy/hook/default/auto_install_varexp.sh /ventoy/autoinstall +fi + +set_ventoy_hook_finish diff --git a/IMG/cpio/ventoy/hook/debian/ubuntu-hook.sh b/IMG/cpio/ventoy/hook/debian/ubuntu-hook.sh new file mode 100644 index 00000000..deb118ba --- /dev/null +++ b/IMG/cpio/ventoy/hook/debian/ubuntu-hook.sh @@ -0,0 +1,35 @@ +#!/ventoy/busybox/sh + +echo "Here before mountroot ..." >> $VTLOG + +$SED "/^mountroot$/i\\$BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/ubuntu-disk.sh" -i /init +$SED "/^mountroot$/i\\maybe_break bottom" -i /init + +#workaround for issue #3718 +if [ -f $VTOY_PATH/ventoy_persistent_map -a -f /scripts/casper-helpers ]; then + echo 'fix casper cow udev issue' >> $VTLOG + if $GREP -q '^find_cow_device\(\).*{' /scripts/casper-helpers; then + VTINS_LINE=$($GREP -n '^find_cow_device\(\).*{' /scripts/casper-helpers | $AWK -F':' '{print $1}') + $AWK "NR < $VTINS_LINE" /scripts/casper-helpers > /ventoy/casper-helpers-tmp + $CAT $VTOY_PATH/hook/debian/casper-perst-wa.sh >> /ventoy/casper-helpers-tmp + $AWK "NR > $VTINS_LINE" /scripts/casper-helpers >> /ventoy/casper-helpers-tmp + $CAT /ventoy/casper-helpers-tmp > /scripts/casper-helpers + fi +fi + + +if [ -f $VTOY_PATH/autoinstall ]; then + echo "Do auto install ..." >> $VTLOG + + if $GREP -q '^autoinstall:' $VTOY_PATH/autoinstall; then + echo "cloud-init auto install ..." >> $VTLOG + if $GREP -q "maybe_break init" /init; then + $SED "/maybe_break init/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/ventoy-cloud-init.sh \$rootmnt" -i /init + fi + else + if $GREP -q "^mount /proc$" /init; then + $SED "/^mount \/proc/a export file=$VTOY_PATH/autoinstall; export auto='true'; export priority='critical'" -i /init + fi + fi +fi + diff --git a/IMG/cpio/ventoy/hook/debian/ventoy-hook.sh b/IMG/cpio/ventoy/hook/debian/ventoy-hook.sh index 7a02d33a..bf7e50b5 100644 --- a/IMG/cpio/ventoy/hook/debian/ventoy-hook.sh +++ b/IMG/cpio/ventoy/hook/debian/ventoy-hook.sh @@ -61,6 +61,15 @@ ventoy_get_debian_distro() { if $GREP -q 'NAME="Kylin"' /etc/os-release; then echo 'kylin'; return fi + + if $GREP -q 'ID=ubuntu' /etc/os-release; then + if $GREP -q 'VERSION_ID=\"2[4-9]\.' /etc/os-release; then + echo 'ubuntu'; return + fi + if $GREP -q 'VERSION_ID=\"3[0-9]\.' /etc/os-release; then + echo 'ubuntu'; return + fi + fi fi if $GREP -q 'slax/' /proc/cmdline; then diff --git a/IMG/cpio/ventoy/hook/default/11-ventoy-dm.rules b/IMG/cpio/ventoy/hook/default/11-ventoy-dm.rules new file mode 100644 index 00000000..9931789d --- /dev/null +++ b/IMG/cpio/ventoy/hook/default/11-ventoy-dm.rules @@ -0,0 +1,25 @@ +ACTION=="add", SUBSYSTEM=="block", KERNEL=="dm-*", \ + ENV{DM_NAME}=="[vV]entoy*", \ + ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="" + +ACTION=="add", SUBSYSTEM=="block", KERNEL=="dm-*", \ + ENV{DM_NAME}=="vtoy*", \ + ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="" + +ACTION=="change", SUBSYSTEM=="block", KERNEL=="dm-*", \ + ENV{DM_NAME}=="[vV]entoy*", \ + ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="" + +ACTION=="change", SUBSYSTEM=="block", KERNEL=="dm-*", \ + ENV{DM_NAME}=="vtoy*", \ + ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="" + + diff --git a/IMG/cpio/ventoy/hook/default/12-dm-ventoy.rules b/IMG/cpio/ventoy/hook/default/12-dm-ventoy.rules deleted file mode 100644 index 01c97883..00000000 --- a/IMG/cpio/ventoy/hook/default/12-dm-ventoy.rules +++ /dev/null @@ -1 +0,0 @@ -ACTION=="add|change", KERNEL=="dm-[0-9]*", ENV{DM_NAME}=="ventoy[0-9]*", ENV{DM_UDEV_DISABLE_SYBSYSTEM_RULES_FLAG}="", ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="", IMPORT{program}="/ventoy/hook/default/ventoy-udev.sh $env{DM_NAME}" diff --git a/IMG/cpio/ventoy/hook/default/12-ventoy-gpt.rules b/IMG/cpio/ventoy/hook/default/12-ventoy-gpt.rules new file mode 100644 index 00000000..bff30803 --- /dev/null +++ b/IMG/cpio/ventoy/hook/default/12-ventoy-gpt.rules @@ -0,0 +1,5 @@ +ACTION=="add|change", KERNEL=="dm-[0-9]*", ENV{DM_NAME}=="ventoy[0-9]*", \ + ENV{DM_UDEV_DISABLE_SYBSYSTEM_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="", \ + IMPORT{program}="/ventoy/hook/default/ventoy-udev.sh $env{DM_NAME}" diff --git a/IMG/cpio/ventoy/hook/default/90-ventoy-auto.rules b/IMG/cpio/ventoy/hook/default/90-ventoy-auto.rules new file mode 100644 index 00000000..1c5e7e0f --- /dev/null +++ b/IMG/cpio/ventoy/hook/default/90-ventoy-auto.rules @@ -0,0 +1,30 @@ + +ACTION=="add", SUBSYSTEM=="block", KERNEL=="dm-*", \ + ENV{DM_NAME}=="VentoyPart", \ + ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="", \ + ENV{ID_FS_LABEL}="VentoyPart", \ + ENV{ID_FS_LABEL_ENC}="VentoyPart", \ + ENV{UDISKS_FILESYSTEM_LABEL}="VentoyPart", \ + ENV{UDISKS_PRESENTATION_NAME}="VentoyPart", \ + ENV{UDISKS_SYSTEM}="0", \ + ENV{UDISKS_REMOVABLE}="1", \ + ENV{UDISKS_AUTO}="1", \ + ENV{UDISKS_AUTOMOUNTABLE}="1" + + +ACTION=="change", SUBSYSTEM=="block", KERNEL=="dm-*", \ + ENV{DM_NAME}=="VentoyPart", \ + ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="", \ + ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="", \ + ENV{ID_FS_LABEL}="VentoyPart", \ + ENV{ID_FS_LABEL_ENC}="VentoyPart", \ + ENV{UDISKS_FILESYSTEM_LABEL}="VentoyPart", \ + ENV{UDISKS_PRESENTATION_NAME}="VentoyPart", \ + ENV{UDISKS_SYSTEM}="0", \ + ENV{UDISKS_REMOVABLE}="1", \ + ENV{UDISKS_AUTO}="1", \ + ENV{UDISKS_AUTOMOUNTABLE}="1" + diff --git a/IMG/cpio/ventoy/hook/default/ventoy-pivot-udev-rule.sh b/IMG/cpio/ventoy/hook/default/ventoy-pivot-udev-rule.sh new file mode 100644 index 00000000..0f6e1552 --- /dev/null +++ b/IMG/cpio/ventoy/hook/default/ventoy-pivot-udev-rule.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +for vroot in sysroot newroot; do + if [ -d $vroot/etc ]; then + if [ -d $vroot/etc/udev/rules.d ]; then + : + else + mkdir -p $vroot/etc/udev/rules.d + fi + + cp -a /ventoy/hook/default/90-ventoy-auto.rules $vroot/etc/udev/rules.d/ + chmod 0644 $vroot/etc/udev/rules.d/90-ventoy-auto.rules + break + fi +done diff --git a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh index e7708c40..f5144357 100644 --- a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh +++ b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh @@ -273,13 +273,40 @@ create_ventoy_device_mapper() { else $VT_DM_BIN "$2" create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1 fi - + RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}') - echo "$VT_DM_BIN create ${RAWDISKNAME#/dev/} $VTOY_PATH/ventoy_raw_table" > /ventoy/ventoy_iso_part_dm_cmd - #echo "$VT_DM_BIN mknodes ${RAWDISKNAME#/dev/}" >> /ventoy/ventoy_iso_part_dm_cmd + echo "$VT_DM_BIN create VentoyPart $VTOY_PATH/ventoy_raw_table" > /ventoy/ventoy_iso_part_dm_cmd + #echo "$VT_DM_BIN mknodes VentoyPart" >> /ventoy/ventoy_iso_part_dm_cmd #echo "$VT_DM_BIN ls" >> /ventoy/ventoy_iso_part_dm_cmd } +create_ventoy_loop_device_mapper() { + vtLoop1=${1#/dev/} + vtLoop2=${2#/dev/} + + vtlog "create_ventoy_loop_device_mapper $*" + + VT_DM_BIN=$(ventoy_find_bin_path dmsetup) + if [ -z "$VT_DM_BIN" ]; then + vtlog "no dmsetup avaliable, lastly try inbox dmsetup" + VT_DM_BIN=$VTOY_PATH/tool/dmsetup + fi + + vtlog "dmsetup avaliable in system $VT_DM_BIN" + + if ventoy_check_dm_module; then + vtlog "device-mapper module check success" + else + vterr "Error: no dm module avaliable" + fi + + vtLoop2Size=$(cat /sys/block/$vtLoop2/size) + echo "0 65 linear $1 0" > $VTOY_PATH/ventoy_dm_table + echo "65 $vtLoop2Size linear $2 0" >> $VTOY_PATH/ventoy_dm_table + + $VT_DM_BIN "--readonly" create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1 +} + create_ventoy_wrapper_device_mapper() { vtlog "create_ventoy_wrapper_device_mapper $*" @@ -621,7 +648,7 @@ ventoy_udev_disk_common_hook() { else ventoy_copy_device_mapper "/dev/$1" fi - + if [ -f $VTOY_PATH/ventoy_persistent_map ]; then create_persistent_device_mapper "/dev/$VTDISK" ventoy_create_persistent_link @@ -709,19 +736,28 @@ ventoy_remove_all_dm() { fi vtlog "dmsetup remove ventoy" - $VTOY_PATH/tool/dmsetup remove ventoy + $VTOY_PATH/tool/dmsetup remove ventoy >> $VTLOG 2>&1 rm -f /dev/ventoy* - + if [ -e $VTOY_PATH/ventoy_raw_table ]; then RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}') - vtlog "dmsetup remove ${RAWDISKNAME#/dev/}" - $VTOY_PATH/tool/dmsetup remove ${RAWDISKNAME#/dev/} + DMRAWDISKNAME=${RAWDISKNAME#/dev/} + if $VTOY_PATH/tool/dmsetup ls | $GREP -qw "$DMRAWDISKNAME"; then + vtlog "dmsetup remove ${DMRAWDISKNAME}" + $VTOY_PATH/tool/dmsetup remove "$DMRAWDISKNAME" + else + vtlog "no need to remove DM ${DMRAWDISKNAME}" + fi rm -f $VTOY_PATH/ventoy_iso_part_dm_cmd fi if [ -e $VTOY_PATH/persistent_dm_table ]; then - vtlog "dmsetup remove vtoy_persistent" - $VTOY_PATH/tool/dmsetup remove vtoy_persistent + if $VTOY_PATH/tool/dmsetup ls | $GREP -qw vtoy_persistent; then + vtlog "dmsetup remove vtoy_persistent" + $VTOY_PATH/tool/dmsetup remove vtoy_persistent + else + vtlog "no need to remove DM vtoy_persistent" + fi fi } @@ -843,3 +879,135 @@ ventoy_wait_dir() { fi done } + +ventoy_load_iso_part_fs_ko() { + vtFS=$($VTOY_PATH/tool/vtoydump -s /ventoy/ventoy_os_param) + vtlog "ISO part FS is $vtFS" + + for vtModProbe in /usr/sbin/modprobe /sbin/modprobe /bin/modprobe $BUSYBOX_PATH/modprobe; do + if [ -e $vtModProbe ]; then + break + fi + done + + vtlog "modprobe is $vtModProbe" + + if [ "$vtFS" = "ext" ]; then + vtlog "modprobe ext2/3/4" + $vtModProbe ext2 >> $VTLOG 2>&1 + $vtModProbe ext3 >> $VTLOG 2>&1 + $vtModProbe ext4 >> $VTLOG 2>&1 + elif [ "$vtFS" = "ntfs" ]; then + vtlog "modprobe ntfs3" + $vtModProbe ntfs3 >> $VTLOG 2>&1 + elif [ "$vtFS" = "fat" ]; then + vtlog "modprobe vfat" + $vtModProbe vfat >> $VTLOG 2>&1 + else + vtlog "modprobe $vtFS" + $vtModProbe $vtFS >> $VTLOG 2>&1 + fi +} + + +ventoy_iso_part_fs_supported() { + vtFS=$($VTOY_PATH/tool/vtoydump -s /ventoy/ventoy_os_param) + if [ "$vtFS" = "ext" ]; then + vtPattern='ext[2-4]' + elif [ "$vtFS" = "fat" ]; then + vtPattern='vfat' + elif [ "$vtFS" = "ntfs" ]; then + vtPattern='ntfs3' + else + vtPattern="$vtFS" + fi + + vtlog "vtFS=$vtFS Pattern=$vtPattern" + if $EGREP -q "$vtPattern" /proc/filesystems; then + vtlog "ISO part FS supported OK" + $BUSYBOX_PATH/true + else + vtlog "ISO part FS is NOT supported" + $BUSYBOX_PATH/false + fi +} + +ventoy_mount_iso_part() { + vtDisk=$1 + vtMnt=$2 + + vtlog "mount iso partition $vtDisk" + + if [ -z "$vtMnt" ]; then + vtMnt=$VTOY_PATH/tmpmnt + fi + + mkdir -p $vtMnt + + if echo $vtDisk | $EGREP -q "nvme|mmc|nbd"; then + vtpart1=${vtDisk}p1 + else + vtpart1=${vtDisk}1 + fi + + vtFS=$($VTOY_PATH/tool/vtoydump -s /ventoy/ventoy_os_param) + if [ "$vtFS" = "ntfs" ]; then + vtlog "mount -t ntfs3 $vtpart1 $vtMnt" + mount -t ntfs3 $vtpart1 $vtMnt >> $VTLOG 2>&1 + elif [ "$vtFS" = "fat" ]; then + vtlog "mount -t vfat $vtpart1 $vtMnt" + mount -t vfat $vtpart1 $vtMnt >> $VTLOG 2>&1 + else + vtlog "mount $vtpart1 $vtMnt" + mount $vtpart1 $vtMnt >> $VTLOG 2>&1 + fi +} + + +ventoy_losetup_iso() { + vtMnt=$1 + if [ -z "$vtMnt" ]; then + vtMnt=$VTOY_PATH/tmpmnt + fi + + for vtLosetup in /usr/sbin/losetup /sbin/losetup /bin/losetup $BUSYBOX_PATH/losetup; do + if [ -e $vtLosetup ]; then + break + fi + done + + vtisoname=$(get_ventoy_iso_name) + + dd if=/dev/zero of=/ventoy/isoheader.bin bs=512 count=1 >/dev/null 2>&1 + dd if="${vtMnt}${vtisoname}" bs=512 skip=1 count=64 >>/ventoy/isoheader.bin 2>>/dev/null + + vtfreeloop1=$($vtLosetup -f) + if $vtLosetup -r $vtfreeloop1 /ventoy/isoheader.bin >> $VTLOG 2>&1; then + vtfreeloop2=$($vtLosetup -f) + if $vtLosetup -r --offset=33280 $vtfreeloop2 "${vtMnt}${vtisoname}" >> $VTLOG 2>&1; then + echo -n "$vtfreeloop1 $vtfreeloop2" > /ventoy/vtoy_dm_loop_dev + fi + fi +} + + +ventoy_mount_iso() { + if [ "$1" = "ko" ]; then + shift + ventoy_load_iso_part_fs_ko + fi + if ventoy_iso_part_fs_supported; then + if ventoy_mount_iso_part $1; then + if ventoy_losetup_iso; then + create_ventoy_loop_device_mapper $($CAT /ventoy/vtoy_dm_loop_dev) + return + else + vtlog "losetup ISO file FAILED" + fi + else + vtlog "mount iso partition FAILED" + fi + fi + + $BUSYBOX_PATH/false +} diff --git a/IMG/cpio/ventoy/hook/ventoy-os-lib.sh b/IMG/cpio/ventoy/hook/ventoy-os-lib.sh index 5e21bce5..167ebc5d 100644 --- a/IMG/cpio/ventoy/hook/ventoy-os-lib.sh +++ b/IMG/cpio/ventoy/hook/ventoy-os-lib.sh @@ -63,6 +63,19 @@ ventoy_get_udev_conf_path() { echo "$VT_RULE_DIR/$VT_UDEV_RULE_FILE_NAME" } +ventoy_add_udev_auto_rule() { + VT_RULE_DIR=$(ventoy_get_udev_conf_dir) + cp -a $VTOY_PATH/hook/default/90-ventoy-auto.rules $VT_RULE_DIR/11-ventoy-auto.rules + cp -a $VTOY_PATH/hook/default/90-ventoy-auto.rules $VT_RULE_DIR/90-ventoy-auto.rules + chmod 0644 $VT_RULE_DIR/*ventoy* +} + + +ventoy_dracut_pivot_udev_rule() { + cp -a $VTOY_PATH/hook/default/ventoy-pivot-udev-rule.sh $VT_DRACUT_HOOKS/pre-pivot/99-ventoy-udev-rules.sh +} + + ventoy_add_kernel_udev_rule() { VT_UDEV_RULE_PATH=$(ventoy_get_udev_conf_path) echo "KERNEL==\"$1\", $VT_UDEV_RULE_PREFIX RUN+=\"$2\"" >> $VT_UDEV_RULE_PATH @@ -178,3 +191,8 @@ ventoy_iso_scan_check() { [ $vtCheckOk -eq 1 ] } + +ventoy_wrapper_dracut_hook() { + echo "#/bin/sh" > $2 + echo "$BUSYBOX_PATH/sh $1" >> $2 +}