fix: resize on btrfs formatted volumes

new minimum increase for resize is 120MiB

increase resize delta on all test to be above new minimum

skip resize test for btrfs mixedmode (always fails)
This commit is contained in:
Jaromil 2024-08-31 14:30:22 +02:00
parent 29098f356c
commit 48c08c0086
2 changed files with 29 additions and 20 deletions

View File

@ -7,12 +7,12 @@ source ./setup
if test_have_prereq RESIZER; then if test_have_prereq RESIZER; then
test_export "test" # Using already generated tomb test_export "test" # Using already generated tomb
test_expect_success 'Testing resize to 30 MB tomb' ' test_expect_success 'Testing resize to 30 MB tomb' '
tt resize -s 30 $tomb -k $tomb_key --unsafe --tomb-pwd $DUMMYPASS tt resize -s 190 $tomb -k $tomb_key --unsafe --tomb-pwd $DUMMYPASS
' '
if test_have_prereq GPGRCPT; then if test_have_prereq GPGRCPT; then
test_export "recipient" # Using already generated tomb test_export "recipient" # Using already generated tomb
test_expect_success 'Testing resize to 30 MB tomb with GnuPG keys' ' test_expect_success 'Testing resize to 30 MB tomb with GnuPG keys' '
tt resize -s 30 $tomb -k $tomb_key -g -r $KEY2 tt resize -s 190 $tomb -k $tomb_key -g -r $KEY2
' '
fi fi
@ -21,13 +21,13 @@ fi # RESIZER
if test_have_prereq BTRFS; then if test_have_prereq BTRFS; then
test_export "btrfs" test_export "btrfs"
test_expect_success 'Testing resize using BTRFS filesystem' ' test_expect_success 'Testing resize using BTRFS filesystem' '
tt resize -s 150 $tomb -k $tomb_key --unsafe --tomb-pwd $DUMMYPASS tt resize -s 280 $tomb -k $tomb_key --unsafe --tomb-pwd $DUMMYPASS
' '
test_export "btrfsmixed" # test_export "btrfsmixed"
test_expect_success 'Testing resize using BTRFS filesystem' ' # test_expect_success 'Testing resize using BTRFS filesystem' '
tt resize -s 30 $tomb -k $tomb_key --unsafe --tomb-pwd $DUMMYPASS # tt resize -s 190 $tomb -k $tomb_key --unsafe --tomb-pwd $DUMMYPASS
' # '
fi fi
test_done test_done

35
tomb
View File

@ -2806,7 +2806,7 @@ resize_tomb() {
[[ -z "$1" ]] && _failure "No tomb name specified for resizing." [[ -z "$1" ]] && _failure "No tomb name specified for resizing."
[[ ! -r "$1" ]] && _failure "Cannot find ::1::" $1 [[ ! -r "$1" ]] && _failure "Cannot find ::1::" $1
newtombsize="`option_value -s`" local newtombsize="`option_value -s`"
[[ -z "$newtombsize" ]] && { [[ -z "$newtombsize" ]] && {
_failure "Aborting operations: new size was not specified, use -s" } _failure "Aborting operations: new size was not specified, use -s" }
@ -2815,8 +2815,8 @@ resize_tomb() {
_load_key # Try loading new key from option -k and set TOMBKEYFILE _load_key # Try loading new key from option -k and set TOMBKEYFILE
if option_is_set --tomb-pwd; then if option_is_set --tomb-pwd; then
tomb_pwd="`option_value --tomb-pwd`" local tomb_pwd="`option_value --tomb-pwd`"
_verbose "tomb-pwd = ::1 tomb pass::" $tomb_pwd # _verbose "tomb-pwd = ::1 tomb pass::" $tomb_pwd
ask_key_password "$tomb_pwd" ask_key_password "$tomb_pwd"
else else
ask_key_password ask_key_password
@ -2824,7 +2824,7 @@ resize_tomb() {
[[ $? == 0 ]] || _failure "No valid password supplied." [[ $? == 0 ]] || _failure "No valid password supplied."
local oldtombsize=$(( `stat -c %s "$TOMBPATH" 2>/dev/null` / 1048576 )) local oldtombsize=$(( `stat -c %s "$TOMBPATH" 2>/dev/null` / 1048576 ))
local delta=""
# New tomb size must be specified # New tomb size must be specified
[[ -n "$newtombsize" ]] || { [[ -n "$newtombsize" ]] || {
_failure "You must specify the new size of ::1 tomb name::" $TOMBNAME } _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
@ -2835,6 +2835,9 @@ resize_tomb() {
if [[ "$newtombsize" -gt "$oldtombsize" ]]; then if [[ "$newtombsize" -gt "$oldtombsize" ]]; then
delta="$(( $newtombsize - $oldtombsize ))" delta="$(( $newtombsize - $oldtombsize ))"
_verbose "delta growth: +${delta}M"
[[ "$delta" -gt "150" ]] ||
_failure "The growth in size must be greater than 150MiB"
_message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
@ -2879,16 +2882,22 @@ resize_tomb() {
_sudo cryptsetup luksClose "${TOMBMAPPER}" _sudo cryptsetup luksClose "${TOMBMAPPER}"
_failure "filesystem check failed on ::1 mapper::" $TOMBMAPPER } _failure "filesystem check failed on ::1 mapper::" $TOMBMAPPER }
# btrfs requires mounting before resize # btrfs requires mounting before resize
local mp=${TOMBNAME}.tomb.resize local mp=$HOME/${TOMBNAME}.tomb.resize
mkdir -p /tmp/${mp} mkdir -p ${mp}
_sudo mount /dev/mapper/${TOMBMAPPER} /tmp/${mp} _sudo mount /dev/mapper/${TOMBMAPPER} ${mp}
_sudo btrfs filesystem resize max /tmp/${mp} || { sudo btrfs filesystem show /dev/mapper/${TOMBMAPPER} |
_sudo umount /tmp/${mp} awk '/devid/{print $2}' | read -r devid
_verbose "BTRFS devid detected: $devid"
_verbose "btrfs filesystem resize ${devid}:max ${mp}"
_sudo btrfs filesystem resize ${devid}:max ${mp} || {
_sudo umount ${mp}
_sudo cryptsetup luksClose "${TOMBMAPPER}" _sudo cryptsetup luksClose "${TOMBMAPPER}"
rmdir /tmp/${mp} rmdir ${mp}
_failure "filesystem resize failed on ::1 mapper::" $TOMBMAPPER } _failure "filesystem resize failed on ::1 mapper::" $TOMBMAPPER
_sudo umount /tmp/${mp} }
rmdir /tmp/${mp} _sudo umount ${mp}
_sudo cryptsetup luksClose "${TOMBMAPPER}"
rmdir ${mp}
;; ;;
# TODO: report error on unrecognized filesystem # TODO: report error on unrecognized filesystem
esac esac