mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-20 10:50:08 +03:00
F #2353: Create volatiled disks as LV for fs_lvm
This commit is contained in:
parent
d9fc1fffce
commit
5c711d8ba7
@ -1 +0,0 @@
|
||||
../shared/mkimage
|
97
src/tm_mad/fs_lvm/mkimage
Executable file
97
src/tm_mad/fs_lvm/mkimage
Executable file
@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2019, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# mkimage size format host:remote_system_ds/disk.i vmid dsid
|
||||
# - size in MB of the image
|
||||
# - format for the image
|
||||
# - remote_system_ds is the path for the system datastore in the host
|
||||
# - vmid is the id of the VM
|
||||
# - dsid is the target datastore (0 is the system datastore)
|
||||
|
||||
SIZE=$1
|
||||
FSTYPE=$2
|
||||
DST=$3
|
||||
VM_ID=$4
|
||||
|
||||
if [ -z "${ONE_LOCATION}" ]; then
|
||||
TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
|
||||
else
|
||||
TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
|
||||
fi
|
||||
|
||||
DRIVER_PATH=$(dirname $0)
|
||||
|
||||
source $TMCOMMON
|
||||
source ${DRIVER_PATH}/../../datastore/libfs.sh
|
||||
source ${DRIVER_PATH}/../../etc/tm/fs_lvm/fs_lvm.conf
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Set dst path and dir
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
DST_PATH=`arg_path $DST`
|
||||
DST_HOST=`arg_host $DST`
|
||||
DST_DIR=`dirname $DST_PATH`
|
||||
|
||||
DS_SYS_ID=$(basename $(dirname $DST_DIR))
|
||||
DST_DS_PATH="$(dirname $(dirname $(dirname $DST_PATH)))"
|
||||
DISK_ID=$(basename ${DST_PATH} | cut -d. -f2)
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Create the logical volume and link it
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
LV_NAME="lv-one-$VM_ID-$DISK_ID"
|
||||
VG_NAME="vg-one-$DS_SYS_ID"
|
||||
DEV="/dev/${VG_NAME}/${LV_NAME}"
|
||||
|
||||
# Execute lvcreate with a lock in the frontend
|
||||
CREATE_CMD=$(cat <<EOF
|
||||
set -e -o pipefail
|
||||
$SUDO $SYNC
|
||||
$SUDO $LVSCAN
|
||||
$SUDO $LVCREATE --wipesignatures n -L${SIZE}M -n $LV_NAME $VG_NAME
|
||||
EOF
|
||||
)
|
||||
|
||||
LOCK="tm-fs_lvm-${DS_SYS_ID}.lock"
|
||||
exclusive "${LOCK}" 120 ssh_exec_and_log "$DST_HOST" "$CREATE_CMD" \
|
||||
"Error creating LV named $LV_NAME"
|
||||
|
||||
MKIMAGE_CMD=$(cat <<EOF
|
||||
set -e -o pipefail
|
||||
mkdir -p $DST_DIR
|
||||
|
||||
hostname -f >"${DST_DIR}/.host" || :
|
||||
|
||||
# zero the volume
|
||||
if [ "${ZERO_LVM_ON_CREATE}" = "yes" ]; then
|
||||
${DD} if=/dev/zero of="${DEV}" bs=64k || :
|
||||
fi
|
||||
|
||||
[ "$FSTYPE" = "swap" ] && mkswap ${DEV}
|
||||
|
||||
rm -f "$DST_PATH"
|
||||
ln -s "$DEV" "$DST_PATH"
|
||||
EOF
|
||||
)
|
||||
|
||||
ssh_exec_and_log "$DST_HOST" "$MKIMAGE_CMD" \
|
||||
"Could not create image $DST_PATH"
|
||||
exit 0
|
Loading…
x
Reference in New Issue
Block a user