From fb7e22f4164bec68513a1c10de78897e5498a7a9 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Tue, 26 Jun 2018 10:42:58 +0200 Subject: [PATCH] B #2217: Zero LVM space --- src/tm_mad/fs_lvm/clone | 21 +++++++++++++++++++++ src/tm_mad/fs_lvm/delete | 14 ++++++++++++++ src/tm_mad/fs_lvm/resize | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/src/tm_mad/fs_lvm/clone b/src/tm_mad/fs_lvm/clone index 9a4b32ba0b..e012d4e2c2 100755 --- a/src/tm_mad/fs_lvm/clone +++ b/src/tm_mad/fs_lvm/clone @@ -82,6 +82,21 @@ if [ $FILE_SIZE -gt $SIZE ]; then SIZE="$FILE_SIZE" fi +# Compute the seek start for zeroing of the new LV as the smaller +# number of ONE or file image virtual size. We start to zero from +# 1 MiB before the end of image size prior to the copying. +if [ "${FILE_SIZE}" -lt "${SIZE}" ]; then + ZERO_SEEK_BYTES=$FILE_SIZE +else + ZERO_SEEK_BYTES=$SIZE +fi + +if [ "${ZERO_SEEK_BYTES}" -gt 0 ]; then + ZERO_SEEK_BYTES=$(( (ZERO_SEEK_BYTES-1) * 1024 * 1024 )) +else + ZERO_SEEK_BYTES=0 +fi + #------------------------------------------------------------------------------- # Create the snapshot and link it #------------------------------------------------------------------------------- @@ -109,6 +124,12 @@ CLONE_CMD=$(cat <"${DST_DIR}/.host" || : + # zero trailing space + LVSIZE=\$(${SUDO} ${LVS} --nosuffix --noheadings --units B -o lv_size "${DEV}" | tr -d '[:blank:]') + ${DD} if=/dev/zero of="${DEV}" bs=64k \ + oflag=seek_bytes iflag=count_bytes \ + seek="${ZERO_SEEK_BYTES}" count="\$(( LVSIZE - ${ZERO_SEEK_BYTES} ))" + $QEMU_IMG convert -O raw "$SRC_PATH" "$DEV" rm -f "$DST_PATH" ln -s "$DEV" "$DST_PATH" diff --git a/src/tm_mad/fs_lvm/delete b/src/tm_mad/fs_lvm/delete index 29529c9f4f..2ead40cee1 100755 --- a/src/tm_mad/fs_lvm/delete +++ b/src/tm_mad/fs_lvm/delete @@ -41,6 +41,17 @@ DST_HOST=`arg_host $DST` DS_SYS_ID=$(echo $DST_PATH | grep -E '\/disk\.[[:digit:]]+$' | $AWK -F '/' '{print $(NF-2)}') +# Zero space +ZERO_CMD=$(cat </dev/null; then + ${DD} if=/dev/zero of="\${DEV}" bs=64k || : + fi +EOF +) + # Delete the device if it's a clone (LVM snapshot) DELETE_CMD=$(cat <