Linux(SMB)의 Azure Files 문제 해결

이 문서에서는 Linux 클라이언트와 SMB Azure 파일 공유를 사용할 때 발생할 수 있는 일반적인 문제를 나열합니다. 또한 이러한 문제에 대한 가능한 원인과 해결 방법도 제공합니다.

AzFileDiagnostics를 사용하여 증상 검색을 자동화하고 Linux 클라이언트에 올바른 필수 구성 요소가 있는지 확인할 수 있습니다. 최적의 성능을 얻기 위해 환경을 설정하는 데 도움이 됩니다. Azure 파일 공유 문제 해결사에서 이 정보를 찾을 수도 있습니다.

중요

이 문서는 SMB 공유에만 적용됩니다. NFS 공유에 대한 자세한 내용은 NFS Azure 파일 공유 문제 해결을 참조하세요.

적용 대상

파일 공유 형식 SMB Nfs
표준 파일 공유(GPv2), LRS/ZRS
표준 파일 공유(GPv2), GRS/GZRS
프리미엄 파일 공유(FileStorage), LRS/ZRS

파일을 복사할 때 타임스탬프를 분실했습니다.

Linux/Unix 플랫폼에서 cp -p 다른 사용자가 파일 1 및 파일 2를 소유하는 경우 명령이 실패합니다.

원인

COPYFILE의 힘 플래그 f 는 Unix에서 실행됩니다 cp -p -f . 또한 이 명령은 소유하지 않은 파일의 타임스탬프를 유지하지 못합니다.

해결 방법

스토리지 계정 사용자를 사용하여 파일을 복사합니다.

  • str_acc_name=[storage account name]
  • sudo useradd $str_acc_name
  • sudo passwd $str_acc_name
  • su $str_acc_name
  • cp -p filename.txt /share

ls: 'path>'<에 액세스할 수 없음: 입력/출력 오류

명령을 사용하여 ls Azure 파일 공유의 파일을 나열하려고 하면 파일을 나열할 때 명령이 중단됩니다. 다음과 같은 오류가 발생합니다.

ls: 액세스할 수 없습니다.'path>'<: 입력/출력 오류

해결 방법

Linux 커널을 이 문제에 대한 수정 사항이 있는 다음 버전으로 업그레이드합니다.

  • 4.4.87+
  • 4.9.48+
  • 4.12.11+
  • 4.13보다 크거나 같은 모든 버전

원인

기본적으로 SMB를 사용하여 Linux에 Azure 파일 공유를 탑재해도 기호 링크(symlink)를 지원하지 않습니다. 다음과 같은 오류가 표시될 수 있습니다.

sudo ln -s linked -n t
ln: failed to create symbolic link 't': Operation not supported

해결 방법

Linux SMB 클라이언트는 SMB 2 또는 3 프로토콜을 통해 Windows 스타일 기호 링크 만들기를 지원하지 않습니다. 현재 Linux 클라이언트는 만들기 및 팔로우 작업 모두에 대해 Minshall+French symlinks 라는 다른 스타일의 기호 링크를 지원합니다. 기호 링크가 필요한 고객은 "mfsymlinks" 탑재 옵션을 사용할 수 있습니다. Mac에서 사용하는 형식이기도 하므로 "mfsymlinks"를 사용하는 것이 좋습니다.

symlinks를 사용하려면 SMB 탑재 명령의 끝에 다음을 추가합니다.

,mfsymlinks

따라서 명령은 다음과 같습니다.

sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<share-name> <mount-point> -o vers=<smb-version>,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino,mfsymlinks

그런 다음 위키에 제안된 대로 symlinks를 만들 수 있습니다.

끝에 공백이나 점이 있는 폴더 또는 파일에 액세스할 수 없음

Linux에 탑재된 상태에서는 Azure 파일 공유에서 폴더 또는 파일에 액세스할 수 없습니다. 공유에 액세스하는 동안 du 및 ls 및/또는 타사 애플리케이션과 같은 명령이 "이러한 파일 또는 디렉터리 없음" 오류로 실패할 수 있습니다. 그러나 Azure Portal 통해 이러한 폴더에 파일을 업로드할 수 있습니다.

원인

폴더 또는 파일은 이름 끝에 있는 문자를 다른 문자로 인코딩하는 시스템에서 업로드되었습니다. Macintosh 컴퓨터에서 업로드된 파일에는 0x20(공간) 또는 0X2E(점) 대신 "0xF028" 또는 "0xF029" 문자가 있을 수 있습니다.

해결 방법

Linux에서 공유를 탑재할 때 공유의 mapchars 옵션을 사용합니다.

대신에:

sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino

사용:

sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino,mapchars

Azure Storage 계정의 실시간 마이그레이션과 관련된 DNS 문제

탑재된 파일 시스템의 파일 I/O는 "호스트가 다운됨" 또는 "사용 권한이 거부됨" 오류를 제공하기 시작합니다. 클라이언트의 Linux dmesg 로그는 다음과 같은 반복된 오류를 표시합니다.

Status code returned 0xc000006d STATUS_LOGON_FAILURE
cifs_setup_session: 2 callbacks suppressed
CIFS VFS: \\contoso.file.core.windows.net Send error in SessSetup = -13

또한 이제 서버 FQDN이 현재 연결된 IP 주소와 다른 IP 주소로 확인되는 것을 볼 수 있습니다.

원인

