Backup VirtualBox na Linuxu?
5 naročnikov
5 naročnikov
Zdravo.
Imam nekaj virtual machines (VirtualBox) znotraj Linuxa in bi jih rad backupiral. Našel sem način, da narediš snapshot in potem backupiraš, ampak vse kar sem našel, je napisano za ročno backupiranje.
Rad bi to avtomatiziral, verjetno se to da z nekaj skriptanja in VBoxManage
nekako? Je kdo že delal kaj takšnega in bi lahko dal kakšne smernice?
2 odgovora
Sem že poskušal automatizirati backup VMjev tudi jaz, ampak nisem nikoli našel ustrezne rešitve, tako da do sedaj še nimam rešeno. S svojim vprašanjem si me malo spomnil na to in sem šel spet malo raziskovati. Naletel sem na tale odgovor na superuser.com, ki se mi zdi dobra smernica za nadaljevanje. Mogoče tudi v kombinaciji z odgovorom SlimDeluxe? Bom čez vikend poskusil nekaj narediti s tem in updatam tale odgovor, če mi uspe kaj zadovoljivega.
Edit 28. 10. 2018:
Nek hiter poskus backup skripte, ki backupira VMje, ki tečejo. Komentarji o tem, kako zadeva deluje, so znotraj skripte. Delno sem uporabil rešitev SlimDeluxe z export
, ampak vmes vtaknil clonevm
, da lahko backupiramo snapshote. Se priporočam za predloge za izboljšavo, seveda.
#!/usr/bin/bash
BACKUP_DESTINATION='/tvoja/backups/mapa'
KEEP_SNAPSHOTS='5 days'
KEEP_BACKUPS='5 days'
for VM in $( VBoxManage list vms | sed -r 's/\"(.*)\".*\{.*\}/\1/' ); do
# briši snapshote
# upošteva vse snapshote v obliki YYYY-MM-DD,
# tako da lahko delaš tudi svoje custom snapshote
KEEP=$( date +"%Y-%m-%d" -d "$KEEP_SNAPSHOTS ago" )
for SNAPSHOT in $( VBoxManage snapshot $VM list | \
grep -E "Name: [0-9]{4}-[0-9]{2}-[0-9]{2}" | \
sed -r "s/^\s*Name: ([0-9\-]+).*$/\1 $KEEP/" | \
awk '{if ($1 < $2) { print $1 }}' ); do
VBoxManage snapshot $VM delete $SNAPSHOT
done
# briši stare backupe
# za vsak slučaj upošteva samo datoteke
# v obliki YYYY-MM-DD.ova
KEEP=$( date +"%Y-%m-%d" -d "$KEEP_BACKUPS ago" )
for BACKUP in $( find $BACKUP_DESTINATION/$VM -name *.ova | \
grep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}\.ova$" | \
sed -r "s/^.*\/([0-9\-]+)\.ova$/\1 $KEEP \0/" | \
awk '{if ($1 <= $2) { print $3 }}' ); do
rm $BACKUP
done
SNAPSHOT=$( date +"%Y-%m-%d" )
BACKUP_DIR=$BACKUP_DESTINATION/$VM
BACKUP_FILE=$BACKUP_DIR/$SNAPSHOT.ova
# naredi snapshot
VBoxManage snapshot $VM \
take $SNAPSHOT
# kloniraj VM iz snapshota
VBoxManage clonevm $VM \
--snapshot $SNAPSHOT \
--name $VM-$SNAPSHOT \
--register
# kreiraj backup dir za VM,
# če še ne obstaja
mkdir -p $BACKUP_DIR
# briši datoteko, če že obstaja
if [ -f $BACKUP_FILE ]; then
rm $BACKUP_FILE
fi
# exportaj kloniran VM
VBoxManage export $VM-$SNAPSHOT \
--output $BACKUP_FILE
# briši kloniran VM
VBoxManage unregistervm $VM-$SNAPSHOT \
--delete
done
Sem že hotel napisati, da bi mogoče šlo s kloniranjem snapshotov, pa si me prehitel :)
Tule je še en workaround:
https://www.howtoforge.com/virtualbox-creating-backups-and-clones-of-running-virtual-machines-no-downtime-with-lvm-snapshots
–
kelvan
Sem editiral odgovor z delujočo skripto – Vini
Cool, thumbs up – SlimDeluxe
Yeah, proper! – kelvan
Hudo! – Mark2
Tole je relevantni del moje backup shell skripte.
#!/bin/sh
DEST='/tvoja/backups/mapa';
echo 'Exporting virtual boxes...';
echo '-----------------------------';
rm "$DEST/vb/win2012test.ova";
VBoxManage export "Win Server 2012 Test" -o "$DEST/vb/win2012test.ova";
rm "$DEST/vb/winxptest.ova";
VBoxManage export "winxp test" -o "$DEST/vb/winxptest.ova";
echo '-----------------------------';
echo 'All done!';
BTW. če v posamezni mašini uporabljaš kriptiran virtualni disk, se ta izvozi kot nekriptiran oz. brez nobene zaščite - vsak ga lahko importa v VB in vidi vse podatke.
Ali lahko exportam running virtual machines? – Mark2
Nisem v stanju za probat, verjetno pa ja, ampak ne v trenutnem stanju (state). Glej Vinijev odgovor :) – SlimDeluxe