Problemen Azure Files in Linux (SMB) oplossen

In dit artikel worden veelvoorkomende problemen beschreven die betrekking hebben op Azure Files verbinding maken vanaf Linux-clients. Het biedt ook mogelijke oorzaken en oplossingen voor deze problemen.

Naast de stappen voor probleemoplossing in dit artikel kunt u AzFileDiagnostics gebruiken om ervoor te zorgen dat de Linux-client over de juiste vereisten beschikt. AzFileDiagnostics automatiseert de detectie van de meeste symptomen die in dit artikel worden genoemd. Het helpt bij het instellen van uw omgeving om optimale prestaties te krijgen. U vindt deze informatie ook in de probleemoplosser Azure Files shares. De probleemoplosser biedt stappen om u te helpen bij het verbinden, toewijzen en koppelen van Azure Files shares.

Belangrijk

De inhoud van dit artikel is alleen van toepassing op SMB-shares. Zie Problemen met Azure NFS-bestands shares oplossen voor meer informatie over NFS-shares.

Van toepassing op

Bestands sharetype SMB NFS
Standaardbestands shares (GPv2), LRS/ZRS Ja Nee
Standaardbestands shares (GPv2), GRS/GZRS Ja Nee
Premium (FileStorage), LRS/ZRS Ja Nee

Kan geen verbinding maken met een Azure-bestands share of deze koppelen

Oorzaak

Veelvoorkomende oorzaken voor dit probleem zijn:

  • U gebruikt een Linux-distributie met een verouderde SMB-client. Zie Azure Files gebruiken met Linux voor meer informatie over algemene Linux-distributies die beschikbaar zijn in Azure met compatibele clients.
  • SMB-hulpprogramma's (cifs-utils) zijn niet geïnstalleerd op de client.
  • De minimale SMB-versie, 2.1, is niet beschikbaar op de client.
  • SMB 3.x-versleuteling wordt niet ondersteund op de client. De voorgaande tabel bevat een lijst met Linux-distributies die ondersteuning bieden voor het gebruik van versleuteling vanuit on-premises en regio-overschrijdend. Voor andere distributies zijn kernel 4.11 en hogere versies vereist.
  • U probeert verbinding te maken met een Azure-bestands share vanaf een Azure-VM en de VM zich niet in dezelfde regio als het opslagaccount.
  • Als de instelling Veilige overdracht vereist is ingeschakeld voor het opslagaccount, Azure Files alleen verbindingen toegestaan die gebruikmaken van SMB 3.x met versleuteling.

Oplossing

Om het probleem op te lossen, gebruikt u het hulpprogramma voor probleemoplossing voor Azure Files in Linux. Dit hulpprogramma:

  • Helpt u bij het valideren van de clientomgeving die wordt uitgevoerd.
  • Detecteert de niet-compatibele clientconfiguratie die toegangsfout zou veroorzaken voor Azure Files.
  • Biedt prescriptieve richtlijnen voor zelfreparatie.
  • Verzamelt de diagnostische traceringen.

'Fout bij koppelen (13): toegang geweigerd' wanneer u een Azure-bestandsshare koppelt

Oorzaak 1: niet-versleuteld communicatiekanaal

Verbindingen met Azure-bestandsshares worden uit veiligheidsoverwegingen geblokkeerd als het communicatiekanaal niet is versleuteld en als de verbindingspoging niet is ondernomen vanuit hetzelfde datacenter als waar de Azure-bestandsshares zich bevinden. Niet-versleutelde verbindingen binnen hetzelfde datacenter kunnen ook worden geblokkeerd als de instelling Veilige overdracht vereist is ingeschakeld in het opslagaccount. Er wordt alleen een versleuteld communicatiekanaal geboden als het clientbesturingssysteem van de gebruiker ondersteuning biedt voor SMB-versleuteling.

Zie Vereisten voor het koppelen van een Azure-bestandsshare met Linux en het cifs-utils-pakket voor meer informatie.

Oplossing voor oorzaak 1

  1. Verbinding maken van een client die ondersteuning biedt voor SMB-versleuteling of verbinding maakt vanaf een virtuele machine in hetzelfde datacenter als het Azure-opslagaccount dat wordt gebruikt voor de Azure-bestands share.
  2. Controleer of de instelling Veilige overdracht vereist is uitgeschakeld voor het opslagaccount als de client geen ondersteuning biedt voor SMB-versleuteling.

Oorzaak 2: er zijn regels voor het virtuele netwerk of de firewall ingeschakeld in het opslagaccount

Als er regels voor het VNET (virtueel netwerk) of de firewall zijn geconfigureerd in het opslagaccount, wordt netwerkverkeer de toegang geweigerd, tenzij het IP-adres van de client of het virtuele netwerk toegang heeft.

Oplossing voor oorzaak 2

Controleer of regels voor het virtuele netwerk of de firewall juist zijn geconfigureerd in het opslagaccount. Als u wilt testen of het probleem wordt veroorzaakt door regels voor het virtuele netwerk of de firewall, wijzigt u de instelling in het opslagaccount in Toegang toestaan vanaf alle netwerken. Zie Firewalls en virtuele netwerken voor Azure Storage configureren voor meer informatie.

[machtiging geweigerd] Het schijfquotum is overschreden wanneer u probeert een bestand te openen

In Linux ontvangt u een foutbericht dat er als volgt uit ziet:

<filename> [machtiging geweigerd] Schijfquotum overschreden

Oorzaak

U hebt de bovengrens bereikt van gelijktijdige geopende grepen die zijn toegestaan voor een bestand of map.

Er is een quotum van 2000 geopende grepen voor één bestand of map. Wanneer u 2000 geopende grepen hebt, wordt er een foutbericht weergegeven met de melding dat het quotum is bereikt.

Oplossing

Verminder het aantal gelijktijdige geopende grepen door enkele grepen te sluiten en de bewerking vervolgens opnieuw uit te voeren.

Als u geopende grepen voor een bestands share, map of bestand wilt weergeven, gebruikt u de PowerShell-cmdlet Get-AzStorageFileHandle.

Als u geopende grepen voor een bestands share, map of bestand wilt sluiten, gebruikt u de PowerShell-cmdlet Close-AzStorageFileHandle.

Notitie

De Get-AzStorageFileHandle- en Close-AzStorageFileHandle-cmdlets zijn opgenomen in Az PowerShell-module versie 2.4 of hoger. Zie Install the Azure PowerShell module (De module Azure PowerShell installeren) om de nieuwste Az PowerShell-module te installeren.

Traag kopiëren van bestanden van en naar Azure Files in Linux

  • Als u geen specifieke minimale I/O-grootte vereist, wordt u aangeraden 1 MiB als de I/O-grootte te gebruiken voor optimale prestaties.
  • Gebruik de juiste kopieermethode:
    • Gebruik AzCopy voor elke overdracht tussen twee bestands shares.
    • Het gebruik van cp of dd met parallel kan de kopieersnelheid verbeteren. Het aantal threads is afhankelijk van uw use-case en workload. In de volgende voorbeelden worden zes gebruikt:
    • cp-voorbeeld (cp gebruikt de standaardblokgrootte van het bestandssysteem als de chunkgrootte): find * -type f | parallel --will-cite -j 6 cp {} /mntpremium/ & .
    • dd voorbeeld (met deze opdracht wordt de chunkgrootte expliciet op 1 MiB): find * -type f | parallel --will-cite-j 6 dd if={} of=/mnt/share/{} bs=1M
    • Open source-hulpprogramma's van derden, zoals:
      • GNU Parallel.
      • Fpart: sorteert bestanden en verpakt ze in partities.
      • Fpsync: maakt gebruik van Fpart en een kopieerprogramma om meerdere exemplaren te maken om gegevens te migreren van src_dir naar dst_url.
      • Multi- Multi-Threaded CP en md5sum op basis van GNU-kernen.
  • Het vooraf instellen van de bestandsgrootte, in plaats van elke schrijf-schrijven een uitbreidbare schrijfsnelheid te maken, helpt bij het verbeteren van de kopieersnelheid in scenario's waarin de bestandsgrootte bekend is. Als u het uitbreiden van schrijf- en schrijfopdracht wilt vermijden, kunt u een doelbestandsgrootte instellen met truncate - size <size><file> de opdracht . Daarna kopieert de opdracht een bronbestand zonder dat de grootte van het doelbestand herhaaldelijk dd if=<source> of=<target> bs=1M conv=notrunc moet worden bijgewerkt. U kunt bijvoorbeeld de grootte van het doelbestand instellen voor elk bestand dat u wilt kopiëren (ervan uitgaan dat een share is bevestigd onder /mnt/share):
    • $ for i in `` find * -type f``; do truncate --size ``stat -c%s $i`` /mnt/share/$i; done
    • en vervolgens kopieert u bestanden zonder schrijf-in-parallel uit te breiden: $find * -type f | parallel -j6 dd if={} of =/mnt/share/{} bs=1M conv=notrunc

