Rozwiązywanie problemów z usługą Azure Files w systemie Linux (SMB)

W tym artykule wymieniono typowe problemy, które mogą wystąpić podczas korzystania z udziałów plików SMB platformy Azure z klientami systemu Linux. Zapewnia również możliwe przyczyny i rozwiązania tych problemów.

Za pomocą narzędzia AzFileDiagnostics można zautomatyzować wykrywanie objawów i upewnić się, że klient systemu Linux ma odpowiednie wymagania wstępne. Ułatwia skonfigurowanie środowiska w celu uzyskania optymalnej wydajności. Te informacje można również znaleźć w narzędziu do rozwiązywania problemów z udziałami plików platformy Azure.

Ważne

Ten artykuł dotyczy tylko udziałów SMB. Aby uzyskać szczegółowe informacje na temat udziałów NFS, zobacz Rozwiązywanie problemów z udziałami plików platformy Azure NFS.

Dotyczy

Typ udziału plików SMB NFS
Udziały plików w warstwie Standardowa (GPv2), LRS/ZRS
Udziały plików w warstwie Standardowa (GPv2), GRS/GZRS
Udziały plików w warstwie Premium (FileStorage), LRS/ZRS

Sygnatury czasowe zostały utracone podczas kopiowania plików

Na platformach Linux/Unix polecenie kończy się niepowodzeniem cp -p , jeśli różni użytkownicy posiadają plik 1 i plik 2.

Przyczyna

Flaga f wymuszania w pliku COPYFILE powoduje wykonanie w cp -p -f systemie Unix. To polecenie nie może również zachować sygnatury czasowej pliku, którego nie jesteś właścicielem.

Rozwiązanie

Użyj użytkownika konta magazynu, aby skopiować pliki:

  • 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: nie można uzyskać dostępu do ścieżki<>: błąd wejścia/wyjścia

Podczas próby wyświetlenia listy plików w udziale plików platformy Azure za pomocą ls polecenia polecenie polecenie zawiesza się podczas wyświetlania listy plików. Zostanie wyświetlony następujący błąd:

ls: nie można uzyskać dostępu do ścieżki<>": błąd wejścia/wyjścia

Rozwiązanie

Uaktualnij jądro systemu Linux do następujących wersji, które mają poprawkę dla tego problemu:

  • 4.4.87 i nowsze
  • 4.9.48 i nowsze
  • 4.12.11 i nowsze
  • Wszystkie wersje, które są większe lub równe 4,13

Przyczyna

Domyślnie instalowanie udziałów plików platformy Azure w systemie Linux przy użyciu protokołu SMB nie włącza obsługi linków symbolicznych (syymlinki). Może zostać wyświetlony błąd podobny do następującego:

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

Rozwiązanie

Klient SMB systemu Linux nie obsługuje tworzenia linków symbolicznych w stylu systemu Windows za pośrednictwem protokołu SMB 2 lub 3. Obecnie klient systemu Linux obsługuje inny styl linków symbolicznych o nazwie Minshall +francuski symetrii zarówno do tworzenia, jak i wykonywania operacji. Klienci, którzy potrzebują linków symbolicznych, mogą korzystać z opcji instalacji "mfsymlinks". Zalecamy użycie polecenia "mfsymlinks", ponieważ jest to również format używany przez komputery Mac.

Aby użyć linków syymlinków, dodaj następujący kod na końcu polecenia instalacji protokołu SMB:

,mfsymlinks

Dlatego polecenie wygląda następująco:

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

Następnie możesz utworzyć linki symlinków zgodnie z sugestią w witrynie typu wiki.

Nie można uzyskać dostępu do folderów lub plików o nazwie spacji lub kropki na końcu

Nie można uzyskać dostępu do folderów lub plików z udziału plików platformy Azure podczas instalowanego w systemie Linux. Polecenia takie jak du i ls i/lub aplikacje innych firm mogą zakończyć się niepowodzeniem z powodu błędu "Brak takiego pliku lub katalogu" podczas uzyskiwania dostępu do udziału; możesz jednak przekazać pliki do tych folderów za pośrednictwem witryny Azure Portal.

Przyczyna

Foldery lub pliki zostały przekazane z systemu, który koduje znaki na końcu nazwy do innego znaku. Pliki przekazane z komputera Macintosh mogą mieć znak "0xF028" lub "0xF029" zamiast 0x20 (spacja) lub 0X2E (kropka).

Rozwiązanie

Użyj opcji mapchars w udziale podczas instalowania udziału w systemie Linux:

Zamiast:

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

Użyj:

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

Problemy z systemem DNS związane z migracją na żywo kont usługi Azure Storage

We/Wy plików w zainstalowanym systemie plików zaczynają się dawać błędy "Host jest wyłączony" lub "Odmowa uprawnień". Dzienniki dmesg systemu Linux na kliencie pokazują powtarzające się błędy, takie jak:

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

Zobaczysz również, że nazwa FQDN serwera jest teraz rozpoznawana jako inny adres IP niż adres, z którym jest obecnie połączony. Ten problem może wystąpić w dowolnym scenariuszu, w którym adres IP serwera może ulec zmianie, na przykład migracji konta. Innym znanym scenariuszem jest tryb failover konta magazynu, ponieważ mapowanie DNS może ulec zmianie.

Przyczyna

W celach równoważenia obciążenia pojemności konta magazynu są czasami migrowane na żywo z jednego klastra magazynu do innego. Migracja konta wyzwala przekierowywanie ruchu usługi Azure Files z klastra źródłowego do klastra docelowego przez zaktualizowanie mapowań DNS w celu wskazania klastra docelowego. Spowoduje to zablokowanie całego ruchu do klastra źródłowego z tego konta. Oczekuje się, że klient SMB pobiera aktualizacje DNS i przekierowuje dalszy ruch do klastra docelowego. Jednak ze względu na usterkę w kliencie jądra SMB systemu Linux to przekierowanie nie zostanie zastosowane. W związku z tym ruch danych przechodzi do klastra źródłowego, który przestał obsługiwać to konto po migracji.

Rozwiązanie

Ten problem można rozwiązać, uruchamiając ponownie system operacyjny klienta, ale problem może wystąpić ponownie, jeśli nie uaktualnisz systemu operacyjnego klienta do wersji dystrybucji systemu Linux z obsługą migracji kont.

Podczas odinstalowywanie i ponowne instalowanie udziału może wydawać się tymczasowe rozwiązanie problemu, nie jest to trwałe rozwiązanie. Gdy klient ponownie nawiąze połączenie z serwerem, problem może wystąpić ponownie. Tymczasowe ograniczenie ryzyka występuje, ponieważ nowa akcja instalacji pomija pamięć podręczną jądra SMB i rozpoznaje adres DNS w przestrzeni użytkownika. Jednak pamięć podręczna DNS jądra jest używana podczas odzyskiwania po rozłączeniu sieci, co może spowodować ponowne wystąpienie problemu. To zachowanie utrzymuje się nawet poza migracjami kont magazynu.

Aby lepiej obejść ten problem, wyczyść pamięć podręczną narzędzia rozpoznawania nazw DNS jądra:

  1. Wyświetl stan modułu jądra dns_resolver , uruchamiając następujące polecenie:

    grep '.dns_resolver' /proc/keys
    

    Powinny zostać wyświetlone dane wyjściowe polecenia podobne do następującego przykładu:

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: 1
    
  2. Wyczyść pamięć podręczną rozpoznawania nazw DNS jądra, uruchamiając następujące polecenie:

    sudo keyctl clear $((16#$(grep '.dns_resolver' /proc/keys | cut -f1 -d\ ) ))
    
  3. Ponownie wyświetl stan modułu jądra dns_resolver :

    grep '.dns_resolver' /proc/keys
    

    Powinny zostać wyświetlone dane wyjściowe polecenia podobne do poniższego przykładu wskazujące, że pamięć podręczna jest teraz pusta:

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: empty
    
  4. Odinstalowywanie i ponowne odinstalowywanie udziału w celu rozwiązania problemu.

Uwaga

W niektórych starszych dystrybucjach systemu Linux powyższe kroki ograniczania ryzyka mogą nie działać. W takich przypadkach ponowne uruchomienie systemu operacyjnego klienta jest jedynym znanym ograniczeniem ryzyka.

Rozwiązanie

Aby uzyskać stałą poprawkę, uaktualnij system operacyjny klienta do wersji dystrybucji systemu Linux przy użyciu obsługi migracji kont. Kilka poprawek klienta jądra SMB systemu Linux zostało przesłanych do jądra systemu Linux na linii głównej. Następujące dystrybucje zawierają poprawki:

  • Ubuntu: 20.04, 22.04, 24.04 i AKS 22.04 (poprawki są wdrażane w jądrze w wersji 5.15.0-1068)
  • RHEL: 8.6+
  • SLES: 15SP2, 15SP3, 15SP4 i 15SP5
  • Azure Linux: 2.0 (poprawki są wdrażane w jądrze w wersji 5.15.159.1) i 3.0

Niektóre dystrybucje wycofały te poprawki. Możesz sprawdzić, czy w używanej wersji dystrybucji istnieją następujące poprawki:

Nie można zainstalować udziału plików SMB po włączeniu protokołu FIPS

Po włączeniu standardu FIPS (Federal Information Processing Standard) na maszynie wirtualnej z systemem Linux nie można instalować udziału plików SMB. Dzienniki dmesg systemu Linux na kliencie wyświetlają błędy, takie jak:

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

Ważne

FIPS to zestaw standardów używanych przez rząd USA w celu zapewnienia bezpieczeństwa i integralności systemów komputerowych. Gdy system jest w trybie FIPS, spełnia określone wymagania kryptograficzne określone zgodnie z tymi standardami.

Przyczyna

Klient udziału plików SMB używa uwierzytelniania NTLMSSP, które wymaga algorytmu tworzenia skrótów MD5. Jednak w trybie FIPS algorytm MD5 jest ograniczony, ponieważ nie jest zgodny ze standardem FIPS. MD5 to powszechnie używana funkcja skrótu, która generuje wartość skrótu 128-bitowego. Jednak rozwiązanie MD5 jest uznawane za niezabezpieczone do celów kryptograficznych.

Jak sprawdzić, czy tryb FIPS jest włączony

Aby sprawdzić, czy na kliencie jest włączony tryb FIPS, uruchom następujące polecenie. Jeśli wartość jest ustawiona na 1, zostanie włączona funkcja FIPS.

sudo cat /proc/sys/crypto/fips_enabled

Rozwiązanie

Aby rozwiązać ten problem, włącz uwierzytelnianie Kerberos dla udziału plików SMB. Jeśli protokół FIPS jest włączony przypadkowo, zapoznaj się z opcją 2 , aby ją wyłączyć.

Opcja 1. Włączanie uwierzytelniania Kerberos dla udziału plików SMB

Aby zainstalować udział plików SMB na maszynie wirtualnej z systemem Linux, na której włączono protokół FIPS, użyj uwierzytelniania Kerberos/Azure AD. Aby uzyskać więcej informacji, zobacz Włączanie uwierzytelniania usługi Active Directory za pośrednictwem protokołu SMB dla klientów z systemem Linux, którzy uzyskują dostęp do usługi Azure Files.

Opcja 2. Wyłączanie protokołu FIPS w celu zainstalowania udziału Samba

  1. Zmień wartość sysctl na crypto.fips_enabled 0 w /etc/sysctl.confpliku .

  2. Zmodyfikuj plik GRUB_CMDLINE_LINUX_DEFAULT w /etc/default/grub pliku i usuń parametr fips=1.

  3. Skompiluj ponownie plik konfiguracji grub2 za pomocą następującego polecenia:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  4. Skompiluj obraz initramfs za pomocą następującego polecenia:

    sudo dracut -fv
    
  5. Uruchom ponownie maszynę wirtualną.

Aby uzyskać więcej informacji, zobacz następujące dokumenty od dystrybutorów systemu Linux:

Potrzebujesz pomocy?

Jeśli nadal potrzebujesz pomocy, skontaktuj się z pomocą techniczną, aby szybko rozwiązać problem.

Zobacz też

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pomoc techniczną społeczności platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.