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
Erstellen symbolischer Verknüpfungen nicht möglich – in: Fehler beim Erstellen der symbolischen Verknüpfung „t“: Dieser Vorgang wird nicht unterstützt.
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:
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
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\ ) ))
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
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:
cifs: On cifs_reconnect, resolve the hostname again (Bei cifs_reconnect den Hostnamen erneut auflösen)
cifs: use the expiry output of dns_query to schedule next resolution (Die Ablaufausgabe von dns_query zum Planen der nächsten Auflösung verwenden)
cifs: set a minimum of 120s for next dns resolution (Mindestens 120 s für die nächste dns-Auflösung festlegen)
cifs: To match file servers, make sure the server hostname matches (cifs: Sicherstellen, dass der Serverhostname mit den Dateiservern übereinstimmt)
cifs: fix memory leak of smb3_fs_context_dup:server_hostname (Arbeitsspeicherverlust von smb3_fs_context_dup:server_hostname beheben)
dns: Apply a default TTL to records obtained from getaddrinfo() (Einen Standard-TTL auf Datensätze anwenden, die aus getaddrinfo() abgerufen wurden)
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
Ändern Sie den Sysctl-Wert von
crypto.fips_enabled
0 in/etc/sysctl.conf
.Ändern Sie die
GRUB_CMDLINE_LINUX_DEFAULT
In-Datei/etc/default/grub
, und entfernen Sie den Parameterfips=1
.Die Grub2-Konfigurationsdatei mit dem folgenden Befehl neu erstellt:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Erstellen Sie das Initramfs-Bild mit dem folgenden Befehl neu:
sudo dracut -fv
Starten Sie die VM neu.
Weitere Informationen finden Sie in den folgenden Dokumenten von Linux-Distributoren:
- RedHat: Gründe für die Aktivierung des FIPS-Modus im Kernel-Break CIFS-Mounts
- SUSE: CIFS-Mount schlägt mit dem Fehler "Mount error(2): No such file or directory" fehl.
Sie brauchen Hilfe?
Wenden Sie sich an den Support, falls Sie weitere Hilfe benötigen, um das Problem schnell beheben zu lassen.
Siehe auch
- Problembehandlung für Azure Files
- Problembehandlung für die Azure Files-Leistung
- Behandeln von Azure Files-Konnektivitätsproblemen (SMB)
- Problembehandlung bei Azure Files-Authentifizierung und -Autorisierung (SMB)
- Behandeln von allgemeinen NFS-Problemen bei Azure Files unter Linux
- Problembehandlung bei der Azure-Dateisynchronisierung
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.