Hallo,
ich möchte den Administratoren von Gastsystemen eine Möglichkeit geben, selbst eine Kopie Ihrer VM zu erzeugen. Die einfachste Möglichkeit wäre wohl, sobald die VM heruntergefahren wird automatisch (wie) eine Kopie des gesamten Verzeichnisses zu erstellen. Ließe sich dieses Verfahren dann noch so verfeinern, daß nicht bei jedem herunterfahren der VM sondern nur bei Bedarf (wie kann ich da etwas aus einer VM an ein Script übergeben) eine Kopie erstellt wird ?
Vielen Dank schonmal vorab für Eure Hilfe.
Die Foren-SW läuft ohne erkennbare Probleme. Sollte doch etwas nicht funktionieren, bitte gerne hier jederzeit melden und wir kümmern uns zeitnah darum. Danke!
"Schlaues" Script für VM-Backup ?
Re: "Schlaues" Script für VM-Backup ?
TSCH-SAG hat geschrieben:Hallo,
ich möchte den Administratoren von Gastsystemen eine Möglichkeit geben, selbst eine Kopie Ihrer VM zu erzeugen. Die einfachste Möglichkeit wäre wohl, sobald die VM heruntergefahren wird automatisch (wie) eine Kopie des gesamten Verzeichnisses zu erstellen. Ließe sich dieses Verfahren dann noch so verfeinern, daß nicht bei jedem herunterfahren der VM sondern nur bei Bedarf (wie kann ich da etwas aus einer VM an ein Script übergeben) eine Kopie erstellt wird ?
Vielen Dank schonmal vorab für Eure Hilfe.
Stell ihnen doch ein Webinterface zur Verfügung in dem sie auf einen Kopierknopf drücken können. Allerdings wirst du diverse Probleme bekommen wenn einfach mal eben kopierte System zusätzlich im Netzwerk auftauchen und/oder ssids bzw. Macadressen gleich sind.
Gruß
@rprengel
Danke für den Tip.
mein Ansatz wäre jedoch ein anderer. Die Admins sollen eigentlich mit der ganzen VM-Thematik überhaupt nicht in Berührung kommen sondern z.B. über ein Icon (sind meistens Windows-Guests) die Ausführung eines Scriptes mit abschließendem wiederhochfahren der VM, starten können.
Danke für den Tip.
mein Ansatz wäre jedoch ein anderer. Die Admins sollen eigentlich mit der ganzen VM-Thematik überhaupt nicht in Berührung kommen sondern z.B. über ein Icon (sind meistens Windows-Guests) die Ausführung eines Scriptes mit abschließendem wiederhochfahren der VM, starten können.
Wieviele Backups sollen denn gemacht werden? Pro VM nur ein einziges (und wenn ein neues gemacht wird überschreibt das das alte) oder potenziell beliebig viele?
Mein erster Gedanke einer Automatisierung wäre, ein Script zu veranlassen, den Funktionszustand einer VM auszlesen und sofern die VM gerade heruntergefahren ist ein Backup derselben zu erstellen und sie wieder zu starten. Benutzer müssen so ihre VM lediglich herunterfahren, um einen Backuplauf anzustoßen.
Hierbei gibt es zwei Strategieen der Versionierung.
Erstens könnte man wie schon angesprochen den letzten Backupzustand einfach überchreiben. Um Kopierfehler möglichst gering zu halten könnte man den alten Zustand "umbenennen", den neuen kopieren und nach erfolgreicher Kopie den umbenannten löschen. Im Fehlerfall den fehlerhaft kopierten löschen und den umbenannten zurückbenennen.
Zweitens könnte man alle Backups unter einem anderen Namen speichern (backup_vm_%i%_%datum% wäre hier vielleicht sinnvoll, %i% der Name der VM, %datum% der aktuelle Sicherungszeitpunkt). Allerdings füllt das natürlich schnell die Festplatte.
Als Mittelweg könnte man vielleicht automatisiert alle alten Backups löschen, bis die Anzahl der Backups pro VM einen gewissen Grenzwert erreicht hat, um nie mehr als meinetwegen 5 Versionen des Backups zu speichern. Dieses Zusatzscript könnte man an die zweite Lösung einfach "anhängen".
Nachteil des Ganzen: jedes Herunterfahren erzeugt ein Backup, auch wenn keines gewünscht ist.
Weiterer Nachteil: Explizite und gewollte Backups werden bei der zweiten Lösung gelöscht, sobald es fünf neuere gibt.
Ich würde hier denke ich ein Webinterface schreiben, das mir meine das alles erledigt.
Funktionalität die das Webinterface bieten muss:
- Funktionszustand der VM anzeigen
- einen Knopf zum "Live-Backup"
- einen Knopf zum "Off-Backup"
- Bisherige Backups auflisten
- Backup löschen
- Backup zurückspielen
Live-Backup:
1. VM suspendieren
2. Backup der VM erzeugen (wie in "Lösung 2")
3. VM resumen
Off-Backup:
1. VM abschalten
2. Backup der VM erzeugen (wie im "Lösung 2")
3. VM resumen
Backup zurückspielen:
1. VM abschalten
2. Backup zurückkopieren
3. VM resumen
Das ganze noch mit einer Benutzerauthentifikation hinterlegen, sodass nicht jeder jede VM backuppen kann, fertig.
Mein erster Gedanke einer Automatisierung wäre, ein Script zu veranlassen, den Funktionszustand einer VM auszlesen und sofern die VM gerade heruntergefahren ist ein Backup derselben zu erstellen und sie wieder zu starten. Benutzer müssen so ihre VM lediglich herunterfahren, um einen Backuplauf anzustoßen.
Hierbei gibt es zwei Strategieen der Versionierung.
Erstens könnte man wie schon angesprochen den letzten Backupzustand einfach überchreiben. Um Kopierfehler möglichst gering zu halten könnte man den alten Zustand "umbenennen", den neuen kopieren und nach erfolgreicher Kopie den umbenannten löschen. Im Fehlerfall den fehlerhaft kopierten löschen und den umbenannten zurückbenennen.
Zweitens könnte man alle Backups unter einem anderen Namen speichern (backup_vm_%i%_%datum% wäre hier vielleicht sinnvoll, %i% der Name der VM, %datum% der aktuelle Sicherungszeitpunkt). Allerdings füllt das natürlich schnell die Festplatte.
Als Mittelweg könnte man vielleicht automatisiert alle alten Backups löschen, bis die Anzahl der Backups pro VM einen gewissen Grenzwert erreicht hat, um nie mehr als meinetwegen 5 Versionen des Backups zu speichern. Dieses Zusatzscript könnte man an die zweite Lösung einfach "anhängen".
Nachteil des Ganzen: jedes Herunterfahren erzeugt ein Backup, auch wenn keines gewünscht ist.
Weiterer Nachteil: Explizite und gewollte Backups werden bei der zweiten Lösung gelöscht, sobald es fünf neuere gibt.
Ich würde hier denke ich ein Webinterface schreiben, das mir meine das alles erledigt.
Funktionalität die das Webinterface bieten muss:
- Funktionszustand der VM anzeigen
- einen Knopf zum "Live-Backup"
- einen Knopf zum "Off-Backup"
- Bisherige Backups auflisten
- Backup löschen
- Backup zurückspielen
Live-Backup:
1. VM suspendieren
2. Backup der VM erzeugen (wie in "Lösung 2")
3. VM resumen
Off-Backup:
1. VM abschalten
2. Backup der VM erzeugen (wie im "Lösung 2")
3. VM resumen
Backup zurückspielen:
1. VM abschalten
2. Backup zurückkopieren
3. VM resumen
Das ganze noch mit einer Benutzerauthentifikation hinterlegen, sodass nicht jeder jede VM backuppen kann, fertig.
Achso, hab ich ganz vergessen:
Ich würde die VM-Opperationen einfach über die Consolenbefehle erledigen. Beispielsweise das Webinterface in PHP realisieren und den system()-Befehl verwenden.
Die Authentifikation der Benutzer über .htaccess erledigen und den Benutzernamen dann aus einer Systemvariable auslesen, kein eigenes Login-Script schreiben. Dann kann man den Benutzern Direktlinks als Verknüpfungen auf den Desktop legen, beim Druck poppt die Useranmeldung auf und nach der Eingabe der Zugangsdaten läuft das Backup der VM los.
Ich würde die VM-Opperationen einfach über die Consolenbefehle erledigen. Beispielsweise das Webinterface in PHP realisieren und den system()-Befehl verwenden.
Die Authentifikation der Benutzer über .htaccess erledigen und den Benutzernamen dann aus einer Systemvariable auslesen, kein eigenes Login-Script schreiben. Dann kann man den Benutzern Direktlinks als Verknüpfungen auf den Desktop legen, beim Druck poppt die Useranmeldung auf und nach der Eingabe der Zugangsdaten läuft das Backup der VM los.
@al!ve
Toller Ansatz, den Du da andeutest, DANKE.
Leider bin ich kein Programmierer und kenne mich in Sachen PHP gar nicht aus. Gibt's da nicht evtl. was fertiges oder reicht auf dem VM-Host ein laufender Webserver mit aktiviertem/installierten PHP ?
Evtl. wäre das nun doch der lohnende Einstieg in das Thema PHP
)
Toller Ansatz, den Du da andeutest, DANKE.
Leider bin ich kein Programmierer und kenne mich in Sachen PHP gar nicht aus. Gibt's da nicht evtl. was fertiges oder reicht auf dem VM-Host ein laufender Webserver mit aktiviertem/installierten PHP ?
Evtl. wäre das nun doch der lohnende Einstieg in das Thema PHP
Ich wüsste da nichts fertiges, allerdings habe ich mich mit dem Thema auch nicht wirklich befasst sondern lediglich kurz meine Gedanken geäußert.
Einen Einstieg in PHP bietet das allemal -- und so schwer ist das auch nicht.
^^ dieses kurze Script führ "ping heise.de" auf der Console aus und schreibt die Rückgabe direkt auf den Bildschirm.
Um die Consolenausgabe nicht direkt an den Browser zu senden muss ein kleiner "Hack" die Ausgabe unterdrücken. Hierzu starte ich die Pufferung der Ausgabe explizit, kopiere den Inhalt des Puffers in eine Variable und leere den Puffer. So bekommt man die Ausgabe in eine Variable (und kann sie ggf. mittels regulären Ausdrücken oder ähnlichem weiterverarbeiten) anstatt sie dem Benutzer zu präsentieren.
Wie gesagt, dei Benutzerverwaltung würde ich über htaccess machen. Dann ist der Benutzername innerhalb des PHP-Scriptes in $_SERVER['PHP_AUTH_USER'] auslesbar, was eine Trennung nach Benutzern erlaubt.
Jetzt noch die Consolenbefehle für die von mir genannten VM-Opperationen nachschlagen, für jeden von mir genannten Punkt eine eigene PHP-Datei mit dem system-Befehl der jeweilgen Consolenanweisung und da per Variable den Pfad zur VM-Config abhängig vom eingegebenen Benutzernamen reinschreiben.
Hier würde ich simpel mit Textdateien arbeiten. Jeder Benutzer bekommt eine Textdatei mit dem Namen ".%benutzername%.vmaccess" in die zeilenweise die Pfade zu dem vmxd-Files der VMs stehen. Beispielsweise der Benutzer "stephan" bekommt eine .stephan.vmaccess in der eine einzige Zeile mit "/var/VMWare/stephan_vm_1/linux.vmxd" steht.
Jetzt per Parameter beim Aufruf den Pfad zur VM die behandelt werden soll übergeben, das Script soll prüfen ob in der entsprechenden Datei ein solcher Eintrag vorhanden ist und wenn ja ein Backup davon anlegen.
Ich glaube der Einstieg ist hier garnicht so schwer
Einen Einstieg in PHP bietet das allemal -- und so schwer ist das auch nicht.
Code: Alles auswählen
<?PHP
system('ping heise.de -c 5');
?>^^ dieses kurze Script führ "ping heise.de" auf der Console aus und schreibt die Rückgabe direkt auf den Bildschirm.
Um die Consolenausgabe nicht direkt an den Browser zu senden muss ein kleiner "Hack" die Ausgabe unterdrücken. Hierzu starte ich die Pufferung der Ausgabe explizit, kopiere den Inhalt des Puffers in eine Variable und leere den Puffer. So bekommt man die Ausgabe in eine Variable (und kann sie ggf. mittels regulären Ausdrücken oder ähnlichem weiterverarbeiten) anstatt sie dem Benutzer zu präsentieren.
Code: Alles auswählen
<?PHP
ob_start(); // starte output buffering
system('ping heise.de -c 5');
$asdf = ob_get_contents(); // den inhalt des puffers in $asdf schreiben
ob_clean(); // den puffer leeren und löschen
echo $asdf; // den inhalt von $var trotzdem an den browser senden
?>Wie gesagt, dei Benutzerverwaltung würde ich über htaccess machen. Dann ist der Benutzername innerhalb des PHP-Scriptes in $_SERVER['PHP_AUTH_USER'] auslesbar, was eine Trennung nach Benutzern erlaubt.
Jetzt noch die Consolenbefehle für die von mir genannten VM-Opperationen nachschlagen, für jeden von mir genannten Punkt eine eigene PHP-Datei mit dem system-Befehl der jeweilgen Consolenanweisung und da per Variable den Pfad zur VM-Config abhängig vom eingegebenen Benutzernamen reinschreiben.
Hier würde ich simpel mit Textdateien arbeiten. Jeder Benutzer bekommt eine Textdatei mit dem Namen ".%benutzername%.vmaccess" in die zeilenweise die Pfade zu dem vmxd-Files der VMs stehen. Beispielsweise der Benutzer "stephan" bekommt eine .stephan.vmaccess in der eine einzige Zeile mit "/var/VMWare/stephan_vm_1/linux.vmxd" steht.
Jetzt per Parameter beim Aufruf den Pfad zur VM die behandelt werden soll übergeben, das Script soll prüfen ob in der entsprechenden Datei ein solcher Eintrag vorhanden ist und wenn ja ein Backup davon anlegen.
Ich glaube der Einstieg ist hier garnicht so schwer
Zurück zu „VMserver 1 und GSX“
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste