• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Kann verschlüsselte Partition nicht mehr mounten!

veltins

Newbie
Hallo,
ich habe mit Hilfe von Yast (OS11) eine Partition verschlüsselt (LUKS Image,
nicht beim Systemstart einhängen, durch Benutzer mounten).

Folgender Eintrag steht in fstab:
/dev/disk/by-id/scsi-SATA_SAMSUNG_SP2514NS08BJ10Y611181-part11 /(Name_der_Partition) crypt user,noauto,acl,user_xattr 0 0

Funktionierte auch seit ein paar Wochen, allerdings nur als "root".
Vorgestern wollte ich die Partition mounten, als in der
Konsole folgende Fehlermeldung erschien:
/sbin/mount.crypt: line 93: syntax error near unexpected token `else'
/sbin/mount.crypt: line 93: `else'

Ich habe natürlich im Netz recherchiert und auch mit "cryptconfig"
versucht auf die Partition zuzugreifen - leider erfolglos.

Ja, es gibt ein Backup - aber leider fehlen dort drei wichtige Dateien,
weshalb ich die Partition ungerne löschen oder formatieren möchte.

Wer kann helfen?

Gruß und Dank
veltins
 

scummos

Hacker
Naja, also einen Syntax Error könnte ich vielleicht auch ohne Ahnung von verschlüsselten Partitionen zu haben finden...
Zeig doch mal das Skript her, vor allem das um Zeile 93 rum ;)

lg Sven
 
OP
V

veltins

Newbie
Hallo,
hier ist das Skript
---------------------------------------------------------------------------

# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# Sanitize environment
export PATH="/sbin:/bin:/usr/sbin:/usr/bin";
export IFS=`echo -en " \t\n"`;

OPTIONS=""
FSTYPE="";

if [[ -n "$_PMT_DEBUG_LEVEL" && "$_PMT_DEBUG_LEVEL" -ge 2 ]]; then
set -x;
fi;

function help()
{
cat <<-EOF
Usage: $0 [-o options] device directory
EOF
}

function _losetup()
{
local DEVICE;
local LOOPDEV;

DEVICE="$1";
LOOPDEV=0
while [ "$LOOPDEV" -le 15 ]; do
if losetup "/dev/loop$LOOPDEV" "$DEVICE" 2>/dev/null; then
echo "/dev/loop$LOOPDEV";
return 0
fi
LOOPDEV=$[$LOOPDEV+1];
done
echo "${0##*/}: error setting up loop device for $DEVICE" >&2
exit 1
}

argv=$(getopt -o "ho:" -- "$@");
if [[ "$?" -ne 0 ]]; then
s="$?";
help >&2;
exit $s;
fi;
eval "set -- $argv";
while [[ "$#" -gt 0 ]]; do
case "$1" in
(-h)
help;
exit 0;
;;
(-o)
OPTIONS="$2";
shift 2;
;;
(--)
shift;
break;
;;
(*)
echo "Dunno what to do with $1" >&2;
shift;
;;
esac;
done;

DEVICE="$1";
DMDEVICE="$1";
MOUNT_POINT="$2";
shift 2;

if [ -z "$DEVICE" ]; then
echo "${0##*/}: device to mount not specified" >&2
help >&2;
exit 1;
fi

if [ ! -d "$MOUNT_POINT" ]; then
echo "${0##*/}: $MOUNT_POINT not specified or is not a directory" >&2;
help >&2;
exit 1
fi

if [ -b "$DEVICE" ]; then
# $DEVICE already refers to a block device.
else
tgt=$(readlink -f "$DEVICE");
if [ -f "$tgt" ]; then
DEVICE=$(_losetup "$DEVICE");
if [ -z "$DEVICE" ]; then
exit 1;
fi;
LOOP=true;
else
# Anything but files do not make sense.
echo "${0##*/}: $DEVICE is neither a block device nor file" >&2;
exit 1;
fi;
fi;

