Freigeben über


Problembehandlung bei Azure Files unter Linux (SMB)

In diesem Artikel werden häufige Probleme aufgeführt, die bei der Verwendung von Azure-SMB-Dateifreigaben mit Linux-Clients auftreten können. Darüber hinaus werden die möglichen Ursachen und Lösungen für diese Probleme bereitgestellt.

Sie können AzFileDiagnostics verwenden, um die Symptomerkennung zu automatisieren und sicherzustellen, dass der Linux-Client alle Voraussetzungen erfüllt. Das Tool hilft Ihnen dabei, Ihre Umgebung optimal einzurichten. Diese Informationen finden Sie auch in Problembehandlung für Azure-Dateifreigaben.

Wichtig

Dieser Artikel gilt nur für SMB-Freigaben. Weitere Informationen zu NFS-Freigaben finden Sie unter Behandeln von Problemen mit Azure NFS-Dateifreigaben.

Gilt für:

Dateifreigabetyp SMB NFS
Standard-Dateifreigaben (GPv2), LRS/ZRS
Standard-Dateifreigaben (GPv2), GRS/GZRS
Premium-Dateifreigaben (FileStorage), LRS/ZRS

Zeitstempel gehen beim Kopieren von Dateien verloren

Auf Linux/Unix-Plattformen schlägt der cp -p Befehl fehl, wenn verschiedene Benutzer Datei 1 und Datei 2 besitzen.

Ursache

Die Force-Kennzeichnung f in COPYFILE führt zur Ausführung cp -p -f auf Unix. Dieser Befehl schlägt auch fehl, um den Zeitstempel der Datei beizubehalten, die Ihnen nicht gehört.

Problemumgehung

Verwenden Sie den Speicherkontobenutzer, um die Dateien zu kopieren:

  • 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: cannot access '<Pfad>': Input/output error

Wenn Sie versuchen, Dateien in einer Azure-Dateifreigabe mithilfe des ls Befehls aufzulisten, hängt der Befehl beim Auflisten von Dateien. Sie erhalten den folgenden Fehler:

ls: cannot access '<Pfad>': Input/output error

Lösung

Upgraden Sie den Linux-Kernel auf die folgenden Versionen, in denen dieses Problem behoben wurde:

  • 4.4.87+
  • 4.9.48+
  • 4.12.11+
  • Alle Versionen ab 4.13

Ursache

Standardmäßig ermöglicht das Einbinden von Azure-Dateifreigaben unter Linux mithilfe von SMB keine Unterstützung für symbolische Verknüpfungen (Symlinks). Möglicherweise wird ein Fehler wie der folgende angezeigt:

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

Lösung

Der Linux-SMB-Client unterstützt die Erstellung symbolischer Verknüpfungen im Windows-Stil über das SMB 2- oder SMB 3-Protokoll nicht. Derzeit unterstützt der Linux-Client eine andere Art von symbolischen Verknüpfungen namens Minshall+Französische Symlinks (sowohl für Erstellungs- als auch für Folgevorgänge). Kunden, die symbolische Verknüpfungen benötigen, können die Bereitstellungsoption „mfsymlinks“ verwenden. Die Verwendung von „mfsymlinks“ empfiehlt sich, da dieses Format auch von Macs verwendet wird.

Wenn Sie symbolische Verknüpfungen verwenden möchten, fügen Sie am Ende des SMB-Einbindungsbefehls Folgendes hinzu:

,mfsymlinks

Der Befehl sieht also wie folgt aus:

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

Anschließend können Sie symbolische Verknüpfungen gemäß den Informationen im Wiki erstellen.

Kein Zugriff auf Ordner oder Dateien möglich, deren Name ein Leerzeichen oder einen Punkt am Ende hat

Sie können nicht auf Ordner oder Dateien in der Azure-Dateifreigabe zugreifen, während diese unter Linux eingebunden ist. Bei Befehlen wie „du“ und „ls“ und/oder Drittanbieteranwendungen kann beim Zugriff auf die Freigabe der Fehler „Datei oder Verzeichnis nicht vorhanden“ auftreten. Sie können jedoch über das Azure-Portal Dateien in diese Ordner hochladen.

Ursache

