1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-01-18 06:03:39 +03:00

B OpenNebula/one#6487: Fix SPARSE parameter ignored (#3033)

in TM cloning script 

- Added function get_ds_attribute to tm_common.sh to get a given attribute from a Datastore
- Using falloc preallocation mode on the qemu-img commands since it is faster than using full preallocation
- Note the cloning script when using the TM_MAD = ssh does not use qemu-img command. Instead it uses the tar command, hence it ignores the QCOW2_OPTIONS parameter
- Deleted get_ds_attribute function since it is no longer needed
- SPARSE is inherited from Datastore on oned.conf
- Changed resize statement so it uses same syntax as the clone statement

Signed-off-by: Alejandro Mosteiro <amosteiro@opennebula.io>
Co-authored-by: Tino Vázquez <cvazquez@opennebula.io>
This commit is contained in:
Aletibazo 2024-05-08 10:47:11 +02:00 committed by GitHub
parent e1b5bc6b44
commit 1f9b15cd95
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 11 deletions

View File

@ -1097,6 +1097,7 @@ INHERIT_DATASTORE_ATTR = "GLUSTER_VOLUME"
INHERIT_DATASTORE_ATTR = "DISK_TYPE"
INHERIT_DATASTORE_ATTR = "ALLOW_ORPHANS"
INHERIT_DATASTORE_ATTR = "QCOW2_STANDALONE"
INHERIT_DATASTORE_ATTR = "SPARSE"
INHERIT_DATASTORE_ATTR = "VCENTER_ADAPTER_TYPE"
INHERIT_DATASTORE_ATTR = "VCENTER_DISK_TYPE"

View File

@ -68,12 +68,14 @@ done < <(onevm show -x $VMID| $XPATH \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/SIZE \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/FORMAT \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/ORIGINAL_SIZE \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/QCOW2_STANDALONE)
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/QCOW2_STANDALONE \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/SPARSE)
SIZE="${XPATH_ELEMENTS[j++]}"
FORMAT="${XPATH_ELEMENTS[j++]}"
ORIGINAL_SIZE="${XPATH_ELEMENTS[j++]}"
QCOW2_STANDALONE="${XPATH_ELEMENTS[j++]}"
SPARSE="${XPATH_ELEMENTS[j++]}"
ssh_make_path $DST_HOST $DST_DIR
disable_local_monitoring $DST_HOST $DST_DIR
@ -84,10 +86,12 @@ disable_local_monitoring $DST_HOST $DST_DIR
if [ -n "$ORIGINAL_SIZE" ] && [ "$SIZE" -gt "$ORIGINAL_SIZE" ]; then
RESIZE_CMD="qemu-img resize ${DST_PATH} ${SIZE}M"
[[ "${SPARSE}" =~ ^(no|NO)$ ]] && RESIZE_CMD="qemu-img resize --preallocation=falloc ${DST_PATH} ${SIZE}M"
fi
if [ "$FORMAT" = "qcow2" ] && is_yes "${QCOW2_STANDALONE}"; then
CLONE_CMD=$(qcow_dir_cmd "$SRC_PATH" "$DST_PATH" "convert")
[[ "${SPARSE}" =~ ^(no|NO)$ ]] && CLONE_CMD="${CLONE_CMD/-O qcow2/-O qcow2 -S 0}"
elif [ "$FORMAT" = "qcow2" ]; then
CLONE_CMD=$(qcow_dir_cmd $SRC_PATH $DST_PATH "create")
else

View File

@ -66,11 +66,13 @@ while IFS= read -r -d '' element; do
done < <(onevm show -x $VMID| $XPATH \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/SIZE \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/FORMAT \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/ORIGINAL_SIZE)
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/ORIGINAL_SIZE \
/VM/TEMPLATE/DISK\[DISK_ID=$DISK_ID\]/SPARSE)
SIZE="${XPATH_ELEMENTS[j++]}"
FORMAT="${XPATH_ELEMENTS[j++]}"
ORIGINAL_SIZE="${XPATH_ELEMENTS[j++]}"
SPARSE="${XPATH_ELEMENTS[j++]}"
#-------------------------------------------------------------------------------
# Copy files to the remote host
@ -78,10 +80,12 @@ ORIGINAL_SIZE="${XPATH_ELEMENTS[j++]}"
if [ -n "$ORIGINAL_SIZE" ] && [ "$SIZE" -gt "$ORIGINAL_SIZE" ]; then
RESIZE_CMD="qemu-img resize ${DST_PATH} ${SIZE}M"
[[ "${SPARSE}" =~ ^(no|NO)$ ]] && RESIZE_CMD="qemu-img resize --preallocation=falloc ${DST_PATH} ${SIZE}M"
fi
if [ "$FORMAT" = "qcow2" ]; then
CLONE_CMD=$(qcow_dir_cmd "$SRC_PATH" "$DST_PATH" "convert")
[[ "${SPARSE}" =~ ^(no|NO)$ ]] && CLONE_CMD="${CLONE_CMD/-O qcow2/-O qcow2 -S 0}"
else
CLONE_CMD="cp $SRC_PATH $DST_PATH"
fi

View File

@ -79,11 +79,11 @@ while IFS= read -r -d '' element; do
done < <(onevm show -x $VMID| $XPATH \
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SIZE \
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/ORIGINAL_SIZE \
/VM/HISTORY_RECORDS/HISTORY[last\(\)]/DS_ID)
/VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SPARSE)
SIZE="${XPATH_ELEMENTS[j++]}"
ORIGINAL_SIZE="${XPATH_ELEMENTS[j++]}"
SYS_DS_ID="${XPATH_ELEMENTS[j++]}"
SPARSE="${XPATH_ELEMENTS[j++]}"
#-------------------------------------------------------------------------------
# Check for REPLICA_HOST in DATASTORE TEMPLATE and exec ./$0.replica if found
@ -107,8 +107,13 @@ COPY_CMD=$(cat <<EOF
SRC_SNAP="${SRC_FILE}.snap"
fi
if [[ "${SPARSE}" =~ ^(no|NO)$ ]]; then
$TAR -C $SRC_DIR --transform="flags=r;s|$SRC_FILE|$DST_FILE|" -cf - $SRC_FILE \$SRC_SNAP | \
$SSH $DST_HOST "$TAR -xf - -C $DST_DIR"
else
$TAR -C $SRC_DIR --transform="flags=r;s|$SRC_FILE|$DST_FILE|" -cSf - $SRC_FILE \$SRC_SNAP | \
$SSH $DST_HOST "$TAR -xSf - -C $DST_DIR"
fi
EOF
)
@ -116,7 +121,12 @@ ssh_forward ssh_exec_and_log "$SRC_HOST" "$COPY_CMD" \
"Error copying $SRC_PATH to $DST"
if [ -n "$ORIGINAL_SIZE" ] && [ "$SIZE" -gt "$ORIGINAL_SIZE" ]; then
if [[ "${SPARSE}" =~ ^(no|NO)$ ]]; then
RESIZE_CMD="qemu-img resize --preallocation=falloc ${DST_PATH} ${SIZE}M"
else
RESIZE_CMD="qemu-img resize ${DST_PATH} ${SIZE}M"
fi
ssh_exec_and_log "$DST_HOST" "$RESIZE_CMD" \
"Error resizing image $DST"
fi