
Ich verwende Xen und haben für jede unserer VMs einen Prozess eingerichtet, um jeden Morgen einen neuen Snapshot der VM zu erstellen, wobei die letzten sieben aufbewahrt werden.
Ich versuche jetzt, ein Skript zu schreiben, um die Wiederherstellung des neuesten Snapshots für jede VM zu testen.
In der Xen-Befehlszeile kann ich eine Liste aller Snapshots für eine bestimmte VM abrufen, indem ich Folgendes verwende:
xe snapshot-list snapshot-of=${vm_uuid}
Das Ergebnis sind sieben Einträge im folgenden Format:
uuid ( RO) : fc6cb150-b264-830e-4fb9-7fec030e434d
name-label ( RW): 20220616-0118
name-description ( RW):
is-vmss-snapshot ( RO): true
Gibt es eine einfache Möglichkeit, herauszufinden, welches das neueste ist? Bisher reicht mir das Datum im Namenslabel (z. B. 20220616
), aber der zweite Teil des Namens ( 0118
) ändert sich mit jedem Snapshot, und soweit ich weiß, kann ich bei der name-label
Option xe
z. B. keine Platzhalter verwenden.
xe snapshot-list snapshot-of=${vm_uuid} name-label=20220616*
Antwort1
Also habe ich das herausgefunden.
today=$(date +%Y%m%d)
ss_name=$(xe snapshot-list snapshot-of=${vm_uuid} | grep ${today} | awk -F: '{print $2}' | awk '{$1=$1};1')
ss_uuid=$(xe snapshot-list name-label="${ss_name}" | awk '{print $5}') echo $ss_uuid
echo ${ss_uuid}
Auch wenn nicht unbedingt der aktuellste Snapshot gesucht wird, sollte es funktionieren, solange die Snapshots das aktuelle Datum im Namen enthalten und heute ein Snapshot aufgenommen wurde (und es heute nur einen Snapshot gibt).