Adding support for persistent-media={removable,removable-usb}.
[live-boot-grml.git] / scripts / live
index de82082..c2ad14e 100755 (executable)
@@ -253,6 +253,11 @@ Arguments ()
                                export PERSISTENT
                                ;;
 
+                       persistent-media=*)
+                               PERSISTENT_MEDIA="${ARGUMENT#*=}"
+                               export PERSISTENT_MEDIA
+                               ;;
+
                        persistent-path=*)
                                PERSISTENT_PATH="${ARGUMENT#persistent-path=}"
                                export PERSISTENT_PATH
@@ -1324,6 +1329,7 @@ setup_unionfs ()
        # Looking for "${root_persistence}" device or file
        if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
        then
+
                if [ -z "${QUICKUSBMODULES}" ]
                then
                        # Load USB modules
@@ -1351,6 +1357,18 @@ setup_unionfs ()
                        done
                fi
 
+               case "${PERSISTENT_MEDIA}" in
+                       removable)
+                               whitelistdev="$(removable_dev)"
+                               ;;
+                       removable-usb)
+                               whitelistdev="$(removable_usb_dev)"
+                               ;;
+                       *)
+                               whitelistdev=""
+                               ;;
+               esac
+
                # search for label and files (this could be hugely optimized)
                cowprobe=$(find_cow_device "${root_persistence}" "${blacklistdev}" "${whitelistdev}")
                if [ -b "${cowprobe}" ]
@@ -1693,38 +1711,29 @@ find_livefs ()
        # first look at the one specified in the command line
        case "${LIVE_MEDIA}" in
                removable-usb)
-                       for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)")
+                       for sysblock in $(removable_usb_dev "sys")
                        do
-                               if [ "$(cat ${sysblock}/removable)" = "1" ]
-                               then
-                                       if readlink ${sysblock} | grep -q usb
+                               for dev in $(subdevices "${sysblock}")
+                               do
+                                       if check_dev "${dev}"
                                        then
-                                               for dev in $(subdevices "${sysblock}")
-                                               do
-                                                       if check_dev "${dev}"
-                                                       then
-                                                               return 0
-                                                       fi
-                                               done
+                                               return 0
                                        fi
-                               fi
+                               done
                        done
                        return 1
                        ;;
 
                removable)
-                       for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)")
+                       for sysblock in $(removable_dev "sys")
                        do
-                               if [ "$(cat ${sysblock}/removable)" = "1" ]
-                               then
-                                       for dev in $(subdevices "${sysblock}")
-                                       do
-                                               if check_dev "${dev}"
-                                               then
-                                                       return 0
-                                               fi
-                                       done
-                               fi
+                               for dev in $(subdevices "${sysblock}")
+                               do
+                                       if check_dev "${dev}"
+                                       then
+                                               return 0
+                                       fi
+                               done
                        done
                        return 1
                        ;;
@@ -1742,16 +1751,7 @@ find_livefs ()
 
        # or do the scan of block devices
        # prefer removable devices over non-removable devices, so scan them first
-       for sysblock in $(echo /sys/block/* | tr ' ' '\n' | egrep -v "/(loop|ram|dm-|fd)")
-       do
-               if [ "$(cat ${sysblock}/removable)" = "1" ]
-               then
-                       removable_devices_to_scan="$removable_devices_to_scan $sysblock"
-               else
-                       nonremovable_devices_to_scan="$nonremovable_devices_to_scan $sysblock"
-               fi
-       done
-       devices_to_scan="$removable_devices_to_scan $nonremovable_devices_to_scan"
+       devices_to_scan="$(removable_dev 'sys') $(non_removable_dev 'sys')"
 
        for sysblock in $devices_to_scan
        do