blob: efe886ca2c738dff3f1f2e6d4aa810d8d6015fc0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#!/bin/sh
set -e
die() { echo "$(basename "$0"): $1" && exit 1 ; }
# file check
! [ "$1" ] && die "No file was specified"
! [ -f "$1" ] && die "$1 is not a file"
# mountpoint check
! [ "$2" ] && die "No mountpoint was specified"
! [ -d "$2" ] && die "Mountpoint $2 is not a directory"
[ "`ls -A "$2"`" ] && die "Mountpoint $2 is not empty"
# check disk image validity
! fdisk -lu "$1" 2>&1 | grep -m1 "\s*Start\s*End" >/dev/null && die "File $1 is not a disk image"
# get sectorsize
#sectorsize=$(fdisk -lu "$1" | grep -m1 '^Units:' | cut -d' ' -f8) # Sector size is 8th word
sectorsize=512
# get partition num, if there is more than one part, interactively if not available
# TODO check if there is no partitions
partition="$3"
if [ -z "$partition" ]; then
fdisk -o Size,Type,Name -lu "$1" | awk '!f{print $0};f>0{print " " f-1 ") " $0; f++};f==-1{print "Part " $0;f=1};/^$/{f=-1}'
printf "\nChoose partition number to mount: "
read partition
fi
# check if part num valid
[ -z "${partition##*[!0-9]*}" ] && die "Illegal number: '$partition'"
# get offset from fdisk
fdisk_ignore_lines=9 # ignore first 9 lines of output
offset=$(fdisk -o Start -l "$1" | sed $(( fdisk_ignore_lines + partition ))'q;d' )
# check if that produced a valid offset
[ -z "$offset" ] && die "Partition $partition does not exist"
# try to mount
mount -o loop,offset=$(( offset * sectorsize )) "$1" "$2" && echo "Successfully mounted" || die "Error mounting"
|