X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=grml-crypt;h=5dcace5dd2fe384579db5c717d5401ec2d04a599;hb=6bdde2304c466c38d7e61d2d804df4df277fa5c0;hp=fade32e42c56e1b0b5cc906420ba504580d082ea;hpb=927bbefa8782ae7d31084a089e084720423ec9fa;p=grml-crypt.git diff --git a/grml-crypt b/grml-crypt index fade32e..5dcace5 100755 --- a/grml-crypt +++ b/grml-crypt @@ -66,7 +66,7 @@ OPTIONS: -o optimised initialisation mode (should be as secure as the default but faster) -y verifies the passphrase by asking for it twice -f force file overwriting in format mode and/or disable confirmation dialog - -F only for action start: run fsck before mounting the filesystem + -F only for action start: run fsck before mounting the filesystem. Use fsck's -f option if given twice. -m additional arguments to mount -v verbose (show what is going on, v++) -h this help text @@ -187,7 +187,9 @@ function actionStart execute "$CRYPTSETUP_ $cargs_ luksOpen $TARGET_ $DM_NAME_" warn || execute "losetup -d $TARGET_" || \ die "could not luksOpen $TARGET_" if [[ "$FSCK_" == "true" ]] ; then - execute "fsck -C $DM_NAME_" || die "fsck failed on $DM_NAME_" + execute "fsck -C $DM_PATH_" || die "fsck failed on $DM_PATH_" + elif [[ "$FSCK_" == "trueforce" ]] ; then + execute "fsck -f -C $DM_PATH_" || die "fsck failed on $DM_PATH_" fi margs_="" $READONLY_SET_ && margs_='-r' @@ -209,10 +211,25 @@ function actionStop dm_path_=`echo $dm_path_ |awk '{print $1}'` || die "could not get devicemapper name for $tmp_" dprint "dm_path_=\"$dm_path_\"" + # check for symlinks + unset tmp_dm_path_ + for dmapper in /dev/mapper/grml-crypt* ; do + link=$(readlink -f "$dmapper") + dprint "looping device mapper devices, dmapper=$dmapper => link=$link" + if [ "$link" = "$dm_path_" ] ; then + tmp_dm_path_="$dmapper" + fi + done + + if [ -n "$tmp_dm_path_" ] ; then + dm_path_="$tmp_dm_path_" + unset tmp_dm_path_ + fi + dm_name_="${dm_path_##*/}" dprint "dm_name_=\"$dm_name_\"" - dmsetup info $dm_name_ >/dev/null ||die "$dm_name_ is not aktive" + dmsetup info $dm_name_ >/dev/null ||die "$dm_name_ is not active" device_=`$CRYPTSETUP_ status $dm_name_ |awk '/device:/{print $2}'` || \ die "could not get underlying device of $dm_path_" dprint "device_=\"$device_\"" @@ -222,7 +239,7 @@ function actionStop echo "$device_" |grep loop &>/dev/null && execute "losetup -d $device_" \ die "could not delete loop device $device_" || \ execute "losetup -d $device_ &>/dev/null" eprint "could not delete loop device $device_, \ -this device could possible not be a loop device => maybe bogus error" +this device possibly is not a loop device => maybe bogus error" notice "$mp_ successfully unmountet/closed/deleted" } @@ -351,7 +368,12 @@ while getopts "s:t:rzoyfFm:hvS:C:I:A:" opt; do OPTIMIZED_MODE_SET_='true' ;; y) VERIFY_PW_="--verify-passphrase" ;; f) FORCE_='true' ;; - F) FSCK_='true' ;; + F) if [[ "$FSCK_" == "true" ]] ; then + FSCK_='trueforce' + else + FSCK_='true' + fi + ;; m) ADDITIONAL_MOUNT_ARGS_="$OPTARG" ;; h) printUsage; exit ;; v) let verbose_=$verbose_+1 ;;