X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Flive-helpers;h=20952f3cce579782a1504c57f1a5d6feb0073132;hb=41e9edcaf36bf2b7d56eee71bee80703176d111e;hp=b0ad4b67ded176976aefa3476d79de194510d25f;hpb=924d99d21049feb1213e1816d4345364bfb0900c;p=live-boot-grml.git diff --git a/scripts/live-helpers b/scripts/live-helpers index b0ad4b6..20952f3 100644 --- a/scripts/live-helpers +++ b/scripts/live-helpers @@ -29,6 +29,20 @@ subdevices () echo ${r} } +is_supported_fs () +{ + # FIXME: do something better like the scan of supported filesystems + fstype="${1}" + + case ${fstype} in + vfat|iso9660|udf|ext2|ext3|ntfs|jffs2) + return 0 + ;; + esac + + return 1 +} + get_fstype () { local FSTYPE @@ -153,6 +167,7 @@ setup_loop () local pattern=${3} local offset=${4} local encryption=${5} + local readonly=${6} modprobe -q -b "${module}" udevsettle @@ -164,6 +179,14 @@ setup_loop () dev=$(sys2dev "${loopdev}") options='' + if [ -n ${readonly} ] + then + if /sbin/losetup --help 2>&1 | grep -q -- "-r\b" + then + options="${options} -r" + fi + fi + if [ 0 -lt "${offset}" ] then options="${options} -o ${offset}" @@ -234,7 +257,7 @@ find_cow_device () pers_label="${1}" cow_backing="/${pers_label}-backing" - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram) + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v fd) do for dev in $(subdevices "${sysblock}") do @@ -274,31 +297,29 @@ find_files () filenames="${1}" snap_backing="/snap-backing" - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram) + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v fd) do for dev in $(subdevices "${sysblock}") do devname=$(sys2dev "${dev}") devfstype="$(get_fstype ${devname})" - case "${devfstype}" in - vfat|ext2|ext3|jffs2) - # FIXME: all supported block devices should be scanned - mkdir -p "${snap_backing}" - try_mount "${devname}" "${snap_backing}" "ro" + if is_supported_fs ${devfstype} + then + mkdir -p "${snap_backing}" + try_mount "${devname}" "${snap_backing}" "ro" - for filename in ${filenames} + for filename in ${filenames} do - if [ -f "${snap_backing}/${filename}" ] - then - echo "${devname} ${snap_backing} ${filename}" - return 0 - fi - done - - umount ${snap_backing} - ;; - esac + if [ -f "${snap_backing}/${filename}" ] + then + echo "${devname} ${snap_backing} ${filename}" + return 0 + fi + done + + umount ${snap_backing} + fi done done }