Поделиться через


Перенос данных с помощью AzCopy версии 7 для Linux

AzCopy — это служебная программа командной строки. Она предназначена для копирования данных из хранилища BLOB-объектов и хранилища файлов Microsoft Azure (и обратно) с помощью простых команд, обеспечивающих оптимальную производительность. Вы можете перемещать данные между файловой системой и учетной записью хранения или между разными учетными записями хранения.

Внимание

В данной статье описывается более ранняя версия AzCopy. Чтобы установить последнюю версию AzCopy, см. статью AzCopy версии 10.

Примечание.

Начиная с версии AzCopy 7.2 зависимости .NET Core упаковываются в пакет AzCopy. Если вы используете версию 7.2 или более позднюю, предварительно устанавливать .NET Core уже не нужно.

Скачивание и установка AzCopy

Установка в Ubuntu

Примечание.

В зависимости от конкретного дистрибутива иногда нужно отдельно устанавливать зависимости .NET Core 2.1, описанные в статье о предварительных требованиях к .NET Core.

Ubuntu 14.04

Добавьте источник apt для репозитория продуктов Linux от корпорации Майкрософт и установите AzCopy.

sudo echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod/ trusty main" > azure.list
sudo cp ./azure.list /etc/apt/sources.list.d/
sudo apt-key adv --keyserver packages.microsoft.com --recv-keys EB3E94ADBE1229CF
sudo apt-get update
sudo apt-get install azcopy

Ubuntu 16.04

Добавьте источник apt для репозитория продуктов Linux от корпорации Майкрософт и установите AzCopy.

echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod/ xenial main" > azure.list
sudo cp ./azure.list /etc/apt/sources.list.d/
sudo apt-key adv --keyserver packages.microsoft.com --recv-keys EB3E94ADBE1229CF
sudo apt-get update
sudo apt-get install azcopy

Написание первой команды AzCopy

В командах AzCopy используется следующий базовый синтаксис:

azcopy --source <source> --destination <destination> [Options]

В следующих примерах демонстрируются различные сценарии копирования данных в и из Блобов и Файлов Microsoft Azure. Чтобы получить подробное объяснение параметров, используемых в каждом примере, воспользуйтесь меню azcopy --help.

Блоб: скачивание

Загрузить один объект типа BLOB

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer/abc.txt \
    --destination /mnt/myfiles/abc.txt \
    --source-key <key> 

Если папка /mnt/myfiles не существует, AzCopy создаст ее и скачает abc.txt в эту новую папку.

Скачивание одного blob из вторичного региона

azcopy \
    --source https://myaccount-secondary.blob.core.windows.net/mynewcontainer/abc.txt \
    --destination /mnt/myfiles/abc.txt \
    --source-key <key>

Обратите внимание: должно быть включено геоизбыточное хранилище с доступом только для чтения.

Скачать все BLOB-объекты

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination /mnt/myfiles \
    --source-key <key> \
    --recursive

Предположим, что следующие BLOB-объекты находятся в указанном контейнере:

abc.txt
abc1.txt
abc2.txt
vd1/a.txt
vd1/abcd.txt

После скачивания в каталог /mnt/myfiles будут помещены следующие файлы:

/mnt/myfiles/abc.txt
/mnt/myfiles/abc1.txt
/mnt/myfiles/abc2.txt
/mnt/myfiles/vd1/a.txt
/mnt/myfiles/vd1/abcd.txt

Если не задать параметр --recursive, ни один blob не будет загружен.

Скачайте BLOB с указанным префиксом

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination /mnt/myfiles \
    --source-key <key> \
    --include "a" \
    --recursive

Предположим, что в указанном контейнере находятся следующие BLOBы: Скачиваются все блобы, имя которых начинается с префикса a.

abc.txt
abc1.txt
abc2.txt
xyz.txt
vd1\a.txt
vd1\abcd.txt

После скачивания в папку /mnt/myfiles будут помещены следующие файлы:

/mnt/myfiles/abc.txt
/mnt/myfiles/abc1.txt
/mnt/myfiles/abc2.txt

Префикс применяется к виртуальному каталогу, который составляет первую часть имени объекта BLOB. В приведенном выше примере виртуальный каталог не соответствует заданному префиксу, поэтому объект blob не загружается. Кроме того, если параметр --recursive не указан, AzCopy не загружает объекты BLOB.

Установите время последнего изменения экспортированных файлов так, чтобы оно совпадало с временем изменения исходных больших двоичных объектов.

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination "/mnt/myfiles" \
    --source-key <key> \
    --preserve-last-modified-time