용량 부하 분산을 위해 스토리지 계정은 때때로 한 스토리지 클러스터에서 다른 스토리지 클러스터로 실시간 마이그레이션됩니다. 계정 마이그레이션은 대상 클러스터를 가리키도록 DNS 매핑을 업데이트하여 원본 클러스터에서 대상 클러스터로 리디렉션되는 Azure Files 트래픽을 트리거합니다. 이렇게 하면 해당 계정에서 원본 클러스터로의 모든 트래픽이 차단됩니다. SMB 클라이언트가 DNS 업데이트를 선택하고 추가 트래픽을 대상 클러스터로 리디렉션해야 합니다. 그러나 Linux SMB 커널 클라이언트의 버그로 인해 이 리디렉션은 적용되지 않습니다. 결과적으로 데이터 트래픽은 마이그레이션 후 이 계정의 서비스를 중지한 원본 클러스터로 계속 이동합니다.

해결 방법

클라이언트 OS를 다시 부팅하여 이 문제를 완화할 수 있지만 계정 마이그레이션 지원을 통해 클라이언트 OS를 Linux 배포판 버전으로 업그레이드하지 않으면 문제가 다시 발생할 수 있습니다. 공유의 umount 및 remount는 일시적으로 문제를 해결하는 것처럼 보일 수 있습니다.

이 문제를 더 잘 해결하려면 커널 DNS 확인자 캐시를 지웁히세요.

  1. 다음 명령을 실행하여 커널 dns_resolver 모듈의 상태 표시합니다.

    grep '.dns_resolver' /proc/keys
    

    다음 예제와 같은 명령 출력이 표시됩니다.

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: 1
    
  2. 다음 명령을 실행하여 커널 DNS 확인자 캐시의 선택을 취소합니다.

    sudo keyctl clear $((16#$(grep '.dns_resolver' /proc/keys | cut -f1 -d\ ) ))
    
  3. 커널 dns_resolver 모듈의 상태 다시 표시합니다.

    grep '.dns_resolver' /proc/keys
    

    캐시가 비어 있음을 나타내는 다음 예제와 같은 명령 출력이 표시됩니다.

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: empty
    

해결 방법

영구 수정을 위해 계정 마이그레이션 지원을 사용하여 클라이언트 OS를 Linux 배포판 버전으로 업그레이드합니다. Linux SMB 커널 클라이언트에 대한 몇 가지 수정 사항이 기본 Linux 커널에 제출되었습니다. 커널 버전 5.15 이상 및 Keyutils-1.6.2+에는 수정 사항이 있습니다. 일부 배포판은 이러한 수정 사항을 백포트했으며 사용 중인 배포판 버전에 다음 수정 사항이 있는 경우 검사 수 있습니다.

FIPS를 사용할 때 SMB 파일 공유를 탑재할 수 없음

Linux VM에서 FIPS(Federal Information Processing Standard) 를 사용하도록 설정하면 SMB 파일 공유를 탑재할 수 없습니다. 클라이언트의 Linux dmesg 로그는 다음과 같은 오류를 표시합니다.

kernel: CIFS: VFS: Could not allocate crypto hmac(md5)
kernel: CIFS: VFS: Error -2 during NTLMSSP authentication
kernel: CIFS: VFS: \\contoso.file.core.windows.net Send error in SessSetup = -2
kernel: CIFS: VFS: cifs_mount failed w/return code = -2

중요

FIPS는 미국 정부가 컴퓨터 시스템의 보안과 무결성을 보장하기 위해 사용하는 일련의 표준입니다. 시스템이 FIPS 모드인 경우 이러한 표준에 설명된 특정 암호화 요구 사항을 준수합니다.

원인

SMB 파일 공유의 클라이언트는 MD5 해시 알고리즘이 필요한 NTLMSSP 인증을 사용합니다. 그러나 FIPS 모드에서는 MD5 알고리즘이 FIPS 규격이 아니므로 제한됩니다. MD5는 128비트 해시 값을 생성하는 널리 사용되는 해시 함수입니다. 그러나 MD5는 암호화 목적으로 안전하지 않은 것으로 간주됩니다.

FIPS 모드를 사용하는 경우 검사 방법

클라이언트에서 FIPS 모드가 사용하도록 설정되어 있는지 확인하려면 다음 명령을 실행합니다. 값이 1로 설정된 경우 FIPS가 사용하도록 설정됩니다.

sudo cat /proc/sys/crypto/fips_enabled

해결 방법

이 문제를 resolve SMB 파일 공유에 Kerberos 인증을 사용하도록 설정합니다. FIPS가 의도치 않게 사용하도록 설정된 경우 option2 를 참조하여 사용하지 않도록 설정합니다.

옵션 1: SMB 파일 공유에 Kerberos 인증 사용

FIPS를 사용하는 Linux VM에 SMB 파일 공유를 탑재하려면 Kerberos/Azure AD 인증을 사용합니다. 자세한 내용은 Azure Files 액세스하는 Linux 클라이언트에 대해 SMB를 통해 Active Directory 인증 사용을 참조하세요.

옵션 2: FIPS를 사용하지 않도록 설정하여 Samba 공유 탑재

  1. 의 sysctl 값을 crypto.fips_enabled 에서 /etc/sysctl.conf0으로 변경합니다.

  2. 파일에서 /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT 수정하고 매개 변수 fips=1를 제거합니다.

  3. 다음 명령을 사용하여 grub2 구성 파일을 다시 빌드합니다.

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  4. 다음 명령을 사용하여 initramfs 이미지를 다시 빌드합니다.

    sudo dracut -fv
    
  5. VM을 다시 부팅합니다.

자세한 내용은 Linux 배포자의 다음 문서를 참조하세요.

도움이 필요하신가요?

그래도 도움이 필요한 경우 지원에 문의 하여 문제를 신속하게 해결하세요.

참고 항목

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.