Jan 6, 2009

Κρατώντας τις αλλαγές μας στο VirtualBox όταν ο host γίνεται suspend

Μέσα στο γενικότερο κλίμα εξοικονόμησης ενέργειας, μια απλή ενέργεια που μπορούμε να προβούμε, ιδίως οι κάτοχοι φορητών υπολογιστών, είναι η διάθεση του υπολογιστή σε κατάσταση hibernate ή sleep όταν παραμένει για μεγάλο διάστημα ανενεργός. Αν δουλεύουμε με εικονικές μηχανές (όπως του VirtualBox) η επαναφορά του συστήματος είναι πολύ πιθανόν να μην έχει τα επιθυμητά αποτελέσματα. Σε βοήθειά μας έρχεται η εξαιρετική δυνατότητα που έχουμε στο Linux, ώστε να μπορούμε να εκτελούμε scripts όταν ο υπολογιστής μας προετοιμάζεται για αναστολή της λειτουργίας του και αντίστοιχα όταν επανέρχεται. Επίσης, σημαντικό είναι το χαρακτηριστικό του VirtualBox να μπορεί να αποθηκεύσει την κατάστασή (save state) μιας εικονικής μηχανής. Ένα τέτοιου είδους scripts θα πρέπει να βρεθεί στην τοποθεσία /etc/pm/sleep.d και η ονομασία του να ξεκινά από δυο αριθμητικές τιμές, ακολουθούμενες από μια παύλα ώστε να υπάρχει διάταξη στην εκτέλεσή τους. Έτσι για παράδειγμα, κατασκεύασα το ακόλουθο εκτελέσιμο script (25-vboxsavestate.sh) για την αποθήκευση της κατάστασης μιας εικονικής μηχανής κατά τη διαδικασία hibernate ή suspend.

#!/bin/bash
case $1 in
hibernate|suspend)
sudo -u spk VBoxManage controlvm "98259177-643e-4ec0-b86e-29b942834d5c" savestate >> /home/spk/paused.txt
;;
resume)
echo "Resuming..." >> /home/spk/paused.txt
;;
*)
echo "no action"
;;
esac

Η βασική εντολή του script αναλαμβάνει να αποθηκεύσει την κατάσταση της δεδομένης εικονικής μηχανής με μοναδικό κωδικό που μπορούμε να αντλήσουμε από την εντολή (εφόσον αυτή είναι ενεργή):

VBoxManage list runningvms

Αξίζει επίσης να σημειωθεί πως η συγκεκριμένη γραμμή του script εκτελείται με τα δικαιώματα του χρήστη της εικονικής μηχανής, γι αυτό και ο προσδιορισμός -u.

Αν όλα πάνε καλά, τότε μετά το resume του υπολογιστή μας η καρτέλα του VirtualBox θα δείχνει ως εξής και θα μπορούμε να συνεχίσουμε την εργασία από το σημείο που την έχουμε αφήσει, ξεκινώντας το virtual machine.

Τέλος, η ακολουθία των scripts που εκτελούνται στο suspend/hibernate καταγράφεται στο αρχείο /var/log/pm-suspend.log

No comments: