다음을 통해 공유


NFS(네트워크 파일 시스템) 3.0 프로토콜을 사용하여 Blob Storage 탑재

주의

이 문서에서는 EOL(수명 종료) 상태에 가까워진 Linux 배포판인 CentOS를 참조하세요. 이에 따라 사용 및 플랜을 고려하세요. 자세한 내용은 CentOS 수명 종료 지침을 참조하세요.

이 문서에서는 NFS(네트워크 파일 시스템) 3.0 프로토콜을 사용하여 온-프레미스에서 실행되는 Linux 기반 Azure VM(Virtual Machine) 또는 Linux 시스템에서 Blob Storage에 컨테이너를 탑재하는 방법에 대한 지침을 제공합니다. Blob Storage에서 NFS 3.0 프로토콜 지원에 대한 자세한 내용은 Azure Blob Storage에 대한 NFS(네트워크 파일 시스템) 3.0 프로토콜 지원을 참조하세요.

1단계: Azure Virtual Network 만들기

스토리지 계정은 가상 네트워크 내에 포함되어야 합니다. 클라이언트는 가상 네트워크를 통해 스토리지 계정에 안전하게 연결할 수 있습니다. Azure Virtual Network 및 가상 네트워크를 만드는 방법에 대한 자세한 내용은 Virtual Network 설명서를 참조하세요.

참고 항목

동일한 가상 네트워크의 클라이언트는 계정에 컨테이너를 탑재할 수 있습니다. 온-프레미스 네트워크에서 실행되는 클라이언트에서 컨테이너를 탑재할 수도 있지만 먼저 온-프레미스 네트워크를 가상 네트워크에 연결해야 합니다. 지원되는 네트워크 연결을 참조하세요.

2단계: 네트워크 보안 구성

현재 스토리지 계정의 데이터를 보호하는 유일한 방법은 가상 네트워크 및 기타 네트워크 보안 설정을 사용하는 것입니다. 자세히 알아보려면 Blob Storage에 대한 네트워크 보안 권장 사항을 참조하세요.

계정 키 권한 부여, Microsoft Entra 보안, ACL(액세스 제어 목록)을 포함하여 데이터를 보호하는 데 사용되는 다른 도구는 NFS 3.0 요청에 권한을 부여하는 데 사용할 수 없습니다. 실제로 명명된 사용자 또는 그룹에 대한 항목을 Blob 또는 디렉터리의 ACL에 추가하면 루트가 아닌 사용자의 경우 클라이언트에서 해당 파일에 액세스할 수 없게 됩니다. 클라이언트에서 루트가 아닌 사용자에 대한 액세스를 복원하려면 해당 항목을 제거해야 합니다.

Important

NFS 3.0 프로토콜은 포트 111 및 2048을 사용합니다. 온-프레미스 네트워크에서 연결하는 경우 클라이언트가 해당 포트를 통해 나가는 통신을 허용하는지 확인합니다. 특정 VNet에 대한 액세스 권한을 부여한 경우 해당 VNet과 연결된 모든 네트워크 보안 그룹에 해당 포트를 통한 들어오는 통신을 차단하는 보안 규칙이 포함되어 있지 않은지 확인합니다.

3단계: 스토리지 계정 만들기 및 구성

NFS 3.0을 사용하여 컨테이너를 탑재하려면 스토리지 계정을 만들어야 합니다. 기존 계정을 사용할 수 없습니다.

표준 범용 v2 스토리지 계정 및 프리미엄 블록 Blob 스토리지 계정에 대해 NFS 3.0 프로토콜이 지원됩니다. 이러한 스토리지 계정 유형에 대한 자세한 내용은 스토리지 계정 개요를 참조하세요.

계정을 구성하려면 다음 값을 선택합니다.

설정 프리미엄 성능 표준 성능
위치 사용 가능한 모든 지역 사용 가능한 모든 지역
성능 Premium Standard
계정 종류 BlockBlobStorage 범용 V2
복제 LRS(로컬 중복 스토리지), ZRS(영역 중복 스토리지) LRS(로컬 중복 스토리지), ZRS(영역 중복 스토리지)
연결 방법 퍼블릭 엔드포인트(선택한 네트워크) 또는 프라이빗 엔드포인트 퍼블릭 엔드포인트(선택한 네트워크) 또는 프라이빗 엔드포인트
계층 구조 네임스페이스 사용 사용
NFS V3 사용 사용

다른 모든 설정에 대한 기본값을 수락할 수 있습니다.

4단계: 컨테이너 만들기

다음 도구 또는 SDK 중 하나를 사용하여 스토리지 계정에 컨테이너를 만듭니다.

도구 SDK
Azure Portal .NET
AZCopy Java
PowerShell Python
Azure CLI JavaScript
REST (영문)

참고 항목

기본적으로 새 컨테이너의 루트 Squash 옵션은 루트 Squash 없음입니다. 그러나 루트 Squash 또는 모든 Squash로 변경할 수 있습니다. 이러한 squash 옵션에 대한 정보는 운영 체제 설명서를 참조하세요.

다음 이미지는 Azure Portal에서 표시되는 squash 옵션을 보여 줍니다.

Azure Portal에서 Squash 옵션을 보여 주는 스크린샷.

