Behandeln von Azure Files Problemen unter Linux (SMB)

In diesem Artikel werden häufige Probleme aufgeführt, die bei der Verwendung von SMB-Azure-Dateifreigaben mit Linux-Clients auftreten können. Außerdem werden mögliche 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 über die richtigen Voraussetzungen verfügt. Es hilft ihnen, Ihre Umgebung einzurichten, um eine optimale Leistung zu erzielen. Diese Informationen finden Sie auch in der Problembehandlung für Azure-Dateifreigaben.

Wichtig

Dieser Artikel gilt nur für SMB-Freigaben. Ausführliche Informationen zu NFS-Freigaben finden Sie unter Problembehandlung für NFS-Azure-Dateifreigaben.

Gilt für

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

Zeitstempel gingen beim Kopieren von Dateien verloren

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

Ursache

Das Force-Flag f in COPYFILE führt zur Ausführung cp -p -f unter Unix. Dieser Befehl kann auch nicht den Zeitstempel der Datei beibehalten, die Sie nicht besitzen.

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: Kann nicht auf "pfad>"< zugreifen: Eingabe-/Ausgabefehler

Wenn Sie versuchen, Dateien in einer Azure-Dateifreigabe mit dem ls Befehl aufzulisten, hängt der Befehl beim Auflisten von Dateien. Der folgende Fehler wird angezeigt:

ls: Kann nicht auf 'path>'< zugreifen: Eingabe-/Ausgabefehler

Lösung

Führen Sie ein Upgrade des Linux-Kernels auf die folgenden Versionen durch, die eine Lösung für dieses Problem haben:

  • 4.4.87+
  • 4.9.48+
  • 4.12.11+
  • Alle Versionen, die größer oder gleich 4.13 sind

Ursache

Standardmäßig wird beim Einbinden von Azure-Dateifreigaben unter Linux mithilfe von SMB keine Unterstützung für symbolische Verknüpfungen (symlinks) aktiviert. 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 nicht das Erstellen symbolischer Verknüpfungen im Windows-Stil über das SMB 2- oder 3-Protokoll. Derzeit unterstützt der Linux-Client eine andere Art von symbolischen Verknüpfungen namens Minshall+French symlinks für Erstellungs- und Folgevorgänge. Kunden, die symbolische Verknüpfungen benötigen, können die Einbindungsoption "mfsymlinks" verwenden. Wir empfehlen "mfsymlinks", da es auch das Format ist, das Macs verwenden.

Um symlinks zu verwenden, fügen Sie Am Ende Ihres 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

Sie können dann symlinks erstellen, wie im Wiki vorgeschlagen.

Zugriff auf Ordner oder Dateien mit einem Leerzeichen oder Punkt am Ende nicht möglich

Sie können nicht auf Ordner oder Dateien aus der Azure-Dateifreigabe zugreifen, während sie unter Linux eingebunden sind. Befehle wie du und ls und/oder Anwendungen von Drittanbietern können beim Zugriff auf die Freigabe mit dem Fehler "Keine datei oder verzeichnis" fehlschlagen. Sie können jedoch Dateien über die Azure-Portal 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 auf der Freigabe, wenn Sie die Freigabe unter Linux einbinden:

Statt:

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

Verwenden Sie den folgenden:

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/A im eingebundenen Dateisystem, die Fehler "Host ist ausgefallen" oder "Berechtigung verweigert" geben. Linux dmesg-Protokolle auf dem Client zeigen wiederholte Fehler wie die folgenden an:

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

Sie werden auch sehen, dass der Server-FQDN jetzt in eine andere IP-Adresse aufgelöst wird als die, mit der er derzeit verbunden ist.

Ursache

