Index: os-prober/os-probes/common/50mounted-tests =================================================================== --- os-prober.orig/os-probes/common/50mounted-tests +++ os-prober/os-probes/common/50mounted-tests @@ -73,10 +73,51 @@ fi mounted= +if [ "$types" = btrfs ]; then + partition="$BTRFSDEV" +fi + +if type grub2-mount >/dev/null 2>&1 && \ + type grub2-probe >/dev/null 2>&1 && \ + grub2-mount "$partition" "$tmpmnt" 2>/dev/null; then + mounted=1 + type="$(grub2-probe -d "$partition" -t fs)" || true + if [ "$type" ]; then + debug "mounted using GRUB $type filesystem driver" + else + debug "mounted using GRUB, but unknown filesystem?" + type=fuseblk + fi +elif dm_device="$(do_dmsetup osprober "$partition")" && \ + [ "$dm_device" ]; then + for type in $types; do + if mountinfo=`mount -o ro -t "$type" "$dm_device" "$tmpmnt" 2>&1`; then + debug "mounted as $type filesystem" + mounted=1 + break + else + debug "mounting $dm_device ($partition) as $type failed: $mountinfo" + fi + done +fi + +if [ "$mounted" ]; then + for test in /usr/lib/os-probes/mounted/*; do + debug "running subtest $test" + if [ -f "$test" ] && [ -x "$test" ]; then + if "$test" "$partition" "$tmpmnt" "$type"; then + debug "os found by subtest $test" + do_unmount + exit 0 + fi + fi + done +fi +do_unmount + # all btrfs processing here. Handle both unmounted and # mounted subvolumes. if [ "$types" = btrfs ]; then - partition="$BTRFSDEV" debug "begin btrfs processing for $UUID" # note that the btrfs volume must not be mounted ro if mount -t btrfs -U "$UUID" "$tmpmnt" 2>/dev/null; then @@ -137,48 +178,8 @@ if [ "$types" = btrfs ]; then rmdir "$tmpmnt" || true if [ "$found" ]; then exit 0 - else - exit 1 fi fi -if type grub2-mount >/dev/null 2>&1 && \ - type grub2-probe >/dev/null 2>&1 && \ - grub2-mount "$partition" "$tmpmnt" 2>/dev/null; then - mounted=1 - type="$(grub2-probe -d "$partition" -t fs)" || true - if [ "$type" ]; then - debug "mounted using GRUB $type filesystem driver" - else - debug "mounted using GRUB, but unknown filesystem?" - type=fuseblk - fi -elif dm_device="$(do_dmsetup osprober "$partition")" && \ - [ "$dm_device" ]; then - for type in $types; do - if mountinfo=`mount -o ro -t "$type" "$dm_device" "$tmpmnt" 2>&1`; then - debug "mounted as $type filesystem" - mounted=1 - break - else - debug "mounting $dm_device ($partition) as $type failed: $mountinfo" - fi - done -fi - -if [ "$mounted" ]; then - for test in /usr/lib/os-probes/mounted/*; do - debug "running subtest $test" - if [ -f "$test" ] && [ -x "$test" ]; then - if "$test" "$partition" "$tmpmnt" "$type"; then - debug "os found by subtest $test" - do_unmount - exit 0 - fi - fi - done -fi -do_unmount - # No tests found anything. exit 1