diff options
author | Dominique Martinet <asmadeus@codewreck.org> | 2011-06-06 13:48:50 +0900 |
---|---|---|
committer | Dominique Martinet <asmadeus@codewreck.org> | 2011-06-06 13:57:39 +0900 |
commit | 7f0296f5e6290cbe2792f4678ac094fc62397a96 (patch) | |
tree | 9da9ac3b456bcad7ad40e5a67beefc673a724658 | |
parent | caf64932b9ea8d5351e1712912e492eb69f8f9c6 (diff) |
first try on adding lvm_activate/deactivate. not an option yet.
-rwxr-xr-x | kvm-wrapper.sh | 27 |
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" |