Исключить большие двоичные объекты из операции скачивания вы можете также на основе времени их последнего изменения. Например, если вы хотите исключить объекты Blob, измененные в то же время или позже, чем конечный файл, добавьте опцию --exclude-newer:

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination /mnt/myfiles \
    --source-key <key> \
    --preserve-last-modified-time \
    --exclude-newer

А если нужно исключить блобы, время последнего изменения которых совпадает с временем изменения файла назначения или предшествует ему, добавьте параметр --exclude-older:

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination /mnt/myfiles \
    --source-key <key> \
    --preserve-last-modified-time \
    --exclude-older

Blob: Загрузка

Отправка одного файла

azcopy \
    --source /mnt/myfiles/abc.txt \
    --destination https://myaccount.blob.core.windows.net/mycontainer/abc.txt \
    --dest-key <key>

Если указанный контейнер назначения не существует, AzCopy создаст его и передаст в него файл.

Отправка одного файла в виртуальный каталог

azcopy \
    --source /mnt/myfiles/abc.txt \
    --destination https://myaccount.blob.core.windows.net/mycontainer/vd/abc.txt \
    --dest-key <key>

Если указанный виртуальный каталог не существует, AzCopy загрузит файл, чтобы включить виртуальный каталог в имя блоба (например, vd/abc.txt в указанном выше примере).

Перенаправление из STDIN

gzip myarchive.tar -c | azcopy \
    --destination https://myaccount.blob.core.windows.net/mycontainer/mydir/myarchive.tar.gz \
    --dest-key <key>

Отправка всех файлов

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key <key> \
    --recursive

Указание параметра --recursive обеспечивает рекурсивную передачу содержимого указанного каталога в хранилище Blob, что означает, что также передаются все вложенные папки и их файлы. Например, предположим, что следующие файлы находятся в папке /mnt/myfiles:

/mnt/myfiles/abc.txt
/mnt/myfiles/abc1.txt
/mnt/myfiles/abc2.txt
/mnt/myfiles/subfolder/a.txt
/mnt/myfiles/subfolder/abcd.txt

После завершения операции загрузки в контейнер будут помещены следующие файлы:

abc.txt
abc1.txt
abc2.txt
subfolder/a.txt
subfolder/abcd.txt

Если параметр --recursive не указать, будут переданы только следующие три файла:

abc.txt
abc1.txt
abc2.txt

Отправка файлов, соответствующих указанному шаблону

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key <key> \
    --include "a*" \
    --recursive

Предположим, что следующие файлы размещены в папке /mnt/myfiles:

/mnt/myfiles/abc.txt
/mnt/myfiles/abc1.txt
/mnt/myfiles/abc2.txt
/mnt/myfiles/xyz.txt
/mnt/myfiles/subfolder/a.txt
/mnt/myfiles/subfolder/abcd.txt

После завершения операции загрузки в контейнер будут помещены следующие файлы:

abc.txt
abc1.txt
abc2.txt
subfolder/a.txt
subfolder/abcd.txt

Если параметр --recursive не указан, AzCopy пропускает файлы, находящиеся во вложенных каталогах.

abc.txt
abc1.txt
abc2.txt

Указание типа содержимого MIME для целевого BLOB

По умолчанию AzCopy задает для типа содержимого целевого BLOB-объекта значение application/octet-stream. Однако вы можете явно задать тип содержимого с помощью параметра --set-content-type [content-type]. Этот синтаксис задает тип содержимого для всех блобов в операции загрузки.

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/myContainer/ \
    --dest-key <key> \
    --include "ab" \
    --set-content-type "video/mp4"

Если параметр --set-content-type задан без значения, AzCopy установит тип данных каждого блоба или файла в соответствии с его расширением.

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/myContainer/ \
    --dest-key <key> \
    --include "ab" \
    --set-content-type

Настройка сопоставления типов содержимого MIME

AzCopy использует файл конфигурации, содержащий сопоставление расширения файла с типом содержимого. При необходимости можно настроить это сопоставление и добавить новые пары. Сопоставление находится в файле /usr/lib/azcopy/AzCopyConfig.json.

Блоб: копирование

Копирование большого двоичного объекта в пределах учетной записи хранения

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer1/abc.txt \
    --destination https://myaccount.blob.core.windows.net/mycontainer2/abc.txt \
    --source-key <key> \
    --dest-key <key>

При копировании blob без параметра --sync-copy выполняется операция копирования на стороне сервера.

Копирование большого двоичного объекта между различными учетными записями хранения

