it-artikel:virtuelle-maschinen-per-skript-klonen-vmware-server-2.0-linux

Virtuelle Maschinen per Skript Klonen (VMWARE Server 2.0 Linux)

Mussten Sie auch schonmal einige nahezu gleiche virtuelle Maschinen installieren und haben sich gefragt ob man diese nicht einfach “kopieren” oder “klonen” könne ? Das geht jetzt! Lesen Sie hier mehr darüber wie Sie nun einfach und schnell eine VM per script klonen können.

Dieses Script “klont” eine VM innerhalb eines VMWARE-Storages. Es funktioniert dabei mit monolitischen virtuellen Disks sowie mit 2GB gesplitteten Disk-Files. Allerdings geht es zur Zeit noch davon aus dass eine VM nur “eine” virtuelle Disk besitzt welche dazu auch noch den gleichen Namen wie die VM selbst trägt. Zusätzlich vorhandene virtuelle Disk-Files werden zwar geklont, jedoch nicht automatisch umbenannt. Auch deren Disk-Konfigurationsdatei wird nicht automatisch angepasst.

In diesen speziellen Fällen muss man ggf noch die zusätzlichen Diskfiles per hand anpassen und neu einbinden.

Nachtrag:

Habe das Script nochmals gründlich überarbeitet und viele problematische Stellen bereinigt. Die aktuelle Version wird nachfolgend angezeigt und ist nun auch mit VMWARE Server 2.0.1 unter Debian Lenny getestet. — Axel Werner 2009-06-09 17:41

Nachtrag:

:!: WARNUNG! :!: Es wurde ein CRITICAL-BUG entdeckt! Ich rate bis auf Weiteres davon ab das Script zu verwenden! Das Script kann zur Zeit nicht mit “monilitischen” virtuellen Disks umgehen und “zerstört” in einem solchen Fall die VHD. Ich werde das Script entsprechend nochmal überarbeiten. Es wird allerdings aus zeitlichen Gründen etwas dauern. Vorschläge/Fixes sind willkommen! — Axel Werner 2010-01-17 17:08

#!/bin/sh
##########################################################
# Cloning Script for VMWARE virtual Machines 
#  Originaly Created by ??? and found somewhere on the internet.
# adapted, fixed and extented by Axel Werner ( mail@awerner.myhome-server.de on 2008-12-27
#
# This script is testet with VMWARE SERVER 2.0.1 on debian linux 2009-06-09
#
# ToDo:
# - Script asumes there is only one Disk-File and this Disk-File has to use the same Filename as the 
#    Subdir/VM's name is. not dynamic on multiple Diskfiles or Diskfiles with different Names
# - Script still uses "ls" to find matching files. Should be globbing or "find"
#
#Updates:
#2008-12-27    by Axel Werner    fix: trailing slash problem
#                        add: script did not replaced the old filenames in main *.vmdk file 
#                            if you have 2GB splited disk.
#
#2009-06-09	by Axel Werner	fix: rewriting lots of code. was realy bad.
#
#
#
#
#
##########################################################
if [ $# != 2 ]; then
    echo "Usage: $0 <original VM name> <new VM name>"
    exit 127
fi

SOURCE=${1%/}	# Saves Argument 1 and cuts off trailing slashes
DEST=${2%/}	# Saves Argument 2 and cuts off trailing slashes
echo "SOURCE is \"$SOURCE\""
echo "DEST is \"$DEST\""


#### PRÜFE ob Ziel bereits vorhanden ist.
if [ -d $DEST ]; then
    echo "Destination VM already exists - pick a new name or delete first"
    exit 127
fi


#### PRÜFE ob *.lck Files vorhanden sind / VM noch läuft.

#Erzeugt ARRAY $F[@] mit *.lck files FALLS vorhanden.
# Falls keine solchen Files oder Dirs vorhanden sind wird $F
# gleich "DEM STRING" $SOURCE/*.lck gesetzt. z.B. "/subdir/*.lck"
F=($SOURCE/*.lck)

# Wenn $F gleich "/subdir/*.lck" ist, wurden keine *.lck files gefunden
if [ ! "$F" = "$SOURCE/*.lck" ] ; then
    echo
    echo "*.lck Files/Dirs found in $SOURCE/ . It seems the VM is still running."
    echo "Please shut down the VM '$SOURCE' first."
    exit 127
fi


#### STEP 1 - COPY VM...
echo
echo "Step 1 - Copying..."
cp -Rv "$SOURCE" "$DEST"


#### STEP 2 - renaming Files in $DEST...
echo
echo "Step 2 - Renaming files in $DEST/ ..."
for F in $DEST/* ; do
	mv -v "$F" $DEST/`basename $F | sed -e "s/^$SOURCE/$DEST/"`
done


#### STEP 3 - Renaming *.nvram file & fixing *.vmx ...
echo
echo "STEP 3 - Renaming nvram file & fixing *.vmx ..."
# Filename speichern
OLDNVRAMFILE=`basename "$DEST"/*.nvram`
mv "$DEST"/*.nvram "$DEST"/"$DEST".nvram
# $DEST/$DEST.vmx wegen neuem NVRAM File anpassen
sed -e "s/$OLDNVRAMFILE/$DEST.nvram/g" "$DEST/$DEST.vmx" > "$DEST/$DEST.temp"
cp "$DEST/$DEST.temp" "$DEST/$DEST.vmx"
rm "$DEST/$DEST.temp"



#### STEP 4 - Replacing '$SOURCE' with '$DEST' in .vmx file...
echo
echo "Step 4 - Replacing '$SOURCE' with '$DEST' in .vmx file..."
#  xxx/xxx.vmx
sed -e "s/$SOURCE/$DEST/g" "$DEST/$DEST.vmx" > "$DEST/$DEST.temp"
cp "$DEST/$DEST.temp" "$DEST/$DEST.vmx"
rm "$DEST/$DEST.temp"



#### STEP 5 - Replacing '$SOURCE' with '$DEST' in .vmxf file...
echo
echo "Step 5 - Replacing '$SOURCE' with '$DEST' in .vmxf file..."
#  xxx/xxx.vmxf
sed -e "s/$SOURCE/$DEST/g" "$DEST/$DEST.vmxf" > "$DEST/$DEST.temp"
cp "$DEST/$DEST.temp" "$DEST/$DEST.vmxf"
rm "$DEST/$DEST.temp"



#### Step 6 - Replacing '$SOURCE' with '$DEST' in DISK configuration file ($DEST.vmdk)...
echo
echo "Step 6 - Replacing '$SOURCE' with '$DEST' in DISK configuration file ($DEST.vmdk)..."
echo

sed -e "s/$SOURCE/$DEST/g" "$DEST/$DEST.vmdk" > "$DEST/$DEST.vmdk.temp"
cp "$DEST/$DEST.vmdk.temp" "$DEST/$DEST.vmdk"
rm "$DEST/$DEST.vmdk.temp"


#### Step 7 - (Re)Setting permissions...
echo
echo "Step 7 - (Re)Setting permissions..."
echo
chown -Rv root:root "$DEST"
chmod -v 755 "$DEST"
chmod -v 600 "$DEST"/*
chmod -v +rx "$DEST"/*.vmx
chmod -v +r "$DEST"/*.log
echo
echo
echo
echo 'All Done! Now go to your VMWARE Server Admin Console and IMPORT or REGISTER your cloned VM.'
echo
echo
 

MfG — Axel Werner 2009-01-25 18:30

it-artikel/virtuelle-maschinen-per-skript-klonen-vmware-server-2.0-linux.txt · Last modified: 2015-07-23 20:25 by mail@awerner.myhome-server.de