#!/bin/sh is_file_avaiable(){ disktmp=$(mktemp) rm -f $disktmp mkdir -p $disktmp || true timeout 10 mount -t auto "$1" $disktmp &>/dev/null [ -f "$disktmp/$2" ] && [ -b "$1" ] status=$? umount -lf $disktmp 2>/dev/null return $status } mountroot() { while [ "$root" == "" ] ; do list=$(ls /sys/class/block/ | grep ".*[0-9]$" | grep -v loop | grep -v ram | grep -v nbd | grep -v fd | sed "s|^|/dev/|g") for part in $list ; do sleep 0.1 echo "Looking for: $part" if is_file_avaiable "$part" "/live/filesystem.squashfs" ; then export root=$part elif is_file_avaiable "$part" "/mount-me" ; then export home=$part fi done done } mount_top() { modprobe iso9660 modprobe squashfs modprobe hfsplus modprobe ext4 } mount_premount() { if cat /proc/cmdline | grep "break=live" >/dev/null ; then launch_interactive_shell fi for mod in dm_mod dm-raid raid0 raid1 raid456 loop ; do modprobe $mod || true done if [ -f /ventoy/hook/arch/ventoy-disk.sh ] ; then echo "Loading Ventoy hooks" sh /ventoy/hook/arch/ventoy-disk.sh || true sleep 0.3 fi } mount_bottom() { mkdir -p /donkey/a # upper mkdir -p /donkey/b # workdir mkdir -p /live_root/ mkdir -p ${rootmnt}/ mkdir -p /source/ # lower mount $root ${rootmnt}/ 2> /dev/null mount ${rootmnt}/live/filesystem.squashfs /source/ 2> /dev/null mount -t overlay -o lowerdir=/source/,upperdir=/donkey/a/,workdir=/donkey/b overlay /live_root mount -t tmpfs -o size=100% none /donkey/a mount -t tmpfs -o size=100% none /donkey/b [ -d /source/merge/ ] && cp -prfv /source/merge/* /live_root/ mount --bind /live_root ${rootmnt}/ mkdir ${rootmnt}/cdrom/ 2> /dev/null mkdir ${rootmnt}/source/ 2> /dev/null mount $root ${rootmnt}/cdrom/ 2> /dev/null mount ${rootmnt}/live/filesystem.squashfs ${rootmnt}/source/ 2> /dev/null [ "$home" != "" ] && mount $home ${rootmnt}/data/user 2>/dev/null }