azcopy \
    --source https://sourceaccount.blob.core.windows.net/mycontainer1/abc.txt \
    --destination https://destaccount.blob.core.windows.net/mycontainer2/abc.txt \
    --source-key <key1> \
    --dest-key <key2>

При копировании blob без параметра --sync-copy выполняется операция копирования на стороне сервера.

Копирование одного большого двоичного объекта из дополнительного региона в основной регион

azcopy \
    --source https://myaccount1-secondary.blob.core.windows.net/mynewcontainer1/abc.txt \
    --destination https://myaccount2.blob.core.windows.net/mynewcontainer2/abc.txt \
    --source-key <key1> \
    --dest-key <key2>

Обратите внимание: должно быть включено геоизбыточное хранилище с доступом только для чтения.

Копирование одного блоба и его моментальных снимков между различными учетными записями хранения

azcopy \
    --source https://sourceaccount.blob.core.windows.net/mycontainer1/ \
    --destination https://destaccount.blob.core.windows.net/mycontainer2/ \
    --source-key <key1> \
    --dest-key <key2> \
    --include "abc.txt" \
    --include-snapshot

После копирования целевой контейнер содержит двоичный объект и его моментальные снимки. Контейнер включает следующий объект BLOB и его моментальные снимки.

abc.txt
abc (2013-02-25 080757).txt
abc (2014-02-21 150331).txt

Синхронное копирование объектов типа blob между учетными записями хранения

По умолчанию AzCopy выполняет асинхронное копирование данных между двумя конечными точками хранилища. Следовательно, операция копирования выполняется в фоновом режиме, используя запасную пропускную способность, для которой не установлено соглашение об уровне обслуживания, определяющее скорость, с которой копируется блоб.

Параметр --sync-copy обеспечивает постоянную скорость операции копирования. AzCopy выполняет синхронное копирование, скачивая блобы из указанного источника в локальную память, а затем загружая их в целевое хранилище Blob.

azcopy \
    --source https://myaccount1.blob.core.windows.net/myContainer/ \
    --destination https://myaccount2.blob.core.windows.net/myContainer/ \
    --source-key <key1> \
    --dest-key <key2> \
    --include "ab" \
    --sync-copy

Параметр --sync-copy может повлечь дополнительные затраты на исходящий трафик по сравнению с асинхронным копированием. Во избежание таких затрат мы советуем использовать данный режим в виртуальных машинах Azure, которые находятся в одном регионе с вашей исходной учетной записью хранения.

Файл: скачивание

Скачивание одного файла

azcopy \
    --source https://myaccount.file.core.windows.net/myfileshare/myfolder1/abc.txt \
    --destination /mnt/myfiles/abc.txt \
    --source-key <key>

Если указанный источник является общей папкой Azure, необходимо указать точное имя файла (напримерabc.txt, для скачивания одного файла) или указать параметр --recursive для скачивания всех файлов в общей папке рекурсивно. Попытка одновременно задать шаблон файла и параметр --recursive приводит к ошибке.

Скачивание всех файлов

azcopy \
    --source https://myaccount.file.core.windows.net/myfileshare/ \
    --destination /mnt/myfiles \
    --source-key <key> \
    --recursive

Обратите внимание на то, что пустые папки не скачиваются.

Файл: загрузка

Отправка одного файла

azcopy \
    --source /mnt/myfiles/abc.txt \
    --destination https://myaccount.file.core.windows.net/myfileshare/abc.txt \
    --dest-key <key>

Отправка всех файлов

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.file.core.windows.net/myfileshare/ \
    --dest-key <key> \
    --recursive

Обратите внимание на то, что пустые папки не загружаются.

Отправка файлов, соответствующих указанному шаблону

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.file.core.windows.net/myfileshare/ \
    --dest-key <key> \
    --include "ab*" \
    --recursive

Файл: Копировать

Копирование файлов через файловые хранилища

azcopy \
    --source https://myaccount1.file.core.windows.net/myfileshare1/ \
    --destination https://myaccount2.file.core.windows.net/myfileshare2/ \
    --source-key <key1> \
    --dest-key <key2> \
    --recursive

При копировании файла между файловыми ресурсами выполняется операция копирования на стороне сервера.

Копирование из общей файловой папки в объект BLOB

azcopy \ 
    --source https://myaccount1.file.core.windows.net/myfileshare/ \
    --destination https://myaccount2.blob.core.windows.net/mycontainer/ \
    --source-key <key1> \
    --dest-key <key2> \
    --recursive

При копировании файла из файлового хранилища в BLOB выполняется операция копирования на стороне сервера.