Die Ordner oder Dateien wurden aus einem System hochgeladen, das die Zeichen am Ende des Namens in ein anderes Zeichen codiert. Dateien, die von einem Macintosh-Computer hochgeladen werden, können anstelle von 0x20 (Leerzeichen) oder 0X2E (Punkt) das Zeichen „0xF028“ oder „0xF029“ aufweisen.

Lösung

Verwenden Sie die mapchars-Option für die Freigabe, während Sie diese unter Linux einbinden:

Anstelle von:

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

Verwenden Sie:

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

DNS-Probleme bei der Livemigration von Azure-Speicherkonten

Datei-E/As im bereitgestellten Dateisystem starten mit den Fehlern „Host ist ausgefallen“ oder "Berechtigung verweigert". Linux-dmesg-Protokolle auf dem Client zeigen wiederholte Fehler wie:

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

Außerdem sehen Sie, dass der Server-FQDN jetzt in eine andere IP-Adresse aufgelöst wird als die, mit der er derzeit verbunden ist. Dieses Problem kann in jedem Szenario auftreten, in dem sich die Ip-Adresse des Servers ändern kann, z. B. die Kontomigration. Ein weiteres bekanntes Szenario ist das Failover des Speicherkontos, da sich die DNS-Zuordnung ändern kann.

Ursache

Zum Ausgleich der Kapazitätsauslastung werden Speicherkonten manchmal von einem Speichercluster zu einem anderen livemigriert. Die Kontomigration löst Azure Files-Datenverkehr aus, der vom Quellcluster an den Zielcluster umgeleitet werden soll, indem die DNS-Zuordnungen so aktualisiert werden, dass sie auf den Zielcluster verweisen. Dies blockiert sämtlichen Datenverkehr von diesem Konto zum Quellcluster. Es wird erwartet, dass der SMB-Client die DNS-Updates abruft und den weiteren Datenverkehr an den Zielcluster umleitet. Aufgrund eines Fehlers im Linux-SMB-Kernelclient ist diese Umleitung jedoch nicht wirksam. Infolgedessen wird der Datenverkehr weiterhin zum Quellcluster geleitet, der den Datenverkehr zu diesem Konto nach der Migration eingestellt hatte.

Problemumgehung

Sie können dieses Problem durch Neustarten des Clientbetriebssystems beheben. Möglicherweise tritt es aber wieder auf, wenn Sie Ihr Clientbetriebssystem nicht auf eine Linux-Distributionsversion mit Unterstützung für die Kontomigration aktualisieren.

Obwohl das Aufheben der Bereitstellung und erneute Bereitstellung der Freigabe das Problem vorübergehend beheben scheint, ist es keine dauerhafte Lösung. Wenn der Client erneut eine Verbindung mit dem Server herstellt, kann das Problem erneut auftreten. Die temporäre Entschärfung tritt auf, da eine neue Bereitstellungsaktion den SMB-Kernelcache umgeht und die DNS-Adresse im Benutzerbereich aufgelöst. Der Kernel-DNS-Cache wird jedoch bei jeder Wiederherstellung der Netzwerkverbindung verwendet, was dazu führen kann, dass das Problem erneut auftritt. Dieses Verhalten bleibt auch außerhalb der Speicherkontomigrationen erhalten.

