iteasier to continue resizing if interrupted - tomb - the crypto undertaker Err parazyd.org 70 hgit clone git://parazyd.org/tomb.git URL:git://parazyd.org/tomb.git parazyd.org 70 1Log /git/tomb/log.gph parazyd.org 70 1Files /git/tomb/files.gph parazyd.org 70 1Refs /git/tomb/refs.gph parazyd.org 70 1README /git/tomb/file/README.md.gph parazyd.org 70 1LICENSE /git/tomb/file/COPYING.gph parazyd.org 70 i--- Err parazyd.org 70 1commit 9090bfaff924250473c4a3d7d36be14ce490ea51 /git/tomb/commit/9090bfaff924250473c4a3d7d36be14ce490ea51.gph parazyd.org 70 1parent 8eeb3613005d7fce4a17d4cb7fa2d98ca753c6d6 /git/tomb/commit/8eeb3613005d7fce4a17d4cb7fa2d98ca753c6d6.gph parazyd.org 70 hAuthor: Jaromil URL:mailto:jaromil@dyne.org parazyd.org 70 iDate: Sat, 7 Nov 2015 14:20:43 +0100 Err parazyd.org 70 i Err parazyd.org 70 ieasier to continue resizing if interrupted Err parazyd.org 70 i Err parazyd.org 70 iif resize is launched at same size, will run partition resize Err parazyd.org 70 ihelps continuing if i.e: pinentry expired waiting for password Err parazyd.org 70 iafter a long resize while operator is away: jurt rerun resize command Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i M tomb | 42 +++++++++++++++++++------------ Err parazyd.org 70 i Err parazyd.org 70 i1 file changed, 26 insertions(+), 16 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/tomb b/tomb /git/tomb/file/tomb.gph parazyd.org 70 it@@ -599,7 +599,7 @@ usage() { Err parazyd.org 70 i _print "Commands:" Err parazyd.org 70 i _print "\000" Err parazyd.org 70 i _print " // Creation:" Err parazyd.org 70 i- _print " dig create a new empty TOMB file of size -s in MB" Err parazyd.org 70 i+ _print " dig create a new empty TOMB file of size -s in MiB" Err parazyd.org 70 i _print " forge create a new KEY file and set its password" Err parazyd.org 70 i _print " lock installs a lock on a TOMB to use it with KEY" Err parazyd.org 70 i _print "\000" Err parazyd.org 70 it@@ -631,7 +631,7 @@ usage() { Err parazyd.org 70 i _print "\000" Err parazyd.org 70 i _print "Options:" Err parazyd.org 70 i _print "\000" Err parazyd.org 70 i- _print " -s size of the tomb file when creating/resizing one (in MB)" Err parazyd.org 70 i+ _print " -s size of the tomb file when creating/resizing one (in MiB)" Err parazyd.org 70 i _print " -k path to the key to be used ('-k -' to read from stdin)" Err parazyd.org 70 i _print " -n don't process the hooks found in tomb" Err parazyd.org 70 i _print " -o options passed to commands: open, lock, forge (see man)" Err parazyd.org 70 it@@ -1365,7 +1365,7 @@ engrave_key() { Err parazyd.org 70 i Err parazyd.org 70 i # Step one - Dig a tomb Err parazyd.org 70 i # Err parazyd.org 70 i-# Synopsis: dig_tomb /path/to/tomb -s sizemegabytes Err parazyd.org 70 i+# Synopsis: dig_tomb /path/to/tomb -s sizemebibytes Err parazyd.org 70 i # Err parazyd.org 70 i # It will create an empty file to be formatted as a loopback Err parazyd.org 70 i # filesystem. Initially the file is filled with random data taken Err parazyd.org 70 it@@ -1382,8 +1382,8 @@ dig_tomb() { Err parazyd.org 70 i Err parazyd.org 70 i [[ -n "$tombpath" ]] || _failure "Missing path to tomb" Err parazyd.org 70 i [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s" Err parazyd.org 70 i- [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)" Err parazyd.org 70 i- [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes" Err parazyd.org 70 i+ [[ $tombsize == <-> ]] || _failure "Size must be an integer (mebibytes)" Err parazyd.org 70 i+ [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 mebibytes" Err parazyd.org 70 i Err parazyd.org 70 i _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME} Err parazyd.org 70 i Err parazyd.org 70 it@@ -2272,7 +2272,7 @@ search_tombs() { Err parazyd.org 70 i resize_tomb() { Err parazyd.org 70 i local tombpath="$1" # First argument is the path to the tomb Err parazyd.org 70 i Err parazyd.org 70 i- _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s] Err parazyd.org 70 i+ _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: mebibytes." $1 $OPTS[-s] Err parazyd.org 70 i Err parazyd.org 70 i [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing." Err parazyd.org 70 i [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath Err parazyd.org 70 it@@ -2298,19 +2298,28 @@ resize_tomb() { Err parazyd.org 70 i _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME } Err parazyd.org 70 i # New tomb size must be an integer Err parazyd.org 70 i [[ $newtombsize == <-> ]] || _failure "Size is not an integer." Err parazyd.org 70 i- # Tombs can only grow in size Err parazyd.org 70 i- [[ "$newtombsize" -gt "$oldtombsize" ]] || { Err parazyd.org 70 i- _failure "The new size must be greater then old tomb size." } Err parazyd.org 70 i- Err parazyd.org 70 i- delta="$(( $newtombsize - $oldtombsize ))" Err parazyd.org 70 i Err parazyd.org 70 i- _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize Err parazyd.org 70 i+ # Tombs can only grow in size Err parazyd.org 70 i+ if [[ "$newtombsize" -gt "$oldtombsize" ]]; then Err parazyd.org 70 i Err parazyd.org 70 i- _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]} Err parazyd.org 70 i- ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH Err parazyd.org 70 i+ delta="$(( $newtombsize - $oldtombsize ))" Err parazyd.org 70 i Err parazyd.org 70 i- [[ $? == 0 ]] || { Err parazyd.org 70 i- _failure "Error creating the extra resize ::1 size::, operation aborted." $tmp_resize } Err parazyd.org 70 i+ _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize Err parazyd.org 70 i+ Err parazyd.org 70 i+ _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]} Err parazyd.org 70 i+ ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH Err parazyd.org 70 i+ [[ $? == 0 ]] || { Err parazyd.org 70 i+ _failure "Error creating the extra resize ::1 size::, operation aborted." \ Err parazyd.org 70 i+ $tmp_resize } Err parazyd.org 70 i+ Err parazyd.org 70 i+ # If same size this allows to re-launch resize if pinentry expires Err parazyd.org 70 i+ # so that it will continue resizing without appending more space. Err parazyd.org 70 i+ # Resizing the partition to the file size cannot harm data anyway. Err parazyd.org 70 i+ elif [[ "$newtombsize" = "$oldtombsize" ]]; then Err parazyd.org 70 i+ _message "Tomb seems resized already, operating filesystem stretch" Err parazyd.org 70 i+ else Err parazyd.org 70 i+ _failure "The new size must be greater then old tomb size." Err parazyd.org 70 i+ fi Err parazyd.org 70 i Err parazyd.org 70 i { option_is_set --tomb-pwd } && { Err parazyd.org 70 i tomb_pwd="`option_value --tomb-pwd`" Err parazyd.org 70 it@@ -2327,6 +2336,7 @@ resize_tomb() { Err parazyd.org 70 i mapdate=`date +%s` Err parazyd.org 70 i mapper="tomb.$TOMBNAME.$mapdate.$(basename $nstloop)" Err parazyd.org 70 i Err parazyd.org 70 i+ _message "opening tomb" Err parazyd.org 70 i _cryptsetup luksOpen ${nstloop} ${mapper} || { Err parazyd.org 70 i _failure "Failure mounting the encrypted file." } Err parazyd.org 70 i Err parazyd.org 70 .