Me gustaría copiar un gran contenedor de almacenamiento de una cuenta de almacenamiento de Azure en el otro (que también pasa a ser en otra suscripción).

Me gustaría una opinión sobre las siguientes opciones:

  1. Escribir de una herramienta que conecta a ambas cuentas de almacenamiento y copia de los blobs de una en una, utilizando CloudBlob del DownloadToStream() y UploadFromStream(). Esta parece ser la peor opción, ya que no incurrirá en costos cuando la transferencia de los datos, y también puede ser bastante lento debido a que los datos se han de bajar a la máquina en que se ejecuta la herramienta y, a continuación, volver a subir de nuevo a Azure.

  2. Escribir un rol de trabajo a hacer lo mismo – esta teoría debería ser más rápido y no incurrirá en ningún costo. Sin embargo, esto es más trabajo.

  3. Cargar la herramienta a una instancia en ejecución omitiendo el rol de trabajo de implementación y orar en la herramienta termina antes de que la instancia recicladas/reset.

  4. El uso de una herramienta existente – no he encontrado nada interesante.

Sugerencias sobre el enfoque?

Actualización: me acabo de enterar de que esta funcionalidad finalmente ha sido introducida (Api REST sólo por ahora) para todas las cuentas de almacenamiento creado el 7 de julio de 2012 o posterior:

http://msdn.microsoft.com/en-us/library/windowsazure/dd894037.aspx

  • Pruebe el Azure Storage Synctool.
  • Azure Storage Synctool es un poco cruda – sólo admite Almacenamiento-para-local (en el sentido de que tendría que hacerlo en dos pasos, en primer lugar, descargue toda mi contenedor y, a continuación, volver a subirlo, que no es gran cosa) y sobre todo, que no se resume – que podría ser un poco de un problema. Los canteranos solución que hemos acabado de construcción (era muy fácil) apoya la reanudación, ¿ de almacenamiento para el almacenamiento y usos CopyFromBlob si hacerlo en la misma cuenta.

