Rozwiązywanie problemów Azure Files w systemie Linux (SMB)

W tym artykule wymieniono typowe problemy, które mogą wystąpić podczas korzystania z udziałów plików platformy Azure SMB z klientami z systemem 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 to 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żna

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

Informacje zawarte w tym artykule dotyczą

Typ udziału plików SMB NFS
Standardowe udziały plików (GPv2), LRS/ZRS
Standardowe udziały plików (GPv2), GRS/GZRS
Udziały plików 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 wymuszania f w pliku COPYFILE powoduje wykonanie na systemie cp -p -f Unix. To polecenie nie może również zachować sygnatury czasowej pliku, który nie jest własnością.

Obejście problemu

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że uzyskać dostępu do "<ścieżki>": błąd wejściowy/wyjściowy

Podczas próby wyświetlenia listy plików w udziale plików platformy Azure przy użyciu ls polecenia polecenie zawiesza się podczas wyświetlania listy plików. Występuje następujący błąd:

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

Rozwiązanie

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

  • 4.4.87+
  • 4.9.48+
  • 4.12.11+
  • 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 umożliwia obsługi łączy symbolicznych (sylinków). 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 łączy 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+francuskich linków symlink dla operacji tworzenia i obserwowania. Klienci, którzy potrzebują linków symbolicznych, mogą użyć opcji instalacji "mfsymlinks". Zalecamy "mfsymlinks", ponieważ jest to również format używany przez komputery Mac.

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

,mfsymlinks

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 tworzyć linki symlink zgodnie z sugestiami w witrynie typu wiki.

Nie można uzyskać dostępu do folderów lub plików, których nazwa ma spację lub kropkę na końcu

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

Przyczyna

Foldery lub pliki zostały przekazane z systemu, który koduje znaki na końcu nazwy na inny znak. 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żywać:

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

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

We/wy plików w zainstalowanym systemie plików zaczynają występować błędy "Host nie działa" 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ż aktualnie połączona.

Przyczyna

Na potrzeby równoważenia obciążenia pojemności konta magazynu są czasami migrowane na żywo z jednego klastra magazynu do innego. Migracja konta wyzwala Azure Files ruchu, który ma zostać przekierowany z klastra źródłowego do klastra docelowego, aktualizując mapowania DNS, aby wskazywały klaster docelowy. 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 jest skuteczne. W rezultacie ruch danych przechodzi do klastra źródłowego, który przestał obsługiwać to konto po migracji.

Obejście problemu

Ten problem można rozwiązać, uruchamiając ponownie system operacyjny klienta, ale jeśli nie uaktualnisz systemu operacyjnego klienta do wersji dystrybucji systemu Linux z obsługą migracji konta, możesz ponownie napotkać ten problem. Należy zauważyć, że umount i ponownej instalacji udziału może wydawać się tymczasowo rozwiązać problem.

Aby lepiej obejść ten problem, wyczyść pamięć podręczną programu 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, takie jak w poniższym przykładzie:

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

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

    grep '.dns_resolver' /proc/keys
    

    Powinny zostać wyświetlone dane wyjściowe polecenia, takie jak w poniższym przykładzie, wskazujące, że pamięć podręczna jest teraz pusta:

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

Rozwiązanie

Aby uzyskać trwałą poprawkę, uaktualnij system operacyjny klienta do wersji dystrybucji systemu Linux przy użyciu obsługi migracji konta. Kilka poprawek dla klienta jądra SMB systemu Linux zostało przesłanych do jądra systemu Linux linii głównej. Poprawki mają jądro w wersji 5.15+ i Keyutils-1.6.2 lub nowszej. Niektóre dystrybucje mają backported te poprawki i można sprawdzić, czy następujące poprawki istnieją w wersji dystrybucji używasz:

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

Jeśli na maszynie wirtualnej z systemem Linux jest włączona funkcja Federal Information Processing Standard (FIPS ), nie można zainstalować 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żna

FIPS to zestaw standardów, których rząd USA używa do zapewnienia bezpieczeństwa i integralności systemów komputerowych. Gdy system jest w trybie FIPS, jest zgodny z określonymi wymaganiami kryptograficznymi określonymi w tych standardach.

Przyczyna

Klient udziału plików SMB używa uwierzytelniania NTLMSSP, które wymaga algorytmu wyznaczania wartości skrótu 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 128-bitową wartość skrótu. Jednak md5 jest uważany za niezabezpieczony do celów kryptograficznych.

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

Aby sprawdzić, czy tryb FIPS jest włączony na kliencie, uruchom następujące polecenie. Jeśli wartość jest ustawiona na wartość 1, jest 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 usługa FIPS jest włączona przypadkowo, zapoznaj się z opcją option2 , 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 jest włączona funkcja 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 systemu Linux uzyskujących dostęp do Azure Files.

Opcja 2. Wyłączanie programu FIPS w celu zainstalowania udziału samby

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

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

  3. Skompilowano plik konfiguracji grub2 przy użyciu 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 pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii platformy Azure.