15 de noviembre de 2013

Como clonar y compactar un disco virtual .vdi de VirtualBox

Desde que descubrí la forma de clonar discos ejecutables en VirtualBox, cuando doy de baja algún disco duro, en vez de hacer una backup tradicional hago un clon .vdi ejecutable en VirtualBox.
Una vez hecho el clon es muy recomendable quitar todo los ficheros que no usemos o no queramos conservar y compactarlo para ahorrarnos una gran cantidad de valiosos gigas conservando plenamente la funcionalidad de nuestro clon.

Ya describí una forma de compactar discos duros .vdi pero esta me parece algo mejor ya que trabaja directamente sobre el fichero clonado .vdi.

Protocolo:

1) Hacemos una imagen del disco a copiar:

# dd if=/dev/discoacopiar of=imagendeldisco.img

N.B.: El disco duro a clonar no debe estar montado, de modo que hay que arrancar el ordenador con un live usb: ubuntu, xubuntu o clonezilla ... También hay que tener en cuenta donde almacenar la imagendeldisco.img, se puede conectar y montar un HD externo usb y entonces ejecutar el comando dd anterior con if=(dev del disco a clonar) of=(/ruta del HD-USB/imagendeldisco.img).

2) Convertimos el archivo imagen a formato vdi:

# VBoxManage convertfromraw -format VDI imagendeldisco.img imagendeldisco.vdi

N.B.: Una vez terminado el paso anterior podemos reiniciar el sistema y arrancar desde el S.O. de la maquina. Debe estar instalado VirtualBox. Hay que contar con suficiente espacio de disco ya que no se borra imagendeldisco.img; y suelen ser ficheros de muchos gigas.

3) Ahora configuramos una máquina virtual linux con VirtualBox y arrancamos imagendeldisco.vdi trabajando ahora dentro de la máquina virtual.

4) Llenamos el disco duro virtual con ceros:

# dd if=/dev/zero of=fillfile bs=1M

Esto llena todo el espacio disponible del disco duro con un fichero repleto de ceros.


Tener mucho cuidado de no poner ningún otro disco como destino en of= ya que lo llenareis de ceros!!!! aunque estáis dentro de la maquina virtual y no podéis acceder al sistema real de discos duros de la del ordenador.

5) Borrar el archivo fillfile:

# rm fillfile

Esto liberará todo espacio del disco duro que llenamos con los ceros en el paso anterior.

6) Apagamos la máquina virtual:

# halt

7) Una vez fuera de la maquina virtual, desde el sistema anfitrión, compactamos el fichero del disco duro de la maquina virtual imagendeldisco.vdi

# VBoxManage modifyhd imagendeldisco.vdi --compact


8) Una vez terminado el proceso ya tenéis vuestro disco duro virtual imagendeldisco.vdi compactado y totalmente funcional en VirtualBox.

Ref:
http://blog.markloiseau.com/2010/10/how-to-compact-a-virtualbox-ubuntu-guests-vdi-file/

-(oo)-
----------------------------------------------------------------
La paradoja temporal de las máquinas virtuales.
Con este procedimiento ya tengo una pequeña colección de maquinas virtuales fruto de instalaciones y actualizaciones pasadas de linux en mi microservidor micra.
Y es posible ejecutarlas todas a la vez!!! en forma de maquinas virtuales, provocando una paradoja temporal, ya que tengo toda la evolución en el tiempo de mi servidor micra funcionando en la misma red y al mismo tiempo!!!.
Esto me ha sido especialmente útil para copiar datos de antiguas instalaciones a las nuevas y regresarlas al futuro.
--------------------------------------------------------------
Update (25/12/2018):
Se puede clonar el disco y crear el fichero .vdi en un solo paso mediante el siguiente comando:

# dd if=/dev/sda | VBoxManage convertfromraw stdin file.vdi num.de.bites  

[/dev/sda]: es el disco a clonar
[file.vdi]: ruta y nombre del fichero destino .vdi
[num. de bites]: bites del disco .vdi; es igual que el tamaño del disco a clonar, para obtenerlo se puede hacer con: # fdisk -l /dev/sda

De este modo es mas rápido crear el fichero .vdi y no es necesario espacio para los dos ficheros .img y .vdi.
--------------------------------------------------------------

1 de noviembre de 2013

Proyecto acuArduino: Sensor de Temperatura DS18B20 y ARDUINO UNO

Para ir haciendo cosas con arduino voy ha monitorizar un acuario tropical de 80L donde viven plácidamente peces cebra, balck tetras, ciclido ramirez, escalaraes, alguna gamba, un ancistrus y un khuli. Intentaré no electrocutarlos.


Lo primero interesante es monitorizar la temperatura del agua. Para ello usaré el sensor de temperatura DS18B20 en una sonda de acero inoxidable waterproof que es ideal para medir la temperatura del acuario.
El cable rojo corresponde a +5V, negro a GND y amarillo a Datos.
La sonda que compre tenia el cable verde en vez de amarillo.

El montaje con la placa de prototipado que he usado es el siguiente (ver nota al final del post):


Y el esquema electrónico que se ve mas claro (ver nota al final del post):


Ahora solo falta conectar arduino a nuestro ordenador por el serial y enviarle el script de control:
Para controlar el DS18B20 necesitamos un par de librerias:

onewire.h      http://playground.arduino.cc/Learning/OneWire
DallasTemperature.h   http://milesburton.com/Dallas_Temperature_Control_Library

Hay que utilizar las ultimas versiones de estas librerías para evitar errores de compilación.

Un sketch básico para arduino que lee el DS18B20 y envía los resultados por el serial se puede encontrar en: http://milesburton.com/Dallas_Temperature_Control_Library

Y funciona !!




Imagen del sketch para arduino y los datos medidos de temperatura con la sonda DS18B20 y enviados por el puerto serie.

Notas del autor: Para la sonda de temperatura DS18B20 el fabricante recomienda usar una resistencia de 4.7 K, pese a que he usado una de 1k y ha funcionado sin problemas, considero recomendable atender las recomdaciones y utilizar una resistencia de 4.7K; yo actualmente es la que utilizo.