Subir un disco duro virtual (vhd) a Windows Azure Storage

Windows Azure Drive, aún en fase beta, es una de las posibilidades dentro de Windows Azure Storage la cual nos permite montar un disco duro virtual en formato NTFS en la nube. En este post voy a mostrar la forma de crear un VHD desde Windows 7 y de subir el mismo.

CREACIÓN DEL DISCO DURO VIRTUAL (VHD)

En primer lugar, debemos acceder a la administración de discos, por ejemplo, a través del botón derecho sobre Mi PC y Administrar.

Pulsamos sobre  Acción y seleccionamos Crear VDH.

Nos aparece una nueva ventana, donde debemos seleccionar la ubicación, el tamaño y si queremos que se expanda de forma dinámica o, por el contrario, deseamos un tamaño fijo.

En realidad, el objetivo de este post es almacenar en un Blog de tipo página el vhd. Por ello hay que tener en cuenta que el tamaño mínimo debe ser de 16MB y el tamaño máximo de 1 TB.
Al aceptar la creación, un “nuevo dispositivo” se instalará en nuestro equipo y el proceso será completado con el siguiente mensaje informativo:

Si accedemos de nuevo al administrador de discos, nos informará de que existe un disco no inicializado y nos dará la opción de hacerlo. Si no habíamos abandonado la ventana, podemos realizar la misma operación seleccionando el disco duro virtual y pulsamos sobre Inicializar.

Hacemos clic con el botón derecho sobre el disco y seleccionamos Nuevo volumen simple, dándole formato NTFS.

He incluido una imagen dentro del disco virtual para comprobar que, al subirlo a la nube, la información se mantiene y el disco funciona correctamente.

 Por último, en el administrador de discos nuevamente, pulsamos sobre él con el botón derecho y seleccionamos Ocultar VHD y dejamos las opciones por defecto de la siguiente ventana.

Ahora podemos visualizar el archivo vhd en la ubicación que indicamos durante la creación.

SUBIR EL DISCO DURO VIRTUAL A LA NUBE

Para realizar la subida del disco, he creado una pequeña aplicación donde se realizan dos acciones: La creación del contenedor y el page blob que ocupará el vhd y la subida del mismo.

using System;
using System.Configuration;
using System.IO;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;

namespace WADriveMaker
{
class Program
{
static void Main()
{
const string fileName = @"C:VHDsCloud Drive.vhd";

var file = File.Open(fileName, FileMode.Open);
var pageBlob = GetPageBlob(file.Length);
try
{
const int pageSize = 2048;
var numPages = file.Length / pageSize;
var page = new byte[pageSize];

using (var memoryStream = new MemoryStream(page))
{
for (var i = 0; i < numPages; i++)
{
file.Read(page, 0, pageSize);
memoryStream.Seek(0, SeekOrigin.Begin);
pageBlob.WritePages(memoryStream, i * pageSize);
var percentage = (float)((i * 100) / numPages);
Console.CursorLeft = 0;
Console.CursorTop = 0;
Console.WriteLine("Uploading {0}%", percentage);
}
if (file.Length > pageSize * numPages)
{
var lastPiece = (int)(file.Length - (pageSize * numPages));
var lastPage = new byte[lastPiece];

using (var lastStream = new MemoryStream(lastPage))
{
file.Read(lastPage, 0, lastPiece);
lastStream.Seek(0, SeekOrigin.Begin);
pageBlob.WritePages(lastStream, pageSize * numPages);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error: {0}", ex.Message);
}
finally
{
file.Close();
}
Console.WriteLine("Upload completed!");
Console.WriteLine("URL Drive: {0}", pageBlob.Uri);
Console.ReadLine();
}

private static CloudPageBlob GetPageBlob(long size)
{
CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) => configSetter(ConfigurationManager.ConnectionStrings[configName].ConnectionString));

var storageAccount = CloudStorageAccount.FromConfigurationSetting("BlobConnectionString");
var cloudBlobClient = storageAccount.CreateCloudBlobClient();
var container = cloudBlobClient.GetContainerReference("drives");
container.CreateIfNotExist();
var pageBlob = container.GetPageBlobReference("Cloud drive in Azure.vhd");
pageBlob.Properties.ContentType = "binary/octet-stream";
pageBlob.Create(size);

return pageBlob;
}


}
}

 

Una vez finalizada la subida, he usado una utilidad llamada Gladinet Cloud Desktop, la cual nos permite mapear almacenamientos de tipo cloud de varios proveedores, entre ellos el de Windows Azure Storage. Si accedo a mi almacenamiento en la nube, compruebo que la operación se ha realizado correctamente.

En un próximo post, veremos cómo montar esa unidad en la nube y que nuestras aplicaciones puedan hacer uso de ella.

¡Saludos!

3 comentarios en “Subir un disco duro virtual (vhd) a Windows Azure Storage”

  1. Hola, necesito saber como usar las siguientes referencias y de donde las saco:

    using Microsoft.WindowsAzure;
    using Microsoft.WindowsAzure.StorageClient;

    gracias

  2. Hola Cloudy,

    Las dll se encuentran dentro de Archivos de Programas en una carpeta llamada Windows Azure SDK. Dentro de ella encontrarás una llamada ref donde podrás seleccionarlas 🙂

    En el apartado Windows Azure de mi Blog verás varios ejemplos con estas dll.

    Espero que sea de utilidad 🙂

    ¡Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *