Lokales LVM SR in Ext3 konvertieren

Muss ich mal wieder ein Training mit XenServer auf schmaler Hardware halten? Meist ist ja die Festplatte zu klein - 250 GB, das muss doch reichen, sind auch SAS Festplatten. Schön, flott, aber eben klein.
Windows 7 will laut Template bereits 24 GB für sich alleine haben, zwei Provisioning Server VMs dazu, zwei DDCs auf 2003er Basis, ein DC pro Teilnehmer und mindestens eine grosse virtuelle Festplatte zur Aufnahme der vDisk für PVS. Das von XenServer eingerichtete Standard Storage Repository auf LVM Basis kann hier schnell an seine Grenzen kommen, vor allem, weil es nicht thin-provisioning nutzt (was durchaus machbar ist) sondern für eine 24 GB Festplatte für eine Windows 7 VM ganze 24 GB allokiert.
Abhilfe schafft hier der Citrix KB Artikel CTX116324 - How To Change the Default Storage Repository to File-based VHD-on-EXT3 
Problem hierbei ist nur: Will ich den ganzen Kurs das Zeug abtippen lassen? Vermutlich erst nachdem die Teilnehmer fit im Umgang mit der Console geworden sind - und PBD von SR und VDI unterscheiden können. Dann ist es jedoch zu spät, denn während der Prozedur stirbt alles, was auf dem SR bereits eingerichtet ist.
Der beste Zeitpunkt ist also direkt nach der XenServer-Installation. Dafür habe ich schon ein hübsches (ok, nein, hübsch ist es nicht) Shell-Skript, dafür brauchen wir aber wieder winscp, um es in die Control Domain zu transferieren, auch zu anstrengend für den Lehrkörper.
Habe daher heute abend in einem Hotel bei Stuttgart das bestehende Bash-Skript in eine Batch-Datei für Windows umgeschrieben (und wow, dabei ist mir wieder aufgefallen, welche Krücken man bemühen muss, um ein paar simple Variablen-Operationen hinzubekommen...ich muss unbedingt etwas besseres zum Skripten lernen!)

Das Skript erfordert ein paar Anpassungen, also erstmal mit Notepad / Editor öffnen und die Variablen (Zeile 10ff) anpassen.
Vorliegen müssen die IP des XenServer Hosts, Username (falls abweichend von "root") und das Kennwort, falls es vom Kursstandard abweicht.
Ach ja, und weil das Skript unbedarften Naturen weh tun kann, habe ich einen "safety catch" eingebaut. Erst nach einer Modifikation lässt sich dieses Skript benutzen. Das ist leicht. Es soll niemanden wirklich abhalten, der schon einmal eine Batch-Datei gesehen hat, aber es soll verhindern, dass sich irgendwer "aus versehen" mit diesem Skript die Karten legt. Soll es ja geben. Wird die Kindersicherung absichtlich entfernt und das Skript damit scharfgeschaltet, dann geht es rund - aber nun kann von einer unbeabsichtigten Ausführung nicht mehr die Rede sein.

Genug gebloggt, hier ist das Skript zum Copy & Paste - Download:

@echo off
rem ### contact daniel.wipperfuerth@adn.de for info / improvements.
echo ######
echo ### script to transform the default lvm based sr of
echo ### freshly installed (!) xenserver 5.5 / 5.6 to ext3
echo ### YOU WILL LOSE DATA! BE SURE YOU UNDERSTAND WHAT THIS SKRIPT IS DOING!
echo ######

setlocal

rem ### declaring windows specific variables
rem ### you should customize these
set pass=Password1
set host=192.168.0.21
set user=root
set xecmd="c:\program files (x86)\citrix\xencenter\xe.exe"
set xeparms=-s %host% -u %user% -pw %pass%
set handbrake=on

if %handbrake%==on goto bailout
rem ### SECTION ONE - gathering info
rem ### find our lvm sr
for /F "usebackq" %%n in (`%xecmd% %xeparms% host-list params^=uuid --minimal`) do set host-uuid=%%n

rem ### find our lvm sr
for /F "usebackq" %%n in (`%xecmd% %xeparms% sr-list type^=lvm params^=uuid --minimal`) do set sr-uuid=%%n

rem ### find the pbd of this sr
for /F "usebackq" %%n in (`%xecmd% %xeparms% pbd-list sr-uuid^=%sr-uuid% params^=uuid --minimal`) do set pbd-uuid=%%n

rem ### find the current device config (ie harddrive) of pbd
for /F "usebackq tokens=2" %%n in (`%xecmd% %xeparms% pbd-list uuid^=%pbd-uuid% params^=device-config --minimal`) do set deviceconfig=%%n

rem ### SECTION TWO - wreak havok
rem ### erasing all vdis from sr that would prevent deletion
for /F "usebackq delims=," %%n in (`%xecmd% %xeparms% vdi-list sr-uuid^=%sr-uuid% params^=uuid --minimal`) do %xecmd% %xeparms% vdi-destroy uuid=%%n

rem ### unplugging pbd
%xecmd% %xeparms% pbd-unplug uuid=%pbd-uuid%

rem ### destroying sr
%xecmd% %xeparms% sr-destroy uuid=%sr-uuid%

rem ### SECTION THREE - rebuild sr
%xecmd% %xeparms% sr-create host-uuid=%host-uuid% type=ext device-config:device=%deviceconfig% shared=false name-label="Ext3 SR"

rem ### cleaning up
endlocal
goto end

:bailout
echo handbrake error. try www.disney.com for help.
:end
pause

Kommentare

Beliebte Posts aus diesem Blog

Auf NFS Shares mit Windows zugreifen

Citrix Default Passwords

Lokales ISO Repository im XenServer anlegen