Virtual Box en mode comanda: VBoxManage
Contingut |
Introducció
Interessa utilitzar Virtual Box en mode comanda per tal d'implementar còpies de seguretat automàtiques d'una màquina virtual que implica:
- apagar la màquina virtual
- clonar-la
- enviar el fitxer del clon a un lloc segur
- tornar a arrencar la màquina
- implementar tot això en un script desatès
VBoxManage
Es tracta d'utilitzar VirtualBox des de la consola.
La idea és apagar una màquina virtual, clonar-la (fer una còpia de seguretat), i tornar-la a engegar. Tot això ficat en un cron que s'executa el cap de setmana
$ VBoxManage list vms "Ubuntu-Server 12.04-Moodle" {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601}
Informació sobre una màquina virtual
$ VBoxManage showvminfo {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601} Name: Ubuntu-Server 12.04-Moodle Guest OS: Ubuntu UUID: 7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601 Config file: /home/user/VirtualBox VMs/Ubuntu-Server 12.04-Moodle/Ubuntu-Server 12.04-Moodle.vbox Snapshot folder: /home/user/VirtualBox VMs/Ubuntu-Server 12.04-Moodle/Snapshots Log folder: /home/user/VirtualBox VMs/Ubuntu-Server 12.04-Moodle/Logs Hardware UUID: 7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601 Memory size: 768MB Page Fusion: off VRAM size: 12MB CPU exec cap: 100% HPET: off Chipset: piix3 Firmware: BIOS Number of CPUs: 1 Synthetic Cpu: off CPUID overrides: None Boot menu mode: message and menu Boot Device (1): Floppy Boot Device (2): DVD Boot Device (3): HardDisk Boot Device (4): Not Assigned ACPI: on IOAPIC: off PAE: on Time offset: 0 ms ...
Per apagar una Màquina Virtual:
$ VBoxManage controlvm <uuid>|<name> poweroff $ VBoxManage controlvm {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601} poweroff
La carpeta del Virtual Box està a:
$ cd ~/VirtualBox\ VMs/
i la carpeta de la Màquina que vull clonar està a:
$ cd /Ubuntu-Server\ 12.04-Moodle
Per clonar una Màquina Virtual farem: (http://www.virtualbox.org/manual/ch08.html#vboxmanage-clonevm)
$ VBoxManage clonevm {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601} --name UbuntuServerMoodle_120607 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Machine has been successfully cloned as "UbuntuServerMoodle_120607"
S'ha creat la carpeta UbuntuServerMoodle_120607/, on hi ha el fitxer .vbox (que és el fitxer XML que conté tota la definició) i el fitxer .vdi Per tornar a arrencar una Màquina Virtual:
$ VBoxManage startvm <uuid>|<name> [--type gui|vrdp|headless] $ VBoxManage startvm {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601}
El que volem ara és crear una nova màquina virtual a partir de la clonada, per assegurar-nos de què és un clon correcte. El que hem de fer és registrar la màquina virtual que s'ha creat en l'anterior clonació:
$ VBoxManage registervm /home/user/VirtualBox\ VMs/UbuntuServerMoodle_120607/UbuntuServerMoodle_120607.vbox $ VBoxManage list vms "Ubuntu-Server 12.04-Moodle" {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601} "UbuntuServerMoodle_120607" {c4787df0-3770-40ed-9673-73e9a52917b3}
i ja la podem arrencar:
$ VBoxManage startvm {c4787df0-3770-40ed-9673-73e9a52917b3} o bé $ VBoxManage startvm UbuntuServerMoodle_120607
Funciona correctament, excepte la xarxa, doncs quan faig ifconfig només es veu la targeta virbr0 i no la eth0. Apago i des de la consola gràfica li assigno eth0. Però continuo veient només la virbr0. Entro al fitxer /etc1network/interfaces i localment funciona molt bé i l'Apache també, però des de la màquina anfitriona no puc accedir.
Problema en la configuració de la xarxa
Solució 1:
Les dues màquines són iguals excepte que s'assigna una MAC diferent. Si a la màquina clon li fico la mateixa MAC que la màquina original (080027E74E9E) aleshores ja funciona.
Finalment, en aquesta màquina ja puc ficar la IP que serà definitiva en el fitxer /etc/network/interfaces (la definitiva serà la 192.168.0.15) i ja puc accedir al servidor Apache de la màquina virtual des de tota la xarxa del centre. Per ex,
Solució 2:
Efectivament el problema que em trobo té a veure amb l'assignació de la MAC:
$ dmesg | grep eth
El problema està en què en la màquina original la MAC està fixada en el fitxer /etc/udev/rules.d/z25_persistent-net.rules. Per tant, dues possibles solucions:
- a) abans de fer la còpia, comentar les línies en aquest fitxer. Quan arrenqui la màquina clonada (a la que el VB assigna una nova MAC) no hi ha cap definició de quina ha de ser la MAC en l'anterior fitxer.
- b) no fer cap canvi en el fitxer original. Quan arrenco per primer cop la màquina clonada no hi ha xarxa. Comentar les línies en aquest fitxer. Ja puc reiniciar i tindré xarxa.
Snapshot: captura d'una màquina virtual
Les captures serveixen per capturar un estat concret de la màquina virtual en un instant de temps, de manera que poguem recuperar aquest estat de la MV si cal, a partir de l'últim clon. Hi ha molta similitud amb les còpies de seguretat, on véiem els conceptes de còpia de seguretat completa i incremental.
Així doncs, si volem restaurar una màquina virtual a un estat concret en una altra màquina real, necessitarem l'últim clon i restaurar el snapshot adient.
Per fer un snapshot:
$ VBoxManage snapshot {9de47e53-d7d3-4ecc-8477-387770a8a794} take LinuxCNC_140422_snapshot
Evidentment, triga molt menys que fer un clon.
Script per fer la còpia de seguretat automàticament de la màquina virtual
copia_seg_maq_virtual_v1.sh:
#!/bin/bash ############################## #Script by Joan Q, Còpia de seguretat de la màquina virtual del IES Jaume Balmes ############################## tdate=`date +%d%m%y` #echo $tdate #per apagar la màquina virtual /usr/bin/VBoxManage controlvm {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601} poweroff sleep 4 #Per clonar una Màquina Virtual farem. Queda copiat a /home/user/VirtualBox VMs /usr/bin/VBoxManage clonevm {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601} --name UbuntuServerMoodle_$tdate sleep 180 #copiem la còpia de la MV al disc de xarxa (el script s'ha d'executar com a root per tenir permisos sobre la carpeta vbox) #cp -R /home/user/VirtualBox\ VMs/UbuntuServerMoodle_$tdate /home/user/vbox #sleep 600 #Per tornar a arrencar una Màquina Virtual: /usr/bin/VBoxManage startvm {7fa5f9a3-57e5-47ec-9dc0-8f81a78bd601} sleep 4 #Enviem la informació dels fitxers generats a wiki.joanillo.org ls -la VirtualBox\ VMs/UbuntuServerMoodle_$tdate > /home/user/lsUbuntuServerMoodle_$tdate.txt scp /home/user/lsUbuntuServerMoodle_$tdate.txt joan@wiki.joanillo.org:/home/joan/lsUbuntuServerMoodle.txt #necessari el codi d'èxit per tal que no es torni a executar el script si el poso en el crontab exit 0
Feina per l'alumne
- Arrencar la màquina virtual en l'inici del sistema, de forma desatesa.
- Ficar el script que has programat en el cron de manera que s'executi de forma desatesa.
- Modificar el script bash de manera que no haguem de fer sleep 180, sinó que siguem capaços de detectar quan ha acabat el clonatge de la màquina.
- Modificar el script de manera que els dilluns, dimarts, dimecres i dijous es faci un snapshot de la màquina virtual, i els divendres es faci un clon.
creat per Joan Quintana Compte, juny 2012