tomb

the crypto undertaker
git clone git://parazyd.org/tomb.git
Log | Files | Refs | README | LICENSE

commit 9090bfaff924250473c4a3d7d36be14ce490ea51
parent 8eeb3613005d7fce4a17d4cb7fa2d98ca753c6d6
Author: Jaromil <jaromil@dyne.org>
Date:   Sat,  7 Nov 2015 14:20:43 +0100

easier to continue resizing if interrupted

if resize is launched at same size, will run partition resize
helps continuing if i.e: pinentry expired waiting for password
after a long resize while operator is away: jurt rerun resize command

Diffstat:
Mtomb | 42++++++++++++++++++++++++++----------------
1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/tomb b/tomb @@ -599,7 +599,7 @@ usage() { _print "Commands:" _print "\000" _print " // Creation:" - _print " dig create a new empty TOMB file of size -s in MB" + _print " dig create a new empty TOMB file of size -s in MiB" _print " forge create a new KEY file and set its password" _print " lock installs a lock on a TOMB to use it with KEY" _print "\000" @@ -631,7 +631,7 @@ usage() { _print "\000" _print "Options:" _print "\000" - _print " -s size of the tomb file when creating/resizing one (in MB)" + _print " -s size of the tomb file when creating/resizing one (in MiB)" _print " -k path to the key to be used ('-k -' to read from stdin)" _print " -n don't process the hooks found in tomb" _print " -o options passed to commands: open, lock, forge (see man)" @@ -1365,7 +1365,7 @@ engrave_key() { # Step one - Dig a tomb # -# Synopsis: dig_tomb /path/to/tomb -s sizemegabytes +# Synopsis: dig_tomb /path/to/tomb -s sizemebibytes # # It will create an empty file to be formatted as a loopback # filesystem. Initially the file is filled with random data taken @@ -1382,8 +1382,8 @@ dig_tomb() { [[ -n "$tombpath" ]] || _failure "Missing path to tomb" [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s" - [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)" - [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes" + [[ $tombsize == <-> ]] || _failure "Size must be an integer (mebibytes)" + [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 mebibytes" _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME} @@ -2272,7 +2272,7 @@ search_tombs() { resize_tomb() { local tombpath="$1" # First argument is the path to the tomb - _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s] + _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: mebibytes." $1 $OPTS[-s] [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing." [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath @@ -2298,19 +2298,28 @@ resize_tomb() { _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME } # New tomb size must be an integer [[ $newtombsize == <-> ]] || _failure "Size is not an integer." - # Tombs can only grow in size - [[ "$newtombsize" -gt "$oldtombsize" ]] || { - _failure "The new size must be greater then old tomb size." } - - delta="$(( $newtombsize - $oldtombsize ))" - _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize + # Tombs can only grow in size + if [[ "$newtombsize" -gt "$oldtombsize" ]]; then - _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]} - ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH + delta="$(( $newtombsize - $oldtombsize ))" - [[ $? == 0 ]] || { - _failure "Error creating the extra resize ::1 size::, operation aborted." $tmp_resize } + _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize + + _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]} + ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH + [[ $? == 0 ]] || { + _failure "Error creating the extra resize ::1 size::, operation aborted." \ + $tmp_resize } + + # If same size this allows to re-launch resize if pinentry expires + # so that it will continue resizing without appending more space. + # Resizing the partition to the file size cannot harm data anyway. + elif [[ "$newtombsize" = "$oldtombsize" ]]; then + _message "Tomb seems resized already, operating filesystem stretch" + else + _failure "The new size must be greater then old tomb size." + fi { option_is_set --tomb-pwd } && { tomb_pwd="`option_value --tomb-pwd`" @@ -2327,6 +2336,7 @@ resize_tomb() { mapdate=`date +%s` mapper="tomb.$TOMBNAME.$mapdate.$(basename $nstloop)" + _message "opening tomb" _cryptsetup luksOpen ${nstloop} ${mapper} || { _failure "Failure mounting the encrypted file." }