Um dieses Problem besser zu umgehen, löschen Sie den Kernel-DNS-Resolver-Cache:

  1. Zeigen Sie den Status des Kernelmoduls dns_resolver an, indem Sie den folgenden Befehl ausführen:

    grep '.dns_resolver' /proc/keys
    

    Die Befehlsausgabe sollte wie im folgenden Beispiel angezeigt werden:

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: 1
    
  2. Löschen Sie den Kernel-DNS-Resolver-Cache, indem Sie den folgenden Befehl ausführen:

    sudo keyctl clear $((16#$(grep '.dns_resolver' /proc/keys | cut -f1 -d\ ) ))
    
  3. Zeigt den Status des Kernelmoduls dns_resolver erneut an:

    grep '.dns_resolver' /proc/keys
    

    Die Befehlsausgabe sollte wie im folgenden Beispiel angezeigt werden, die angibt, dass der Cache jetzt leer ist:

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: empty
    
  4. Heben Sie die Bereitstellung auf, und stellen Sie die Freigabe erneut bereit, um das Problem zu beheben.

Notiz

Bei einigen älteren Linux-Distros funktionieren die Entschärfungsschritte möglicherweise nicht. In solchen Fällen wird das Problem durch den Neustart des Clientbetriebssystems vorübergehend behoben. Für einen dauerhaften Fix können Sie Ihrem Speicherkonto einen privaten Endpunkt hinzufügen und eine Verbindung mit der Dateifreigabe über einen privaten Link herstellen.

Lösung

Damit es dauerhaft behoben wird, aktualisieren Sie Ihr Clientbetriebssystem auf eine Linux-Distributionsversion mit Unterstützung für die Kontomigration. Mehrere Fixes für den Linux-SMB-Kernelclient wurden an den Linux-Mainlinekernel übermittelt. Die folgenden Distros haben die Korrekturen:

  • Ubuntu: 20.04, 22.04, 24.04 und AKS 22.04 (die Fixes werden in Kernel-Version 5.15.0-1068 eingeführt)
  • RHEL: 8,6+
  • SLES: 15SP2, 15SP3, 15SP4 und 15SP5
  • Azure Linux: 2.0 (die Fixes werden in Kernelversion 5.15.159.1) und 3.0 eingeführt.

Einige Distros haben diese Korrekturen zurückportiert. Sie können überprüfen, ob die folgenden Fixes in der von Ihnen verwendeten Distro-Version vorhanden sind:

Die SMB-Dateifreigabe kann nicht bereitgestellt werden, wenn FIPS aktiviert ist.

Wenn federal Information Processing Standard (FIPS) in einer Linux-VM aktiviert ist, kann die SMB-Dateifreigabe nicht bereitgestellt werden. Die Dmesg-Protokolle von Linux werden auf dem Client angezeigt, z. B.:

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

Wichtig

FIPS ist eine Reihe von Standards, die von der US-Regierung verwendet werden, um die Sicherheit und Integrität von Computersystemen sicherzustellen. Wenn sich ein System im FIPS-Modus befindet, erfüllt es bestimmte kryptografische Anforderungen, die von diesen Standards beschrieben werden.

Ursache

Der Client der SMB-Dateifreigabe verwendet die NTLMSSP-Authentifizierung, die den MD5-Hashingalgorithmus erfordert. Im FIPS-Modus ist der MD5-Algorithmus jedoch eingeschränkt, da er nicht FIPS-kompatibel ist. MD5 ist eine weit verbreitete Hashfunktion, die einen 128-Bit-Hashwert erzeugt. MD5 gilt jedoch als unsicher für kryptografische Zwecke.

So überprüfen Sie, ob der FIPS-Modus aktiviert ist

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der FIPS-Modus auf dem Client aktiviert ist. Wenn der Wert auf 1 festgelegt ist, ist FIPS aktiviert.

sudo cat /proc/sys/crypto/fips_enabled

Lösung

Um dieses Problem zu beheben, aktivieren Sie die Kerberos-Authentifizierung für die SMB-Dateifreigabe. Wenn FIPS unbeabsichtigt aktiviert ist, verweisen Sie auf Option2 , um sie zu deaktivieren.

Option 1: Aktivieren der Kerberos-Authentifizierung für die SMB-Dateifreigabe

Verwenden Sie die Kerberos/Azure AD-Authentifizierung, um eine SMB-Dateifreigabe auf der Linux-VM bereitzustellen, auf der FIPS aktiviert ist. Weitere Informationen finden Sie unter Aktivieren der Azure Active Directory-Authentifizierung über SMB für Linux-Clients, die auf Azure Files zugreifen.

Option 2: FIPS deaktivieren, um die Samba-Freigabe zu mounten

  1. Ändern Sie den Sysctl-Wert von crypto.fips_enabled 0 in /etc/sysctl.conf.

  2. Ändern Sie die GRUB_CMDLINE_LINUX_DEFAULT In-Datei /etc/default/grub , und entfernen Sie den Parameter fips=1.

  3. Die Grub2-Konfigurationsdatei mit dem folgenden Befehl neu erstellt:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  4. Erstellen Sie das Initramfs-Bild mit dem folgenden Befehl neu:

    sudo dracut -fv
    
  5. Starten Sie die VM neu.

Weitere Informationen finden Sie in den folgenden Dokumenten von Linux-Distributoren:

Sie brauchen Hilfe?

Wenden Sie sich an den Support, falls Sie weitere Hilfe benötigen, um das Problem schnell beheben zu lassen.

Siehe auch

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.