9 Comentarios

  1. 9

    Ya que no hay una forma directa para migrar los datos de una cuenta de almacenamiento a otro, tendría que hacer algo como lo que estábamos pensando. Si esto es dentro del mismo centro de datos, la opción #2 es la mejor apuesta, y será el más rápido (especialmente si utiliza una XL instancia dar más ancho de banda de red).

    Tan lejos como la complejidad, no es más difícil para crear este código en un rol de trabajo de lo que sería con una aplicación local. Sólo tiene que ejecutar este código desde su rol de trabajador del Run() método.

    Para hacer las cosas más robusta, que pueden hacer una lista de las notas en sus contenedores, a continuación, coloque de archivo específico-mover mensajes de solicitud en el azul de la cola (y optimizar al poner más de un nombre de objeto por mensaje). A continuación, utilice un rol de trabajador hilo para leer de la cola y los objetos del proceso. Incluso si su papel es reciclado, en el peor, te gustaría volver a procesar un mensaje. Para incrementar el rendimiento, entonces podría escalar a varios rol de trabajador instancias. Una vez que se complete la transferencia, usted simplemente derribar la implementación.

    ACTUALIZACIÓN – el 12 de junio De 2012, el Almacenamiento de Windows Azure API fue actualizado y ahora permite la cuenta de blob copia. Ver este blog para todos los detalles.

    • Una cosa interesante a tener en cuenta es que si los contenedores están en la misma cuenta de almacenamiento (que lamentablemente no es mi caso), hay una forma para copiar las notas sin pasar por el cliente – no estoy seguro de que la API no se, pero la ejecución de Fiddler, mientras que la copia con Azure Storage Explorer muestra el x-ms-copia-fuente de encabezado.
    • Ok, se llama «CopyFromBlob». Uno podría comprobar si la cuenta de origen coincide con el destino y el uso de ese método, de lo contrario usar el DownloadToStream/UploadToStream combo.
  2. 11

    También puede utilizar AzCopy que es parte de la Azure SDK.

    Simplemente haga clic en el botón de descarga para El SDK de Windows Azure y elegir WindowsAzureStorageTools.msi de la lista para descargar AzCopy.

    Después de la instalación, usted encontrará AzCopy.exe aquí: %PROGRAMFILES(X86)%\Microsoft SDKs\Windows Azure\AzCopy

    Usted puede obtener más información sobre el uso de AzCopy en este blog: AzCopy – El Uso De La Cruz De La Cuenta De Copia De Blob

    Así, usted podría escritorio remoto en una instancia y el uso de esta utilidad para la transferencia.

    Actualización:

    También puede copiar datos blob entre cuentas de almacenamiento en el uso de de Microsoft Azure Storage Explorer así. Referencia enlace

    • gracias por la actualización con información actual
  3. 6

    aquí es una parte de código que aproveche la .NET SDK de Azure disponible en http://www.windowsazure.com/en-us/develop/net

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.WindowsAzure.StorageClient;
    using System.IO;
    using System.Net;
    
    namespace benjguinAzureStorageTool
    {
        class Program
        {
            private static Context context = new Context();
    
            static void Main(string[] args)
            {
                try
                {
                    string usage = string.Format("Possible Usages:\n"
                    + "benjguinAzureStorageTool CopyContainer account1SourceContainer account2SourceContainer account1Name account1Key account2Name account2Key\n"
                    );
    
    
                    if (args.Length < 1)
                        throw new ApplicationException(usage);
    
                    int p = 1;
    
                    switch (args[0])
                    {
                        case "CopyContainer":
                            if (args.Length != 7) throw new ApplicationException(usage);
                            context.Storage1Container = args[p++];
                            context.Storage2Container = args[p++];
                            context.Storage1Name = args[p++];
                            context.Storage1Key = args[p++];
                            context.Storage2Name = args[p++];
                            context.Storage2Key = args[p++];
    
                            CopyContainer();
                            break;
    
    
                        default:
                            throw new ApplicationException(usage);
                    }
    
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("OK");
                    Console.ResetColor();
                }
                catch (Exception ex)
                {
                    Console.WriteLine();
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("Exception: {0}", ex.Message);
                    Console.ResetColor();
                    Console.WriteLine("Details: {0}", ex);
                }
            }
    
    
            private static void CopyContainer()
            {
                CloudBlobContainer container1Reference = context.CloudBlobClient1.GetContainerReference(context.Storage1Container);
                CloudBlobContainer container2Reference = context.CloudBlobClient2.GetContainerReference(context.Storage2Container);
                if (container2Reference.CreateIfNotExist())
                {
                    Console.WriteLine("Created destination container {0}. Permissions will also be copied.", context.Storage2Container);
                    container2Reference.SetPermissions(container1Reference.GetPermissions());
                }
                else
                {
                    Console.WriteLine("destination container {0} already exists. Permissions won't be changed.", context.Storage2Container);
                }
    
    
                foreach (var b in container1Reference.ListBlobs(
                    new BlobRequestOptions(context.DefaultBlobRequestOptions)
                    { UseFlatBlobListing = true, BlobListingDetails = BlobListingDetails.All }))
                {
                    var sourceBlobReference = context.CloudBlobClient1.GetBlobReference(b.Uri.AbsoluteUri);
                    var targetBlobReference = container2Reference.GetBlobReference(sourceBlobReference.Name);
    
                    Console.WriteLine("Copying {0}\n to\n{1}",
                        sourceBlobReference.Uri.AbsoluteUri,
                        targetBlobReference.Uri.AbsoluteUri);
    
                    using (Stream targetStream = targetBlobReference.OpenWrite(context.DefaultBlobRequestOptions))
                    {
                        sourceBlobReference.DownloadToStream(targetStream, context.DefaultBlobRequestOptions);
                    }
                }
            }
        }
    }
    
    • Gracias! Yo tenía la solución codificada ya, pero siempre es agradable ver algo de código compartido a cabo. Además, yo era la creación de un MemoryStream – es más simple (y más eficiente) a hacer un OpenWrite() en el destino de blob.
  4. 4

    Es muy simple con AzCopy. Descargar la última versión de https://azure.microsoft.com/en-us/documentation/articles/storage-use-azcopy/
    y en azcopy tipo:
    Copia de una nota dentro de una cuenta de almacenamiento:

    AzCopy /Source:https://myaccount.blob.core.windows.net/mycontainer1 /Dest:https://myaccount.blob.core.windows.net/mycontainer2 /SourceKey:key /DestKey:key /Pattern:abc.txt
    

    Copiar una nota a través de cuentas de almacenamiento:

    AzCopy /Source:https://sourceaccount.blob.core.windows.net/mycontainer1 /Dest:https://destaccount.blob.core.windows.net/mycontainer2 /SourceKey:key1 /DestKey:key2 /Pattern:abc.txt
    

    Copia de una nota de la secundaria de la región de

    Si su cuenta de almacenamiento tiene acceso de lectura geo-redundantes de almacenamiento permitido, entonces usted puede copiar los datos de la secundaria de la región.

    Copiar una nota a la cuenta primaria de la secundaria:

    AzCopy /Source:https://myaccount1-secondary.blob.core.windows.net/mynewcontainer1 /Dest:https://myaccount2.blob.core.windows.net/mynewcontainer2 /SourceKey:key1 /DestKey:key2 /Pattern:abc.txt
    
  5. 2

    Soy un Evangelista Técnico de Microsoft y he desarrollado una muestra y gratuita de la herramienta (sin soporte/sin garantía) para ayudar en estas situaciones.

    Los binarios y el código fuente está disponible aquí: https://blobtransferutility.codeplex.com/

    El Blob de la herramienta de Transferencia es una herramienta GUI para carga y descarga de miles de pequeñas y grandes archivos a/desde el Almacenamiento de Windows Azure Blob.

    Características:

    • Crear lotes para cargar/descargar
    • Establecer el Tipo de Contenido
    • De transferencia de archivos en paralelo
    • Dividir archivos de gran tamaño en partes más pequeñas que son transferidos en forma paralela

    El 1er y 3er característica es la respuesta a tu problema.

    Usted puede aprender desde el código de ejemplo de cómo lo hice yo, o usted puede simplemente ejecutar la herramienta y hacer lo que usted necesita hacer.

  6. 1

    Escribir la herramienta como un sencillo .De Línea de Comandos NET o Ganar Formas de aplicación.

    Crear e implementar un maniquí nosotros/rol de trabajador con RDP habilitado

    De inicio de sesión para la máquina a través de RDP

    Copia de su herramienta a través de la conexión RDP

    Ejecutar la herramienta en la máquina remota

    Eliminar la implementación del papel.

    Como usted yo no soy consciente de que cualquiera de los fuera de la plataforma de herramientas de apoyo a una copia entre la función.
    Usted puede considerar la instalación de Almacenamiento en la Nube de Estudio en el papel, y aunque dumping en el disco, a continuación, volver a cargar. http://cerebrata.com/Products/CloudStorageStudiov2/Details.aspx?t1=0&t2=7

    • No está seguro de por qué te gustaría proponer RDP. Aparte de la operación manual, de ser necesario, usted necesita para implementar su aplicación WinForms con su implementación. Un simple rol de trabajo en ejecución directa de la tarea es más sencilla y se puede adaptar a varias instancias para un rendimiento más rápido.
    • Cartel Original específicamente señaló que él iba a encontrar es quicket para escribir una ‘herramienta’ que escribir un rol de trabajador. De acuerdo en que yo había suele escribir un trabajador para hacer esto, pero en este caso he tratado de dar una respuesta que atentos a esa restricción. Usted no necesita para implementar la aplicación WInForms; literalmente, simplemente te arrastra a través de la RDP enlace como usted podría conectar y trabajar con un servidor on-premise.
    • Ok – Justo lo suficiente.
    • En realidad, lo que terminó haciendo bastante que – copiar-pegar mi WinForm en una ejecución de rol web y ejecutarlo desde allí. Aunque corrió allí, todavía no era la velocidad del rayo: se tomó alrededor de 22 horas a copiar algunos de los 400.000 artículos (en su mayoría de tamaño mediano jpeg) – 46.5 GB de datos – yo hubiera esperado que sea mucho más rápido (no más de 5 horas).
  7. 1

    Uso podría ‘Azure Storage Explorer’ (gratis) o alguna otra herramienta. Estas herramientas proporcionan una forma para descargar y cargar el contenido. Usted tendrá que crear manualmente los contenedores y tablas – y, por supuesto, esto tendrá un costo de transferencia – pero si usted es corto el tiempo y su contenido son de un tamaño razonable, entonces esta es una opción viable.

    • Como declaró en un principio, el contenedor que tuve que copiar era muy grande – Azure Storage Explorer no va bien en ese escenario. Terminé de escribir una herramienta personalizada – es muy sencillo – y lo corrió de la Azure web de papel para evitar el costo de transferencia.
  8. 0

    Que tenía que hacer somethign similares a mover 600 GB de contenido de un sistema de archivos local para Azure Storage. Después de un par de iteraciones de código que finalmente terminó con la toma de la ‘Azure Storage Explorer’ y la extendió con la capacidad para seleccionar las carpetas en lugar de sólo los archivos y, a continuación, de forma recursiva profundizar en los múltiples carpetas seleccionadas, se ha cargado una lista de Origen /Destino de la copia de declaraciones elemento en el azul de la Cola. A continuación, en la sección de cargar en ‘Azure Storage Explorer’, en la sección Cola para tirar de la cola y ejecutar la operación de copia.

    Luego me lanzó como 10 instancias de la ‘Azure Storage Explorer’ de la herramienta y tenía cada uno tirando de la cola y la ejecución de la operación de copia. Yo era capaz de mover los 600 GB de elementos en poco más de 2 días. Añadido en smarts para utilizar la modificación de las marcas de tiempo en los archivos y tener que saltar encima de los archivos que ya han sido copiados de la cola y no agregar a la cola si está en modo de sincronización. Ahora puedo correr «actualizaciones» o sincroniza dentro de una hora o dos a través de toda la biblioteca de contenido.

    • Te importa compartir el código?
  9. 0

    Intentar CloudBerry Explorer. Se copia a blob dentro de y entre las suscripciones.

    Para copiar entre las suscripciones, editar la cuenta de almacenamiento del contenedor de acceso de Private a Public Blob.

    El proceso de copia tomó unas horas para completar. Si usted decide reiniciar su máquina, el proceso continuará. Comprobar el estado refrescando el objetivo de la cuenta de almacenamiento de contenedores en la IU de administración de Azure mediante la comprobación de la hora, el valor se actualiza hasta que el proceso de copia finaliza.

    Copia de almacenamiento de datos de una Azure cuenta a otra

Dejar respuesta

Please enter your comment!
Please enter your name here