CIPHER=""
dm_timeout=5;
KEYSIZE=""
keyfile="";
HASH=""
luks_ro="";
DOFSCK=false;
MOUNTOPTIONS=""
OLDIFS="$IFS";
IFS=",";

for opt in $OPTIONS; do
KEY="${opt%%=*}";
VAL="${opt#*=}";
case "$KEY" in
(cipher) CIPHER="$VAL";;
(dm-timeout) dm_timeout="$VAL";;
(keysize) KEYSIZE="$VAL";;
(hash) HASH="$VAL";;
(fstype) FSTYPE="$VAL";;
(fsck) DOFSCK="true";;
(keyfile)
keyfile="$VAL";;
(loop)
echo "\"loop\" option ignored by mount.crypt - autodetected" >&2;
;;
(*)
if [ "$opt" == "ro" ]; then
luks_ro="--readonly";
elif [ "$opt" == "rw" ]; then
luks_ro="";
fi;
if [ -z "$MOUNTOPTIONS" ]; then
MOUNTOPTIONS="$opt"
else
MOUNTOPTIONS="$MOUNTOPTIONS,$opt"
fi
;;
esac
done
IFS="$OLDIFS";

DMDEVICE="${DMDEVICE//\//_}";

# Check for LUKS
if cryptsetup isLuks "$DEVICE" 2>/dev/null; then
LUKS=true;
if [ -z "$keyfile" ]; then
cryptsetup luksOpen $luks_ro "$DEVICE" "$DMDEVICE";
else
cryptsetup luksOpen $luks_ro -d "$keyfile" "$DEVICE" "$DMDEVICE";
fi;
else
LUKS=false;
if [ -z "$keyfile" ]; then
cryptsetup -c "${CIPHER:-aes}" -h "${HASH:-ripemd160}" \
-s ${KEYSIZE:-256} create "$DMDEVICE" "$DEVICE";
else
cryptsetup -c "${CIPHER:-aes}" -h "${HASH:-ripemd160}" \
-s ${KEYSIZE:-256} -d "$keyfile" \
create "$DMDEVICE" "$DEVICE";
fi;
fi;

if [ $? -ne 0 ]; then
echo "${0##*/}: error creating $DMDEVICE" >&2
[ "$LOOP" == true ] && losetup -d "$DEVICE";
exit 1
fi

for ((x = $dm_timeout * 3; x >= 0; --x)); do
[ -b "/dev/mapper/$DMDEVICE" ] && break;
sleep 0.33;
done;
if [ ! -b "/dev/mapper/$DMDEVICE" ]; then
echo "dm device $DMDEVICE did not show up in time." >&2;
fi;

if [ "$DOFSCK" == "true" ]; then
${FSCK:-fsck -p} "/dev/mapper/$DMDEVICE";
if [ $? -gt 1 ]; then
echo "${0##*/}: filesystem $DMDEVICE has errors" >&2;
if [ "$LUKS" == true ]; then
cryptsetup luksClose "$DMDEVICE";
else
cryptsetup remove "$DMDEVICE";
fi;
[ "$LOOP" == true ] && losetup -d "$DEVICE";
exit 1;
fi;
fi;

# $MOUNT_POINT might not exist as mount can try to read it from /etc/fstab
mount ${FSTYPE:+-t "$FSTYPE"} ${MOUNTOPTIONS:+-o "$MOUNTOPTIONS"} \
"/dev/mapper/$DMDEVICE" "$MOUNT_POINT";

if [ $? -ne 0 ]; then
echo "${0##*/}: error mounting $DMDEVICE" >&2;
if [ "$LUKS" == true ]; then
cryptsetup luksClose "$DMDEVICE";
else
cryptsetup remove "$DMDEVICE";
fi;
[ "$LOOP" == true ] && losetup -d "$DEVICE";
exit 1;
fi;
 
Oben