Zu Kapazitätslastenausgleichszwecken werden Speicherkonten manchmal live von einem Speichercluster zu einem anderen migriert. Die Kontomigration löst Azure Files Datenverkehr aus, der vom Quellcluster an den Zielcluster umgeleitet wird, indem die DNS-Zuordnungen so aktualisiert werden, dass sie auf den Zielcluster verweisen. Dadurch wird der gesamte Datenverkehr an den Quellcluster von diesem Konto blockiert. Es wird erwartet, dass der SMB-Client die DNS-Updates übernimmt und weiteren Datenverkehr an den Zielcluster umleitet. Aufgrund eines Fehlers im Linux-SMB-Kernelclient wird diese Umleitung jedoch nicht wirksam. Daher wird der Datenverkehr weiterhin an den Quellcluster weitergestellt, der die Bereitstellung dieses Kontos nach der Migration beendet hat.

Problemumgehung

Sie können dieses Problem beheben, indem Sie das Clientbetriebssystem neu starten. Möglicherweise tritt das Problem jedoch erneut auf, wenn Sie Ihr Clientbetriebssystem nicht auf eine Linux-Distributionsversion mit Unterstützung für die Kontomigration aktualisieren. Beachten Sie, dass umount und remount der Freigabe das Problem möglicherweise vorübergehend behoben haben.

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

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

    grep '.dns_resolver' /proc/keys
    

    Es sollte eine Befehlsausgabe wie im folgenden Beispiel angezeigt werden:

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

    sudo keyctl clear $((16#$(grep '.dns_resolver' /proc/keys | cut -f1 -d\ ) ))
    
  3. Zeigen Sie die status des Kernelmoduls dns_resolver erneut an:

    grep '.dns_resolver' /proc/keys
    

    Es sollte eine Befehlsausgabe 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
    

Lösung

Um eine dauerhafte Korrektur zu finden, führen Sie ein Upgrade Ihres Clientbetriebssystems auf eine Linux-Distributionsversion mit Unterstützung für die Kontomigration durch. Mehrere Korrekturen für den Linux-SMB-Kernelclient wurden an den Linux-Hauptzeilen-Kernel übermittelt. Kernelversion 5.15 und höher und Keyutils-1.6.2+ verfügen über die Fixes. Einige Distributionen haben diese Korrekturen zurückportiert, und Sie können überprüfen, ob die folgenden Korrekturen in der von Ihnen verwendeten Distributionsversion vorhanden sind:

SMB-Dateifreigabe kann nicht eingebunden werden, wenn FIPS aktiviert ist

Wenn Federal Information Processing Standard (FIPS) auf einem virtuellen Linux-Computer aktiviert ist, kann die SMB-Dateifreigabe nicht eingebunden werden. Die Linux-DMesg-Protokolle auf dem Client zeigen Fehler an, 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 die US-Regierung verwendet, um die Sicherheit und Integrität von Computersystemen zu gewährleisten. Wenn sich ein System im FIPS-Modus befindet, erfüllt es bestimmte kryptografische Anforderungen, die in diesen Standards beschrieben werden.

Ursache

Der Client der SMB-Dateifreigabe verwendet die NTLMSSP-Authentifizierung, die den MD5-Hashalgorithmus 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 für kryptografische Zwecke als unsicher.

Überprüfen, 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, lesen Sie option2 , um es 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 dem virtuellen Linux-Computer einzubinden, auf dem FIPS aktiviert ist. Weitere Informationen finden Sie unter Aktivieren der Active Directory-Authentifizierung über SMB für Linux-Clients, die auf Azure Files zugreifen.

Option 2: Deaktivieren von FIPS zum Einbinden der Samba-Freigabe

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

  2. Ändern Sie in der GRUB_CMDLINE_LINUX_DEFAULT/etc/default/grub Datei, und entfernen Sie den Parameter fips=1.

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

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

    sudo dracut -fv
    
  5. Starten Sie den virtuellen Computer neu.

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

Benötigen Sie Hilfe?

Wenn Sie weiterhin Hilfe benötigen, wenden Sie sich an den Support , um Ihr Problem schnell zu beheben.

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.