'Fout bij het monteren(115): Bewerking wordt nu uitgevoerd' wanneer u de Azure Files met behulp van SMB 3.x

Oorzaak

Sommige Linux-distributies bieden nog geen ondersteuning voor versleutelingsfuncties in SMB 3.x. Gebruikers ontvangen mogelijk het foutbericht '115' als ze proberen Azure Files te maken met behulp van SMB 3.x vanwege een ontbrekende functie. SMB 3.x met volledige versleuteling wordt alleen ondersteund wanneer u Ubuntu 16.04 of hoger gebruikt.

Oplossing

De versleutelingsfunctie voor SMB 3.x voor Linux is geïntroduceerd in de 4.11-kernel. Deze functie maakt het koppelen van een Azure-bestandsshare mogelijk, on-premises of vanuit een andere Azure-regio. Sommige Linux-distributies hebben mogelijk wijzigingen in de backport van de kernel 4.11 naar oudere versies van de Linux-kernel die ze onderhouden. Raadpleeg Use Azure Files with Linuxom te bepalen of uw linux-versie SMB 3.x ondersteunt met versleuteling.

Als uw Linux SMB-client geen ondersteuning biedt voor versleutelen, koppelt u Azure Files met behulp van SMB 2.1 vanaf een Azure Linux-VM die zich in hetzelfde datacenter bevindt als de bestandsshare. Controleer of de instelling Veilige overdracht vereist is uitgeschakeld in het opslagaccount.

Fout 'Geen toegang' wanneer u een Azure-bestands share probeert te openen of verwijderen

Wanneer u een Azure-bestands share probeert te openen of verwijderen in de portal, wordt mogelijk de volgende fout weergegeven:

Geen toegang
Foutcode: 403

Oorzaak 1: Regels voor virtuele netwerken of firewalls zijn ingeschakeld voor het opslagaccount

Oplossing voor oorzaak 1

Controleer of regels voor het virtuele netwerk of de firewall juist zijn geconfigureerd in het opslagaccount. Als u wilt testen of het probleem wordt veroorzaakt door regels voor het virtuele netwerk of de firewall, wijzigt u de instelling in het opslagaccount in Toegang toestaan vanaf alle netwerken. Zie Firewalls en virtuele netwerken voor Azure Storage configureren voor meer informatie.

Oorzaak 2: Uw gebruikersaccount heeft geen toegang tot het opslagaccount

Oplossing voor oorzaak 2

Blader naar het opslagaccount waar de Azure-bestands share zich bevindt, klik op Toegangsbeheer (IAM) en controleer of uw gebruikersaccount toegang heeft tot het opslagaccount. Zie Uw opslagaccount beveiligen met op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC)voor meer informatie.

Kan een bestand of map in een Azure-bestandsshare niet verwijderen

Oorzaak

Dit probleem treedt meestal op als het bestand of de map een geopende greep heeft.

Oplossing

Als de SMB-clients alle geopende grepen hebben gesloten en het probleem zich blijft voordoen, voert u het volgende uit:

Notitie

De Get-AzStorageFileHandle- en Close-AzStorageFileHandle-cmdlets zijn opgenomen in Az PowerShell-module versie 2.4 of hoger. Zie Install the Azure PowerShell module (De module Azure PowerShell installeren) om de nieuwste Az PowerShell-module te installeren.

Langzame prestaties van een Azure-bestandsshare die is gekoppeld aan een Linux-VM

Oorzaak 1: Caching

Een mogelijke oorzaak van trage prestaties is uitgeschakelde caching. Caching kan handig zijn als u een bestand herhaaldelijk gebruikt, anders kan dit een overhead zijn. Controleer of u de cache gebruikt voordat u deze uitcheckt.

Oplossing voor oorzaak 1

Als u wilt controleren of caching is uitgeschakeld, zoek dan naar de vermelding cache= .

Cache = geen geeft aan dat caching is uitgeschakeld. U kunt de share opnieuw ontkoppelen met behulp van de standaardopdracht voor hetkoppelen of door expliciet de optie cache=strict toe te voegen aan de mount-opdracht om ervoor te zorgen dat standaardcacheopslag of 'strikte' cachemodus is ingeschakeld.

