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


Синхронизация с хранилищем BLOB-объектов Azure с помощью AzCopy

Вы можете синхронизировать локальное хранилище с хранилищем BLOB-объектов Azure с помощью служебной программы командной строки AzCopy версии 10.

Вы можете синхронизировать содержимое локальной файловой системы с контейнером BLOB-объектов. Вы также можете синхронизировать контейнеры и виртуальные каталоги друг с другом. Синхронизация имеет односторонний характер. Другими словами, вы выбираете, какая из этих двух конечных точек будет источником, а какая — назначением. В синхронизации также используются API сервер-сервер. Примеры, приведенные в этом разделе, также подходят для учетных записей с иерархическим пространством имен.

Примечание.

Текущая версия AzCopy не выполняет синхронизацию между другими источниками и назначениями (например, хранилище файлов или контейнеры Amazon Web Services (AWS) S3).

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

Начало работы

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

Примечание.

В примерах этой статьи предполагается, что вы предоставили учетные данные авторизации с помощью идентификатора Microsoft Entra.

Если вы предпочитаете использовать для авторизации доступа к данным большого двоичного объекта маркер SAS, маркер можно добавить к URL-адресу ресурса в каждой команде AzCopy. Например: 'https://<storage-account-name>.blob.core.windows.net/<container-name><SAS-token>'.

Рекомендации

По умолчанию команда синхронизации сравнивает имена файлов и метки времени последнего изменения. Это поведение можно переопределить для использования хэшей MD5 вместо последних измененных меток времени с помощью флага --compare-hash . Установите для дополнительного флага --delete-destination значение true или prompt, чтобы удалить файлы в целевом каталоге, если эти файлы больше не существуют в исходном каталоге.

  • Если установить для флага --delete-destination значение true, AzCopy удаляет файлы без подтверждения. Если требуется подтверждение перед тем, как AzCopy удалит файл, установите для флага --delete-destination значение prompt.

  • Если вы планируете задать для флага --delete-destination значение prompt или false, попробуйте использовать команду copy вместо команды sync и присвойте параметру --overwrite значение ifSourceNewer. Команда copy потребляет меньше памяти и связана с меньшими затратами, поскольку операция копирования не должна индексировать источник или назначение перед перемещением файлов.

  • Если вы не планируете использовать --compare-hash флаг, компьютер, на котором выполняется команда синхронизации, должен иметь точные системные часы, так как время последнего изменения критически важно для определения необходимости передачи файла. Если системные часы рассинхронизированы, не следует изменять файлы в месте назначения слишком близко к тому времени, когда планируется выполнять команду sync.

  • AzCopy использует API-интерфейсы "сервер — сервер" для синхронизации данных между учетными записями хранения. Это означает, что данные копируются непосредственно между серверами хранения. Однако AzCopy настраивает и отслеживает каждую передачу, а для больших учетных записей хранения (например, учетных записей, содержащих миллионы больших двоичных объектов), AzCopy может потребовать значительного объема вычислительных ресурсов для выполнения этих задач. Поэтому при запуске AzCopy из виртуальной машины убедитесь, что виртуальная машина имеет достаточно ядер или памяти для обработки нагрузки.

  • Чтобы избежать случайного удаления, включите функцию обратимого удаления перед использованием флага --delete-destination=prompt|true.

Обновление контейнера с изменениями в локальной файловой системе

В этом случае контейнер является назначением, а локальная файловая система — источником.

Совет

В этом примере аргументы пути заключены в одинарные кавычки (' '). Используйте одинарные кавычки во всех командных оболочках, кроме командной оболочки Windows (cmd.exe). Если вы используете командную оболочку Windows (cmd.exe), заключите аргументы пути в двойные кавычки ("") вместо одинарных (").

Синтаксис

azcopy sync '<local-directory-path>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>' --recursive

Пример

azcopy sync 'C:\myDirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer' --recursive

Обновление локальной файловой системы с изменениями в контейнере

В этом случае контейнер является источником, а локальная файловая система — назначением.

Совет

В этом примере аргументы пути заключены в одинарные кавычки (' '). Используйте одинарные кавычки во всех командных оболочках, кроме командной оболочки Windows (cmd.exe). Если вы используете командную оболочку Windows (cmd.exe), заключите аргументы пути в двойные кавычки ("") вместо одинарных (").

Синтаксис

azcopy sync 'https://<storage-account-name>.blob.core.windows.net/<container-name>' 'C:\myDirectory' --recursive

Пример

azcopy sync 'https://mystorageaccount.blob.core.windows.net/mycontainer' 'C:\myDirectory' --recursive

Обновление контейнера с изменениями в другом контейнере

Первый контейнер в этой команде — источник. Второй является назначением.

Если вы предоставляете учетные данные авторизации с помощью идентификатора Microsoft Entra, убедитесь, что вы настроили соответствующие роли в исходной и целевой учетной записи. См . вариант 1. Использование идентификатора Microsoft Entra.

Совет

В этом примере аргументы пути заключены в одинарные кавычки (' '). Используйте одинарные кавычки во всех командных оболочках, кроме командной оболочки Windows (cmd.exe). Если вы используете командную оболочку Windows (cmd.exe), заключите аргументы пути в двойные кавычки ("") вместо одинарных (").

Синтаксис

azcopy sync 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>' --recursive

Пример

azcopy sync 'https://mysourceaccount.blob.core.windows.net/mycontainer?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive

Обновление каталога с изменениями в каталоге в другом контейнере

Первый каталог, который отображается в этой команде, является источником. Второй является назначением.

Если вы предоставляете учетные данные авторизации с помощью идентификатора Microsoft Entra, убедитесь, что вы настроили соответствующие роли в исходной и целевой учетной записи. См . вариант 1. Использование идентификатора Microsoft Entra.

Совет

В этом примере аргументы пути заключены в одинарные кавычки (' '). Используйте одинарные кавычки во всех командных оболочках, кроме командной оболочки Windows (cmd.exe). Если вы используете командную оболочку Windows (cmd.exe), заключите аргументы пути в двойные кавычки ("") вместо одинарных (").

Синтаксис

azcopy sync 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive

Пример

azcopy sync 'https://mysourceaccount.blob.core.windows.net/<container-name>/myDirectory?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.windows.net/mycontainer/myDirectory' --recursive

Синхронизация с дополнительными флагами

Вы можете настроить операцию синхронизации с помощью дополнительных флагов. Вот несколько примеров.

Сценарий Флаг
Указание, насколько строго должны проверяться хэши MD5 при скачивании. --check-md5=[NoCheck|LogOnly|FailIfDifferent|FailIfDifferentOrMissing]
Исключите файлы на основе шаблона. --exclude-path
Укажите, насколько подробными должны быть записи журнала, связанные с синхронизацией. --log-level=[WARNING|ERROR|INFO|NONE]

Полный список флагов см. в разделе Параметры.

Примечание.

По умолчанию флаг --recursive имеет значение true. Флаги --exclude-pattern и --include-pattern применяются только к именам файлов, а не к другим частям пути к файлу.

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

Дополнительные примеры см. в следующих статьях:

Ознакомьтесь со статьями ниже, чтобы получить сведения о настройке параметров, оптимизации производительности и устранении проблем: