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
Nie można utworzyć łączy symbolicznych — ln: nie można utworzyć łącza symbolicznego "nie": Operacja nie jest obsługiwana
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:
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
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\ ) ))
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
Odinstalowywanie i ponowne odinstalowywanie udziału w celu rozwiązania problemu.
Uwaga 16.
W niektórych starszych dystrybucjach systemu Linux kroki ograniczania ryzyka mogą nie działać. W takich przypadkach ponowne uruchomienie systemu operacyjnego klienta tymczasowo rozwiąże problem. Aby uzyskać stałą poprawkę, możesz dodać prywatny punkt końcowy do konta magazynu i połączyć się z udziałem plików przy użyciu łącza prywatnego.
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:
cifs: użyj danych wyjściowych wygasania dns_query, aby zaplanować następne rozwiązanie
cifs: ustaw co najmniej 120s dla następnego rozpoznawania dns
cifs: Aby dopasować serwery plików, upewnij się, że nazwa hosta serwera jest zgodna
cifs: naprawianie przecieku pamięci smb3_fs_context_dup::server_hostname
dns: zastosuj domyślny czas wygaśnięcia do rekordów uzyskanych z polecenia getaddrinfo()
klucze: Naprawianie zastępowania wygaśnięcia klucza podczas tworzenia wystąpienia
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
Zmień wartość sysctl na
crypto.fips_enabled
0 w/etc/sysctl.conf
pliku .Zmodyfikuj plik
GRUB_CMDLINE_LINUX_DEFAULT
w/etc/default/grub
pliku i usuń parametrfips=1
.Skompiluj ponownie plik konfiguracji grub2 za pomocą następującego polecenia:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Skompiluj obraz initramfs za pomocą następującego polecenia:
sudo dracut -fv
Uruchom ponownie maszynę wirtualną.
Aby uzyskać więcej informacji, zobacz następujące dokumenty od dystrybutorów systemu Linux:
- RedHat: Dlaczego włączanie trybu FIPS w instalacjach CIFS przerwania jądra
- SUSE: instalacja CIFS kończy się niepowodzeniem z powodu błędu "błąd instalacji(2): brak takiego pliku lub katalogu"
Potrzebujesz pomocy?
Jeśli nadal potrzebujesz pomocy, skontaktuj się z pomocą techniczną, aby szybko rozwiązać problem.
Zobacz też
- Rozwiązywanie problemów z plikami platformy Azure
- Rozwiązywanie problemów z wydajnością usługi Azure Files
- Rozwiązywanie problemów z łącznością usługi Azure Files (SMB)
- Rozwiązywanie problemów z uwierzytelnianiem i autoryzacją usługi Azure Files (SMB)
- Rozwiązywanie ogólnych problemów z protokołem NFS Azure Files w systemie Linux
- Rozwiązywanie problemów z usługą Azure File Sync
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 na temat platformy Azure.