In sommige scenario's kan de serverino-mountoptie ertoe leiden dat de ls-opdracht stat wordt uitgevoerd op elke mapinvoer. Dit gedrag leidt tot prestatievermindering wanneer u een grote map welijst. U kunt de opties voor het monteren in uw /etc/fstab vermelding controleren:

//azureuser.file.core.windows.net/cifs /cifs cifs vers=2.1,serverino,username=xxx,password=xxx,dir_mode=0777,file_mode=0777

U kunt ook controleren of de juiste opties worden gebruikt door de opdracht sudo mount | grep cifs uit te voeren en de uitvoer te controleren. Hier volgt een voorbeeld van uitvoer:

//azureuser.file.core.windows.net/cifs on /cifs type cifs (rw,relatime,vers=2.1,sec=ntlmssp,cache=strict,username=xxx,domain=X,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.10.1,file_mode=0777, dir_mode=0777,persistenthandles,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,actimeo=1)

Als de optie cache=strict of serverino niet aanwezig is, ontkoppelt en Azure Files opnieuw door de mount-opdracht uit de documentatie uit te voeren. Controleer vervolgens of de vermelding /etc/fstab de juiste opties heeft.

Oorzaak 2: Beperking

Het is mogelijk dat u te maken hebt met beperkingen en dat uw aanvragen naar een wachtrij worden verzonden. U kunt dit controleren door gebruik te maken van Azure Storage metrische gegevens in Azure Monitor.

Oplossing voor oorzaak 2

Zorg ervoor dat uw app zich binnen de Azure Files schaaldoelen .

Tijdstempels zijn verloren gegaan bij het kopiëren van bestanden van Windows naar Linux

Op Linux-/Unix-platforms mislukt de opdracht cp -p als verschillende gebruikers eigenaar zijn van bestand 1 en bestand 2.

Oorzaak

De force flag f in COPYFILE resulteert in het uitvoeren van cp -p -f op Unix. Met deze opdracht kunt u ook het tijdstempel van het bestand dat u niet bezit niet behouden.

Tijdelijke oplossing

De gebruiker van het opslagaccount gebruiken voor het kopiëren van de bestanden:

  • Useadd : [storage account name]
  • Passwd [storage account name]
  • Su [storage account name]
  • Cp -p filename.txt /share

ls: kan geen toegang krijgen tot < pad > ': Invoer-/uitvoerfout

Wanneer u bestanden in een Azure-bestands share probeert weer te geven met behulp van de ls-opdracht, blijft de opdracht hangen wanneer bestanden worden weergegeven. U krijgt de volgende foutmelding:

ls: kan geen toegang krijgen < tot pad > ': Invoer-/uitvoerfout

Oplossing

Upgrade de Linux-kernel naar de volgende versies die een oplossing voor dit probleem hebben:

  • 4.4.87+
  • 4.9.48+
  • 4.12.11+
  • Alle versies die groter zijn dan of gelijk zijn aan 4.13

Oorzaak

Standaard biedt het koppelen van Azure-bestands shares in Linux met behulp van CIFS geen ondersteuning voor symbolische koppelingen (symlinks). Er wordt een fout als deze weergegeven:

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

Oplossing

De Linux CIFS-client biedt geen ondersteuning voor het maken van Windows symbolische koppelingen in de stijl via het SMB 2- of 3-protocol. Op dit moment ondersteunt de Linux-client een andere stijl van symbolische koppelingen met de naam Minshall+French symlinks voor zowel maak- als volgbewerkingen. Klanten die symbolische koppelingen nodig hebben, kunnen de koppelingsoptie mfsymlinks gebruiken. We raden 'mfsymlinks' aan, omdat dit ook de indeling is die Macs gebruiken.

Als u symlinks wilt gebruiken, voegt u het volgende toe aan het einde van de CIFS-opdracht voor koppelen:

,mfsymlinks

De opdracht ziet er dus zo uit:

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

Vervolgens kunt u symlinks maken zoals voorgesteld op de wiki.

Fout ConditionHeadersNotSupported vanuit een webtoepassing met behulp van Azure Files vanuit de browser

De ConditionHeadersNotSupported-fout treedt op wanneer toegang tot inhoud die wordt gehost in Azure Files via een toepassing die gebruikmaakt van voorwaardelijke kopteksten, zoals een webbrowser, niet kan worden geopend. De fout geeft aan dat de conditie headers niet worden ondersteund.

Fout met voorwaardelijke koptekst Azure Files

Oorzaak

