summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominique Martinet <asmadeus@codewreck.org>2011-06-06 13:48:50 +0900
committerDominique Martinet <asmadeus@codewreck.org>2011-06-06 13:57:39 +0900
commit7f0296f5e6290cbe2792f4678ac094fc62397a96 (patch)
tree9da9ac3b456bcad7ad40e5a67beefc673a724658
parentcaf64932b9ea8d5351e1712912e492eb69f8f9c6 (diff)
first try on adding lvm_activate/deactivate. not an option yet.
-rwxr-xr-xkvm-wrapper.sh27
1 files changed, 27 insertions, 0 deletions
diff --git a/kvm-wrapper.sh b/kvm-wrapper.sh
index 653b846..ad94ab2 100755
--- a/kvm-wrapper.sh
+++ b/kvm-wrapper.sh
@@ -245,6 +245,20 @@ function kvm_nbd_disconnect ()
}
# LVM helpers
+function check_activate_lv ()
+{
+ for DISK in $@; do
+ [[ "$DISK" == "/dev/$LVM_VG_NAME/"* ]] && lvchange -ay "$DISK"
+ done
+}
+
+function check_deactivate_lv ()
+{
+ for DISK in $@; do
+ [[ "$DISK" == "/dev/$LVM_VG_NAME/"* ]] && lvchange -an "$DISK"
+ done
+}
+
function lvm_create_disk ()
{
require_exec "$LVM_LVCREATE_BIN"
@@ -276,6 +290,7 @@ function lvm_mount_disk()
test_file "$PID_FILE" && fail_exit "VM $VM_NAME seems to be running! (PID file $PID_FILE exists)\nYou cannot mount disk on a running VM"
echo "Attempting to mount first partition of $KVM_DISK1"
+ [[ "$KVM_DISK1" == /dev/$LVM_VG_NAME/* ]] && lvchange -ay $KVM_DISK1
PART=`map_disk "$KVM_DISK1"`
mkdir -p "/mnt/$VM_NAME"
mount "$PART" "/mnt/$VM_NAME"
@@ -289,6 +304,7 @@ function lvm_umount_disk()
umount "/mnt/$VM_NAME"
rmdir "/mnt/$VM_NAME"
unmap_disk "$KVM_DISK1"
+ [[ "$KVM_DISK1" == /dev/$LVM_VG_NAME/* ]] && lvchange -an $KVM_DISK1
set +e
}
@@ -410,6 +426,9 @@ function kvm_start_vm ()
[[ -n "$KVM_INITRD" ]] && LINUXBOOT="$LINUXBOOT -initrd \"$KVM_INITRD\""
[[ -n "$KVM_APPEND" ]] && LINUXBOOT="$LINUXBOOT -append \"$KVM_APPEND\""
+ # If drive is a lv in the main vg, activate the lv
+ check_activate_lv "$KVM_DISK1" "$KVM_DISK2" "$KVM_DISK3" "$KVM_DISK4"
+
# Network scripts
[[ -z "$KVM_BRIDGE" ]] && KVM_BRIDGE="kvmnat"
export KVM_BRIDGE
@@ -449,6 +468,9 @@ function kvm_start_vm ()
rm -rf "$MONITOR_FILE"
rm -rf "$SERIAL_FILE"
+ # If drive is a lv in the main vg, deactivate the lv
+ check_deactivate_lv "$KVM_DISK1" "$KVM_DISK2" "$KVM_DISK3" "$KVM_DISK4"
+
# Exit
return 0
}
@@ -508,12 +530,15 @@ function kvm_run_disk ()
{
require_exec "$KVM_BIN"
KVM_DISK1="$1"
+ check_activate_lv "$KVM_DISK1"
test_file_rw "$KVM_DISK1" || "Couldn't read/write image file :\n$KVM_DISK1"
# Build kvm exec string
local EXEC_STRING="$KVM_BIN -net nic,model=$KVM_NETWORK_MODEL,macaddr=$KVM_MACADDRESS -net tap -hda $KVM_DISK1 -boot c $KVM_KEYMAP $KVM_OUTPUT $KVM_ADDITIONNAL_PARAMS"
eval "$EXEC_STRING"
+ check_deactivate_lv "$KVM_DISK1"
+
return 0
}
@@ -653,6 +678,8 @@ function kvm_bootstrap_vm ()
test_file "$BOOTSTRAP_SCRIPT" || fail_exit "Couldn't read $BOOTSTRAP_SCRIPT to bootstrap $VM_NAME as $BOOTSTRAP_DISTRIB"
source "$BOOTSTRAP_SCRIPT"
+ check_activate_lv "$KVM_DISK1"
+ CLEANUP+=("check_deactivate_lv \"$KVM_DISK1\"")
if ! test_blockdev "$KVM_DISK1"
then
require_exec "$KVM_NBD_BIN"