mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
fsadm: refactor resize_crypt function
split resize_crypt function in two. a) Detect proper dm-crypt device type and count new --size value for cryptsetup resize command. b) Perform the resize
This commit is contained in:
parent
9916d8fa9a
commit
dcc8f90c58
@ -607,16 +607,12 @@ resize_luks() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
#################################
|
detect_crypt_device() {
|
||||||
# Resize active crypt device
|
local CRYPT_TYPE
|
||||||
# (on direct user request only)
|
local L_NEWSIZE
|
||||||
#################################
|
local TMP
|
||||||
resize_crypt() {
|
|
||||||
local CRYPT_TYPE=
|
|
||||||
local TMP=
|
|
||||||
local SHRINK=0
|
|
||||||
|
|
||||||
which $CRYPTSETUP > /dev/null 2>&1 || error "$CRYPTSETUP utility required to resize LUKS volume"
|
which $CRYPTSETUP > /dev/null 2>&1 || error "$CRYPTSETUP utility required to resize crypt device"
|
||||||
|
|
||||||
CRYPT_TYPE=$($CRYPTSETUP status $1 2> /dev/null | $GREP "type:")
|
CRYPT_TYPE=$($CRYPTSETUP status $1 2> /dev/null | $GREP "type:")
|
||||||
|
|
||||||
@ -624,31 +620,38 @@ resize_crypt() {
|
|||||||
|
|
||||||
CRYPT_TYPE=${CRYPT_TYPE##*[[:space:]]}
|
CRYPT_TYPE=${CRYPT_TYPE##*[[:space:]]}
|
||||||
|
|
||||||
TMP=$NEWSIZE
|
|
||||||
|
|
||||||
decode_size "$2" 512
|
|
||||||
detect_device_size
|
|
||||||
|
|
||||||
if [ "$DEVSIZE" -gt "$NEWSIZE" ]; then
|
|
||||||
SHRINK=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
NEWSIZE=$TMP
|
|
||||||
|
|
||||||
if [ $SHRINK -eq 1 -a -z "$3" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# going to resize, drop the request flag
|
|
||||||
unset DO_CRYPTRESIZE
|
|
||||||
|
|
||||||
case "$CRYPT_TYPE" in
|
case "$CRYPT_TYPE" in
|
||||||
LUKS[12]|PLAIN)
|
LUKS[12]|PLAIN)
|
||||||
dry $CRYPTSETUP resize "$1" --size $NEWBLOCKCOUNT || error "Failed to resize device $1"
|
verbose "\"$1\" crypt device is type $CRYPT_TYPE"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
error "Unsupported crypt type \"$CRYPT_TYPE\""
|
error "Unsupported crypt type \"$CRYPT_TYPE\""
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
TMP=$NEWSIZE
|
||||||
|
decode_size "$2" 512
|
||||||
|
L_NEWSIZE=$NEWSIZE
|
||||||
|
NEWSIZE=$TMP
|
||||||
|
|
||||||
|
if [ $((L_NEWSIZE % 512)) -ne 0 ]; then
|
||||||
|
error "New size is not sector alligned"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CRYPT_RESIZE_BLOCKS=$NEWBLOCKCOUNT
|
||||||
|
|
||||||
|
if [ "$DEVSIZE" -ge "$L_NEWSIZE" ]; then
|
||||||
|
CRYPT_SHRINK=1
|
||||||
|
else
|
||||||
|
CRYPT_GROW=1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Resize active crypt device
|
||||||
|
# (on direct user request only)
|
||||||
|
#################################
|
||||||
|
resize_crypt() {
|
||||||
|
dry $CRYPTSETUP resize "$1" --size $CRYPT_RESIZE_BLOCKS || error "$CRYPTSETUP failed to resize device $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
####################
|
####################
|
||||||
@ -664,7 +667,8 @@ resize() {
|
|||||||
test -z "$NEWSIZE" && NEWSIZE=${DEVSIZE}b
|
test -z "$NEWSIZE" && NEWSIZE=${DEVSIZE}b
|
||||||
test -n "$NEWSIZE_ORIG" || NEWSIZE_ORIG=$NEWSIZE
|
test -n "$NEWSIZE_ORIG" || NEWSIZE_ORIG=$NEWSIZE
|
||||||
IFS=$NL
|
IFS=$NL
|
||||||
test -z "$DO_CRYPTRESIZE" || resize_crypt "$VOLUME_ORIG" "$NEWSIZE_ORIG"
|
test -z "$DO_CRYPTRESIZE" || detect_crypt_device "$VOLUME_ORIG" "$NEWSIZE_ORIG"
|
||||||
|
test -z "$CRYPT_GROW" || resize_crypt "$VOLUME_ORIG"
|
||||||
case "$FSTYPE" in
|
case "$FSTYPE" in
|
||||||
"ext3"|"ext2"|"ext4") resize_ext $NEWSIZE ;;
|
"ext3"|"ext2"|"ext4") resize_ext $NEWSIZE ;;
|
||||||
"reiserfs") resize_reiser $NEWSIZE ;;
|
"reiserfs") resize_reiser $NEWSIZE ;;
|
||||||
@ -674,7 +678,7 @@ resize() {
|
|||||||
resize_luks $NEWSIZE ;;
|
resize_luks $NEWSIZE ;;
|
||||||
*) error "Filesystem \"$FSTYPE\" on device \"$VOLUME\" is not supported by this tool." ;;
|
*) error "Filesystem \"$FSTYPE\" on device \"$VOLUME\" is not supported by this tool." ;;
|
||||||
esac || error "Resize $FSTYPE failed."
|
esac || error "Resize $FSTYPE failed."
|
||||||
test -z "$DO_CRYPTRESIZE" || resize_crypt "$VOLUME_ORIG" "$NEWSIZE_ORIG" do_shrink
|
test -z "$CRYPT_SHRINK" || resize_crypt "$VOLUME_ORIG"
|
||||||
}
|
}
|
||||||
|
|
||||||
####################################
|
####################################
|
||||||
|
Loading…
Reference in New Issue
Block a user