Voorwaardelijke kopteksten worden nog niet ondersteund. Toepassingen die ze implementeren, moeten het volledige bestand aanvragen wanneer het bestand wordt geopend.

Tijdelijke oplossing

Wanneer een nieuw bestand wordt geüpload, is de eigenschap Cache-Control standaard ingesteld op ' no-cache '. Om ervoor te zorgen dat de toepassing het bestand elke keer kan aanvragen, moet de eigenschap Cache-Control van het bestand worden bijgewerkt van ' no-cache ' in ' no-cache ', no-Store, moet opnieuw worden gevalideerd '. Dit kan worden bereikt met behulp van Azure Storage Explorer.

Wijzigingen in de inhoud van de opslag Verkenner voor Azure Files voorwaardelijke kopteksten

'Koppelingsfout(112): Host is niet in gebruik' vanwege een time-out voor opnieuw verbinden

Een koppelfout 112 treedt op de Linux-client op wanneer de client gedurende lange tijd inactief is. Na een lange tijd van inactiviteit wordt de verbinding met de client verbroken en treedt er een time-out op.

Oorzaak

De verbinding kan om de volgende redenen inactief zijn:

  • Fouten in de netwerkcommunicatie waardoor een TCP-verbinding met de server niet opnieuw tot stand kan worden gebracht, wanneer de standaardoptie voor soft koppelen wordt gebruikt
  • Recente oplossingen voor opnieuw verbinden die niet aanwezig zijn in oudere kernels

Oplossing

Dit probleem met opnieuw verbinden in de Linux-kernel is nu opgelost als onderdeel van de volgende wijzigingen:

Deze wijzigingen zijn mogelijk nog niet doorgevoerd in alle Linux-distributies. Als u een populaire Linux-distributie gebruikt, kunt u op de Azure Files met Linux controleren welke versie van uw distributie de benodigde kernelwijzigingen heeft.

Tijdelijke oplossing

U kunt dit probleem omzeilen door een harde koppeling op te geven. Met een harde koppeling wordt afgedwongen dat er wordt gewacht totdat er een verbinding tot stand is gebracht, of tot de client expliciet wordt onderbroken. U kunt dit gebruiken om fouten vanwege time-outs van het netwerk te voorkomen. Deze tijdelijke oplossing kan echter leiden tot onbepaalde wachttijden. Wees voorbereid om verbindingen te stoppen, indien nodig.

Als u geen upgrade kunt uitvoeren naar de nieuwste kernelversies, kunt u dit probleem omzeilen door een bestand in de Azure-bestandsshare te bewaren waarnaar u elke 30 seconden, of minder, schrijft. Dit moet een schrijfbewerking zijn, zoals het herschrijven van de aanmaakdatum of wijzigingsdatum van het bestand. Anders ontvangt u wellicht de resultaten die in de cache zijn opgeslagen, en wordt het opnieuw verbinden mogelijk niet geactiveerd.

'CIFS VFS: error -22 on ioctl to get interface list' (CIFS VFS: fout -22 op ioctl om interfacelijst op te halen) wanneer u een Azure-bestands share met behulp van SMB 3.x

Oorzaak

Deze fout wordt geregistreerd omdat Azure Files momenteel geen ondersteuning biedt voor SMB meerdere kanalen.

Oplossing

Deze fout kan worden genegeerd.

Kan geen toegang krijgen tot mappen of bestanden waarvan de naam een spatie of punt aan het einde heeft

U hebt geen toegang tot mappen of bestanden van de Azure-bestands share tijdens het gebruik van Linux. Opdrachten zoals du en ls en/of toepassingen van derden kunnen mislukken met de fout 'Geen dergelijk bestand of map' tijdens het openen van de share, maar u kunt bestanden uploaden naar die mappen via de portal.

Oorzaak

De mappen of bestanden zijn geüpload vanaf een systeem dat de tekens aan het einde van de naam codeert naar een ander teken. Bestanden die zijn geüpload vanaf een Macintosh-computer hebben mogelijk een '0xF028' of '0xF029'-teken in plaats van 0x20 (spatie) of 0X2E (punt).

Oplossing

Gebruik de mapchars-optie op de share tijdens het maken van de share in Linux:

In plaats van:

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

gebruik:

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

Hebt u hulp nodig? Neem contact op met ondersteuning.

Als u nog steeds hulp nodig hebt, kunt u contact opnemen met de ondersteuning om uw probleem snel op te lossen.