100 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| # Sub-tests that require a mounted partition.
 | |
| set -e
 | |
| partition="$1"
 | |
| 
 | |
| . /usr/share/os-prober/common.sh
 | |
| 
 | |
| types="$(fs_type "$partition")" || types=NOT-DETECTED
 | |
| if [ "$types" = NOT-DETECTED ] || [ -z "$types" ]; then
 | |
| 	debug "$1 type not recognised; skipping"
 | |
| 	exit 0
 | |
| elif [ "$types" = swap ]; then
 | |
| 	debug "$1 is a swap partition; skipping"
 | |
| 	exit 0
 | |
| elif [ "$types" = LVM2_member ]; then
 | |
| 	debug "$1 is a LVM member partition; skipping"
 | |
| 	exit 0
 | |
| elif [ "$types" = crypto_LUKS ]; then
 | |
| 	debug "$1 is a LUKS partition; skipping"
 | |
| 	exit 0
 | |
| elif [ "$types" = ntfs ]; then
 | |
| 	if type ntfs-3g >/dev/null 2>&1; then
 | |
| 		types='ntfs-3g ntfs'
 | |
| 	fi
 | |
| elif [ -z "$types" ]; then
 | |
| 	if type cryptsetup >/dev/null 2>&1 && \
 | |
| 	   cryptsetup luksDump "$partition" >/dev/null 2>&1; then
 | |
| 		debug "$1 is a LUKS partition; skipping"
 | |
| 		exit 0
 | |
| 	fi
 | |
| 	for type in $(grep -v nodev /proc/filesystems); do
 | |
| 		# hfsplus filesystems are mountable as hfs. Try hfs last so
 | |
| 		# that we can tell the difference.
 | |
| 		if [ "$type" = hfs ]; then
 | |
| 			delaytypes="${delaytypes:+$delaytypes }$type"
 | |
| 		elif [ "$type" = fuseblk ]; then
 | |
| 			if type ntfs-3g >/dev/null 2>&1; then
 | |
| 				types="${types:+$types }ntfs-3g"
 | |
| 			fi
 | |
| 		else
 | |
| 			types="${types:+$types }$type"
 | |
| 		fi
 | |
| 	done
 | |
| fi
 | |
| 
 | |
| tmpmnt=/var/lib/os-prober/mount
 | |
| if [ ! -d "$tmpmnt" ]; then
 | |
| 	mkdir "$tmpmnt"
 | |
| fi
 | |
| 
 | |
| mounted=
 | |
| if type grub-mount >/dev/null 2>&1 && \
 | |
|    type grub-probe >/dev/null 2>&1 && \
 | |
|    grub-mount "$partition" "$tmpmnt" 2>/dev/null; then
 | |
| 	mounted=1
 | |
| 	type="$(grub-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
 | |
| else
 | |
| 	echo "Failed to probe $partition for filesystem type" >&2
 | |
| 	exit 1
 | |
| 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"
 | |
| 				if ! umount "$tmpmnt"; then
 | |
| 					warn "failed to umount $tmpmnt"
 | |
| 				fi
 | |
| 				case "$type" in
 | |
| 				    btrfs)
 | |
| 					# umount to account for the bind-mount
 | |
| 					if [ -x "$tmpmnt/@/lib" ] && \
 | |
| 					   ! umount $tmpmnt; then
 | |
| 						warn "failed to umount $tmpmnt"
 | |
| 					fi
 | |
| 					;;
 | |
| 				esac
 | |
| 				rmdir "$tmpmnt" || true
 | |
| 				exit 0
 | |
| 			fi
 | |
| 		fi
 | |
| 	done
 | |
| 	if ! umount "$tmpmnt"; then
 | |
| 		warn "failed to umount $tmpmnt"
 | |
| 	fi
 | |
| fi
 | |
| 
 | |
| rmdir "$tmpmnt" || true
 | |
| 
 | |
| # No tests found anything.
 | |
| exit 1
 |