Копирование из Blob в файловое хранилище

azcopy \
    --source https://myaccount1.blob.core.windows.net/mycontainer/ \
    --destination https://myaccount2.file.core.windows.net/myfileshare/ \
    --source-key <key1> \
    --dest-key <key2> \
    --recursive

При копировании файла из блоба в файловое хранилище выполняется операция на стороне сервера копирования.

Синхронное копирование файлов

Вы можете указать параметр --sync-copy для синхронного копирования данных из хранилища файлов в хранилище файлов, из хранилища файлов в хранилище BLOB-объектов, а также из хранилища BLOB-объектов в хранилище файлов. AzCopy выполняет эту операцию, скачивая исходные данные в локальную память и передавая их в место назначения. В этом случае взимается стандартная плата за исходящий трафик.

azcopy \
    --source https://myaccount1.file.core.windows.net/myfileshare1/ \
    --destination https://myaccount2.file.core.windows.net/myfileshare2/ \
    --source-key <key1> \
    --dest-key <key2> \
    --recursive \
    --sync-copy

При копировании из хранилища файлов в хранилище BLOB-объектов тип BLOB по умолчанию — блочный BLOB, пользователь может указать параметр --blob-type page для изменения типа целевого BLOB-объекта. Доступные типы — page | block | append.

Обратите внимание на то, что параметр --sync-copy может повлечь дополнительные затраты на исходящий трафик по сравнению с асинхронным копированием. Во избежание таких затрат мы советуем использовать данный режим в виртуальных машинах Azure, которые находятся в одном регионе с вашей исходной учетной записью хранения.

Другие функции AzCopy

Копирование только тех данных, которых нет в целевой папке

Предотвратить копирование старого или нового ресурса позволяют параметры --exclude-older и --exclude-newer соответственно. Если нужно скопировать только те исходные ресурсы, которых нет в целевой папке, в команде AzCopy вы можете указать оба параметра:

--source http://myaccount.blob.core.windows.net/mycontainer --destination /mnt/myfiles --source-key <sourcekey> --recursive --exclude-older --exclude-newer

--source /mnt/myfiles --destination http://myaccount.file.core.windows.net/myfileshare --dest-key <destkey> --recursive --exclude-older --exclude-newer

--source http://myaccount.blob.core.windows.net/mycontainer --destination http://myaccount.blob.core.windows.net/mycontainer1 --source-key <sourcekey> --dest-key <destkey> --recursive --exclude-older --exclude-newer

Использование файла конфигурации для задания параметров командной строки

azcopy --config-file "azcopy-config.ini"

В файл конфигурации можно добавить параметры командной строки AzCopy. AzCopy обрабатывает параметры в файле, как если бы он были заданы в командной строке, выполняя прямую замену содержимого файла.

Предположим, у нас имеется файл конфигурации copyoperation, содержащий приведенные ниже строки. Каждый параметр AzCopy можно указать в одной строке.

--source http://myaccount.blob.core.windows.net/mycontainer --destination /mnt/myfiles --source-key <sourcekey> --recursive --quiet

или на отдельных строках

--source http://myaccount.blob.core.windows.net/mycontainer
--destination /mnt/myfiles
--source-key<sourcekey>
--recursive
--quiet

При выполнении AzCopy возникнет ошибка, если разделить параметр на две строки, как показано ниже на примере параметра --source-key.

http://myaccount.blob.core.windows.net/mycontainer
/mnt/myfiles
--sourcekey
<sourcekey>
--recursive
--quiet

Укажите подпись общего доступа (SAS)

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer1/abc.txt \
    --destination https://myaccount.blob.core.windows.net/mycontainer2/abc.txt \
    --source-sas <SAS1> \
    --dest-sas <SAS2>

Кроме того, вы можете указать SAS в коде URI контейнера:

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer1/?SourceSASToken \
    --destination /mnt/myfiles \
    --recursive

Папка файлов журнала

При каждом вводе команды для AzCopy выполняется проверка на наличие файла журнала в папке по умолчанию или в папке, которая была задана с помощью данного параметра. Если в обоих местах файл журнала отсутствует, AzCopy воспринимает операцию как новую и создает новый файл журнала.

Если файл журнала существует, AzCopy проверяет, соответствует ли введенная командная строка командной строке в файле журнала. Если две командные строки совпадают, AzCopy возобновляет незавершенную операцию. Если они не совпадают, AzCopy предложит пользователю либо перезаписать файл журнала, чтобы начать новую операцию, либо отменить текущую операцию.

