Подключение BLOB-хранилища с использованием протокола NFS 3.0

В этой статье описано, как подключить контейнер, сохраненный в Хранилище BLOB-объектов Azure, к виртуальной машине Azure на базе Linux или к локальной системе Linux по протоколу NFS версии 3.0. Дополнительные сведения о поддержке NFS 3.0 в Хранилище BLOB-объектов Azure см. в разделе Поддержка протокола NFS 3.0 в хранилище BLOB-объектов Azure.

Шаг 1. Создание виртуальной сети Azure

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

Клиенты в той же виртуальной сети могут подключать контейнеры в вашей учетной записи. Вы также можете подключить контейнер из клиента, работающего в локальной сети, но сначала подключить локальную сеть к виртуальной сети. Дополнительные сведения см. в разделе "Поддерживаемые сетевые подключения".

Шаг 2. Настройка безопасности сети

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

Другие средства, используемые для защиты данных, не могут использоваться для авторизации запроса NFS 3.0. Средства включают авторизацию ключа учетной записи, безопасность Microsoft Entra и списки управления доступом (ACL). Если добавить запись для именованного пользователя или группы в ACL большого двоичного объекта или каталога, этот большой двоичный объект или каталог становится недоступным для пользователей, не являющихся суперпользователями, на клиенте. Эту запись необходимо удалить, чтобы восстановить доступ не root-пользователям на клиенте.

Внимание

Протокол NFS 3.0 использует порты 111 и 2048. Если вы подключаетесь из локальной сети, убедитесь, что клиент разрешает исходящий обмен данными через эти порты. Если вы предоставили доступ к определенным виртуальным сетям, убедитесь, что все группы безопасности сети, связанные с этими виртуальными сетями, не содержат правил безопасности, которые блокируют входящий обмен данными через эти порты.

Шаг 3. Создание и настройка учетной записи хранения

Чтобы подключить контейнер по протоколу NFS 3.0, необходимо создать учетную запись хранения. Включить существующие учетные записи нельзя.

Протокол NFS 3.0 поддерживается для учетных записей хранения общего назначения версии 2 (ценовая категория "Стандартный") и учетных записей хранилища блочных BLOB-объектов (ценовая категория "Премиум"). Дополнительные сведения об учетных записях хранения см. в этой обзорной статье.

Чтобы настроить учетную запись, выберите следующие значения.

Настройка Производительность уровня "Премиум" Стандартная производительность
Расположение Все доступные регионы Все доступные регионы
Производительность Премиум Стандарт
Тип учетной записи BlockBlobStorage Общая цель версии 2
Репликация Локально избыточное хранилище (LRS), зонально избыточное хранилище (ZRS) Локально избыточное хранилище (LRS), Зонально избыточное хранилище (ZRS), Геоизбыточное хранилище (GRS)
Метод подключения Общедоступная конечная точка (выбранные сети) или частная конечная точка Общедоступная конечная точка (выбранные сети) или частная конечная точка
Иерархическое пространство имен Включен Включен
NFS версии 3 Включен Включен

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

Шаг 4. Создание контейнера

Создайте контейнер в учетной записи хранения с помощью любого из следующих средств или пакетов SDK.

Инструменты Пакеты SDK
Портал Azure .СЕТЬ
AzCopy Java
PowerShell Питон
Azure CLI JavaScript
ОТДЫХ

По умолчанию параметр root squash для нового контейнера имеет значение No Root Squash. Этот параметр можно изменить на Root Squash или All Squash. Дополнительные сведения об этих параметрах сжатия см. в документации операционной системы.

На следующем изображении показаны параметры сжатия так, как они отображаются на портале Azure.

Скриншот, показывающий параметры сжатия в Azure Portal.

Шаг 5. Установите пакет AZNFS Mount Helper

Пакет вспомогательной программы монтирования AZNFS помогает клиентам Linux NFS надежно получать доступ к NFS-общим ресурсам Azure Blob, даже если IP-адрес конечной точки изменяется. Этот пакет запускает фоновое задание aznfswatchdog, которое отслеживает изменения IP-адреса узла для смонтированных общих папок.

Если обнаружено изменение, это фоновое задание обновляет правила преобразования сетевых адресов назначения (DNAT). Для получения дополнительной информации см. помощник монтирования AZNFS.

  1. Определите, установлен ли на клиент пакет вспомогательного средства подключения AZNFS.

    systemctl is-active --quiet aznfswatchdog && echo -e "\nAZNFS mounthelper is installed! \n"
    

    Если пакет установлен, появится сообщение AZNFS mounthelper is installed! .

  2. Если пакет не установлен, используйте следующую команду, чтобы установить его:

    wget -O - -q https://github.com/Azure/AZNFS-mount/releases/latest/download/aznfs_install.sh | bash
    

На следующих дистрибутивах Linux поддерживается AZNFS:

  • Ubuntu (18.04 LTS, 20.04 LTS, 22.04 LTS, 24.04 LTS)

  • RedHat7, RedHat8, RedHat9, RedHat10

  • Роки8, Роки9

  • CentOS7, CentOS8

  • SUSE (SLES 15)

Совет

AZNFS 3.0 теперь доступен в публичной предварительной версии. Этот выпуск обеспечивает более высокую пропускную способность, поддерживает более крупные файлы, повышает производительность метаданных и устраняет ограничения группы пользователей. Дополнительные сведения об улучшениях и инструкциях по использованию AZNFS 3.0 см. вики AZNFS.

Шаг 6. Подключение контейнера

Создайте каталог в системе Linux и подключите контейнер в учетной записи хранения.

  1. Чтобы создать каталог в системе Linux, выполните:

    mkdir -p /nfsdata
    
  2. Подключите контейнер с помощью одного из описанных ниже методов. В обоих методах замените <storage-account-name> заполнитель именем учетной записи хранения. Затем замените <container-name> именем контейнера.

    • Чтобы общий ресурс был подключен автоматически при перезагрузке:

      1. Создайте запись в /etc/fstab файле, добавив следующую строку:

        <storage-account-name>.blob.core.windows.net:/<storage-account-name>/<container-name>  /nfsdata    aznfs defaults,sec=sys,vers=3,nolock,proto=tcp,nofail,_netdev    0 0
        
      2. Выполните следующую команду, чтобы немедленно обработать /etc/fstab записи и попытаться подключить предыдущий путь:

        mount /nfsdata
        
    • Для временного подключения, которое не сохраняется после перезагрузки, выполните следующую команду:

      mount -t aznfs -o sec=sys,vers=3,nolock,proto=tcp <storage-account-name>.blob.core.windows.net:/<storage-account-name>/<container-name>  /nfsdata
      

      Используя -t aznfs параметр подключения, вы гарантируете, что клиент NFS всегда будет правильно подключен к конечной точке хранилища, даже если IP-адрес конечной точки изменяется после подключения. NFS-ресурсы, смонтированные с помощью опции -t nfs, могут быть отключены от конечной точки хранилища, если IP-адрес этой конечной точки изменяется.

      Другие необязательные параметры доступны с помощью команды mount. Эти параметры в первую очередь влияют на поведение на стороне клиента. Значение sys — это единственное значение, которое поддерживает опция sec.

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

      Дополнительные сведения о том, как обеспечить поддержку Azure nconnect в клиенте, см. в статье "Увеличение числа TCP-подключений".

Устранение распространенных ошибок

Ошибка Причина/разрешение
Access denied by server while mounting Убедитесь, что клиент работает в поддерживаемой подсети. Дополнительные сведения см. в разделе "Поддерживаемые сетевые расположения".
No such file or directory Команду mount и ее параметры лучше не копировать, а вручную вводить непосредственно в терминале. Если вы скопируете любую часть этой команды в терминал из другого приложения, скрытые символы в скопированных данных могут вызвать ошибку. Эта ошибка также может появиться, если для учетной записи не включена поддержка NFS 3.0.
Permission denied По умолчанию для вновь созданного контейнера NFS версии 3.0 устанавливается режим доступа 0750. Нерутовые пользователи не имеют доступа к тому. Если требуется доступ пользователей, не имеющих прав root, то пользователи с правами root должны изменить режим на 0755. Ниже приведен пример команды: sudo chmod 0755 /nfsdata
EINVAL ("Invalid argument"( Эта ошибка может возникать при попытке клиента:
  • запись в большой двоичный объект, созданный на основе конечной точки большого двоичного объекта;
  • Удалите объект бинарных данных с моментальным снимком или который находится в контейнере с активной политикой WORM (пишется один раз, считывается много раз).
EROFS ("Read-only file system"( Эта ошибка может возникать при попытке клиента:
  • запись в большой двоичный объект или удаление большого двоичного объекта с активной арендой;
  • запись в большой двоичный объект или удаление большого двоичного объекта в контейнере с активной политикой WORM.
NFS3ERR_IO/EIO ("Input/output error"( Эта ошибка может возникать, когда клиент пытается прочитать, записать или задать атрибуты больших двоичных объектов, которые хранятся на архивном уровне доступа.
Ошибка OperationNotSupportedOnSymLink Эта ошибка может быть возвращена во время операции записи через хранилище BLOB-объектов или API Azure Data Lake Storage. Использование этих API для записи или удаления символьных ссылок, созданных с помощью NFS 3.0, запрещено. Используйте конечную точку NFS версии 3.0 для работы с символьными ссылками.
mount: /nfsdata: bad option; Установите программу-помощник NFS с помощью sudo apt install nfs-common.
Connection Timed Out Убедитесь, что клиент разрешает исходящий обмен данными через порты 111 и 2048. Протокол NFS 3.0 использует эти порты. Убедитесь, что вы подключаете учетную запись хранения с помощью конечной точки хранилища BLOB-объектов, а не конечной точки Data Lake Storage.

Ограничения и устранение неполадок для средства монтирования AZNFS.

Дополнительные сведения см. в помощнике монтирования AZNFS.