5단계: AZNFS 탑재 도우미 패키지 설치

AZNFS 탑재 도우미 패키지를 사용하면 엔드포인트의 IP 주소가 변경되더라도 Linux NFS 클라이언트가 Azure Blob NFS 공유에 안정적으로 액세스할 수 있습니다. 이 패키지는 탑재된 공유에 대한 엔드포인트 IP 주소의 변경 내용을 모니터링하는 aznfswatchdog라는 백그라운드 작업을 실행합니다. 변경 내용이 감지되면 이 백그라운드 작업은 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
    

    참고 항목

    AZNFS는 다음 Linux 배포판에서 지원됩니다.

    • Ubuntu(18.04 LTS, 20.04 LTS, 22.04 LTS)
    • Centos7, Centos8
    • RedHat7, RedHat8, RedHat9
    • Rocky8, Rocky9
    • SUSE(SLES 15)

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 탑재 옵션을 사용하면 탑재 후 엔드포인트 IP가 변경되더라도 NFS 클라이언트가 항상 스토리지 엔드포인트에 올바르게 연결되어 있는지 확인합니다. -t nfs 탑재 옵션을 사용하여 탑재된 NFS 공유는 해당 엔드포인트의 IP 주소가 변경되면 스토리지 엔드포인트에서 연결이 끊어질 수 있습니다.

      기타 선택적 매개 변수는 탑재 명령과 함께 사용할 수 있습니다. 이런 매개 변수는 주로 클라이언트 쪽 동작에 영향을 미칩니다. sys는 현재 sec 옵션에서 지원되는 유일한 값입니다.

      Important

      nconnect 탑재 옵션은 Azure nconnect 지원이 있는 클라이언트에서만 작동합니다. 지원되지 않는 클라이언트에서 nconnect 옵션을 사용하면 처리량이 감소하고 명령이 시간 초과되거나 잘못 작동합니다. 클라이언트에 Azure nconnect 지원이 있는지 확인하는 방법에 대한 자세한 내용은 TCP 연결 수 증가를 참조하세요.

일반적인 오류 해결

오류 원인/해결 방법
Access denied by server while mounting 지원되는 서브넷 내에서 클라이언트가 실행되고 있는지 확인합니다. 지원되는 네트워크 위치를 참조하세요.
No such file or directory 탑재 명령과 해당 매개 변수를 복사하여 붙여 넣지 않고 터미널에 직접 입력해야 합니다. 이 명령의 일부를 복사하여 다른 애플리케이션의 터미널에 붙여넣는 경우 붙여넣은 정보에 숨겨진 문자가 있으면 이 오류가 발생할 수 있습니다. 이 오류는 NFS 3.0에 대해 계정이 활성화되지 않은 경우에도 나타날 수 있습니다.
Permission denied 새로 만든 NFS 3.0 컨테이너의 기본 모드는 0750입니다. 루트가 아닌 사용자에게는 볼륨에 대한 액세스 권한이 없습니다. 루트가 아닌 사용자가 액세스해야 하는 경우 루트 사용자는 모드를 0755로 변경해야 합니다. 샘플 명령: sudo chmod 0755 /nfsdata
EINVAL ("Invalid argument") 이 오류는 클라이언트에서 다음을 시도할 때 나타날 수 있습니다.
  • Blob 엔드포인트에서 만든 Blob에 씁니다.
  • 스냅샷이 있거나 활성 WORM(한 번 쓰기, 여러 번 읽기) 정책을 포함하는 컨테이너에 있는 Blob을 삭제합니다.
  • EROFS ("Read-only file system") 이 오류는 클라이언트에서 다음을 시도할 때 나타날 수 있습니다.
  • Blob에 쓰거나 활성 임대가 있는 Blob을 삭제합니다.
  • 활성 WORM 정책이 있는 컨테이너에서 Blob에 쓰거나 Blob을 삭제합니다.
  • NFS3ERR_IO/EIO ("Input/output error") 이 오류는 클라이언트에서 보관 액세스 계층에 저장된 Blob에 대한 특성을 읽거나 쓰거나 설정하려고 할 때 나타날 수 있습니다.
    OperationNotSupportedOnSymLink 오류 이 오류는 Blob Storage 또는 Azure Data Lake Storage Gen2 API를 통해 쓰기 작업을 수행하는 동안 반환될 수 있습니다. 이러한 API를 사용하여 NFS 3.0을 사용하여 만든 바로 가기 링크를 작성하거나 삭제하는 것은 허용되지 않습니다. 바로 가기 링크로 작업하려면 NFS 3.0 엔드포인트를 사용해야 합니다.
    mount: /nfsdata: bad option; sudo apt install nfs-common를 사용하여 NFS 도우미 프로그램을 설치합니다.
    Connection Timed Out 클라이언트가 포트 111 및 2048에서 나가는 통신을 허용하는지 확인합니다. NFS 3.0 프로토콜은 이러한 포트를 사용합니다. Data Lake Storage 엔드포인트가 아닌 Blob 서비스 엔드포인트를 사용하여 스토리지 계정을 탑재해야 합니다.

    AZNFS 탑재 도우미에 대한 제한 사항 및 문제 해결

    AZNFS 탑재 도우미를 참조하세요.

    참고 항목