Если вы хотите использовать расположение по умолчанию для файла журнала:

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key <key> \
    --resume

Если опустить параметр--resume или задать параметр --resume без пути папки, как указано выше, AzCopy создает файл журнала в расположении по умолчанию: ~\Microsoft\Azure\AzCopy. Если файл журнала уже существует, то AzCopy возобновляет операцию на основе файла журнала.

Если вы хотите указать нестандартное расположение для файла журнала:

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key key \
    --resume "/mnt/myjournal"

В этом примере создается файл журнала, если он еще не существует. Если такой файл существует, то AzCopy возобновляет операцию на основе файла журнала.

Если вы хотите возобновить операцию AzCopy, повторите ту же самую команду. AzCopy для Linux запросит подтверждение.

Incomplete operation with same command line detected at the journal directory "/home/myaccount/Microsoft/Azure/AzCopy", do you want to resume the operation? Choose Yes to resume, choose No to overwrite the journal to start a new operation. (Yes/No)

Вывод подробных журналов

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key <key> \
    --verbose

Укажите количество одновременных операций для запуска

Параметр --parallel-level задает количество одновременных операций копирования. По умолчанию AzCopy запускает несколько одновременных операций для увеличения скорости передачи данных. Количество одновременных операций равно восьмикратному количеству процессоров в вашем распоряжении. При выполнении AzCopy в сети с низкой пропускной способностью можно задать меньшее значение для параметра --parallel-level, чтобы избежать сбоев, вызванных соревнованием за ресурсы.

Совет

Чтобы просмотреть полный список параметров AzCopy, ознакомьтесь с меню azcopy --help.

Шаги установки для AzCopy 7.1 и более ранних версий

Для AzCopy для Linux (версия 7.1 и более ранние) требуется платформа .NET Core. Инструкции по ее установке можно найти на странице установки .NET Core.

Для начала установите .NET Core на Ubuntu 16.10. Последняя версия руководства доступна на странице установки .NET Core для Linux.

sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ yakkety main" > /etc/apt/sources.list.d/dotnetdev.list' 
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
sudo apt-get update
sudo apt-get install dotnet-sdk-2.0.0

После установки .NET Core скачайте и установите AzCopy.

wget -O azcopy.tar.gz https://aka.ms/downloadazcopyprlinux
tar -xf azcopy.tar.gz
sudo ./install.sh

После установки AzCopy для Linux извлеченные файлы можно будет удалить. Если у вас нет привилегий суперпользователя, azcopy можно выполнить с помощью скрипта оболочки azcopy, который содержится в извлеченной папке.

Известные проблемы и рекомендации

Ошибка при установке AzCopy

В случае возникновения проблем при установке AzCopy можно попытаться запустить AzCopy с помощью сценария bash в извлеченной папке azcopy.

cd azcopy
./azcopy

Ограничение одновременных операций записи при копировании данных

При копировании BLOB-объектов или файлов с помощью AzCopy следует иметь в виду, что другое приложение может изменять данные в то время, когда они копируются. Если это возможно, обеспечьте, чтобы во время операции копирования не происходило изменение копируемых данных. Например, при копировании VHD, связанного с виртуальной машиной Azure, убедитесь в том, что никакое другое приложение в это время не записывает данные на VHD. Для этого рекомендуется сдать ресурс, который нужно скопировать, в аренду. В качестве альтернативы можно сначала создать моментальный снимок VHD, а затем скопировать его.

Если не удается предотвратить запись в BLOB-объекты или файлы во время их копирования со стороны других приложений, следует иметь в виду, что к моменту завершения задания скопированные ресурсы могут больше не иметь полного соответствия с исходными ресурсами.

Запуск нескольких процессов AzCopy

Вы можете запустить несколько процессов AzCopy на одном клиенте, если предоставите для каждого из них отдельные папки журналов. Использование одной папки журналов для нескольких процессов AzCopy не поддерживается.

1-й процесс:

azcopy \
    --source /mnt/myfiles1 \
    --destination https://myaccount.blob.core.windows.net/mycontainer/myfiles1 \
    --dest-key <key> \
    --resume "/mnt/myazcopyjournal1"

2-й процесс:

azcopy \
    --source /mnt/myfiles2 \
    --destination https://myaccount.blob.core.windows.net/mycontainer/myfiles2 \
    --dest-key <key> \
    --resume "/mnt/myazcopyjournal2"

Следующие шаги

Для получения дополнительной информации о службе хранилища Azure и AzCopy ознакомьтесь со следующими ресурсами.

Документация по хранилищу Azure:

Записи блога по хранилищу Azure: