X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/d5b829f8e8c8367b032b4bb57a8fc37701d42e17..58a93cdb4082bb42366c480890705d9786602b4a:/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh diff --git a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh index 62e413b..bb1cb31 100644 --- a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh +++ b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh @@ -215,6 +215,29 @@ create_ventoy_device_mapper() { fi } +create_persistent_device_mapper() { + vtlog "create_persistent_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 "$1"; then + vtlog "device-mapper module check success" + else + vterr "Error: no dm module avaliable" + fi + + $VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_persistent_map -d $1 > $VTOY_PATH/persistent_dm_table + $VT_DM_BIN create vtoy_persistent $VTOY_PATH/persistent_dm_table >>$VTLOG 2>&1 +} + + + wait_for_ventoy_dm_disk_label() { DM=$($BUSYBOX_PATH/readlink $VTOY_DM_PATH) vtlog "wait_for_ventoy_dm_disk_label $DM ..." @@ -385,12 +408,42 @@ ventoy_copy_device_mapper() { fi } +# create link for device-mapper +ventoy_create_persistent_link() { + blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep vtoy_persistent | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/') + vtDM=$(ventoy_find_dm_id ${blkdev_num}) + + if ! [ -d /dev/disk/by-label ]; then + mkdir -p /dev/disk/by-label + fi + + VTLABEL=$($BUSYBOX_PATH/blkid /dev/$vtDM | $SED 's/.*LABEL="\([^"]*\)".*/\1/') + if [ -z "$VTLABEL" ]; then + VTLABEL=casper-rw + fi + + vtlog "Persistent Label: ##${VTLABEL}##" + + if ! [ -e /dev/disk/by-label/$VTLABEL ]; then + vtOldDir=$PWD + cd /dev/disk/by-label + ln -s ../../$vtDM $VTLABEL + cd $vtOldDir + fi +} + ventoy_udev_disk_common_hook() { VTDISK="${1:0:-1}" + if [ -e /vtoy/vtoy ]; then + VTRWMOD="" + else + VTRWMOD="--readonly" + fi + # create device mapper for iso image file - if create_ventoy_device_mapper "/dev/$VTDISK" --readonly; then + if create_ventoy_device_mapper "/dev/$VTDISK" $VTRWMOD; then vtlog "==== create ventoy device mapper success ====" else vtlog "==== create ventoy device mapper failed ====" @@ -406,7 +459,7 @@ ventoy_udev_disk_common_hook() { done fi - if create_ventoy_device_mapper "/dev/$VTDISK" --readonly; then + if create_ventoy_device_mapper "/dev/$VTDISK" $VTRWMOD; then vtlog "==== create ventoy device mapper success after retry ====" else vtlog "==== create ventoy device mapper failed after retry ====" @@ -419,6 +472,79 @@ 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 + fi } +ventoy_create_dev_ventoy_part() { + blkdev_num=$($VTOY_PATH/tool/dmsetup ls | $GREP ventoy | $SED 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/') + $BUSYBOX_PATH/mknod -m 0666 /dev/ventoy b $blkdev_num + + if [ -e /vtoy_dm_table ]; then + vtPartid=1 + + $CAT /vtoy_dm_table | while read vtline; do + echo $vtline > /ventoy/dm_table_part${vtPartid} + $VTOY_PATH/tool/dmsetup create ventoy${vtPartid} /ventoy/dm_table_part${vtPartid} + + blkdev_num=$($VTOY_PATH/tool/dmsetup ls | $GREP ventoy${vtPartid} | $SED 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/') + $BUSYBOX_PATH/mknod -m 0666 /dev/ventoy${vtPartid} b $blkdev_num + + vtPartid=$(expr $vtPartid + 1) + done + fi +} +is_inotify_ventoy_part() { + if echo $1 | $GREP -q "2$"; then + if ! [ -e /sys/block/$1 ]; then + if [ -e /sys/class/block/$1 ]; then + if [ -e /dev/${1:0:-1} ]; then + $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c ${1:0:-1} + return + fi + fi + fi + fi + + [ "1" = "0" ] +} + +ventoy_find_dm_id() { + for vt in $($BUSYBOX_PATH/ls /sys/block/); do + if [ "${vt:0:3}" = "dm-" ]; then + vtMajorMinor=$($CAT /sys/block/$vt/dev) + if [ "$vtMajorMinor" = "$1" ]; then + echo ${vt} + return + fi + fi + done + echo 'xx' +} + +ventoy_swap_device() { + mv $1 $VTOY_PATH/swap_tmp_dev + mv $2 $1 + mv $VTOY_PATH/swap_tmp_dev $2 +} + +ventoy_extract_vtloopex() { + vtCurPwd=$PWD + $BUSYBOX_PATH/mkdir -p $VTOY_PATH/partmnt $VTOY_PATH/vtloopex + $BUSYBOX_PATH/mount -o ro -t vfat /dev/${vtdiskname#/dev/}2 $VTOY_PATH/partmnt + cd $VTOY_PATH/vtloopex + $CAT $VTOY_PATH/partmnt/ventoy/vtloopex.cpio | $BUSYBOX_PATH/cpio -idm + $BUSYBOX_PATH/umount $VTOY_PATH/partmnt + $BUSYBOX_PATH/rm -rf $VTOY_PATH/partmnt + + if [ -n "$2" ]; then + cd $VTOY_PATH/vtloopex/$2/ + $BUSYBOX_PATH/tar -xJf vtloopex.tar.xz + fi + + cd $vtCurPwd +}