mount error(12): Cannot allocate memory beim Einbinden von Windows-Freigaben
Wer Windows-Netzwerkfreigaben von einem Linux-System aus einbinden möchte, stößt gelegentlich auf die kryptische Fehlermeldung mount error(12): Cannot allocate memory. Der Name ist irreführend – es handelt sich nicht um einen tatsächlichen Speichermangel auf dem Linux-System, sondern um einen bekannten Bug auf der Windows-Serverseite.
Fehlerbild
Der Fehler tritt beim Ausführen von mount.cifs auf:
sudo mount -t cifs //192.168.1.100/freigabe /mnt/share -o username=user,password=pass
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
and kernel log messages (dmesg)
for more information.
Der dmesg-Ausgabe gibt oft zusätzlichen Hinweis:
dmesg | tail -20
Ursache: IRPStackSize zu klein
Der eigentliche Grund liegt auf dem Windows-Server: Der Parameter IRPStackSize (I/O Request Packet Stack Size) des Windows-Dienstes Server (LanmanServer) ist zu klein eingestellt. Dieser Wert bestimmt, wie viele Ebenen von Treibern einen I/O-Request weiterverarbeiten können. Der Standardwert (typischerweise 11 oder 15) reicht in bestimmten Konfigurationen – etwa wenn viele Treiber oder Sicherheitssoftware beteiligt sind – nicht aus.
Windows liefert dann intern den Fehlercode STATUS_INSUFF_SERVER_RESOURCES, was Linux als ENOMEM (Fehler 12: Cannot allocate memory) interpretiert.
Lösung: IRPStackSize in der Registry erhöhen
Auf dem Windows-Server (nicht auf dem Linux-Client) folgenden Registry-Wert setzen oder erhöhen:
Schlüssel: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters
Name: IRPStackSize
Typ: REG_DWORD
Wert: 15
Falls der Wert bereits existiert aber kleiner als 15 ist, auf 15 erhöhen. Wenn das Problem weiterhin besteht, schrittweise erhöhen (bis maximal 50).
Änderung per PowerShell
Die Registry-Änderung lässt sich auch per PowerShell als Administrator setzen:
# PowerShell als Administrator
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" `
-Name "IRPStackSize" -Value 15 -Type DWord
# Aktuellen Wert prüfen
Get-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" `
-Name "IRPStackSize"
Server-Dienst neu starten
Die Änderung wird erst nach einem Neustart des Server-Dienstes wirksam – ein vollständiger Neustart von Windows ist nicht erforderlich:
# PowerShell als Administrator
Restart-Service LanmanServer
# Oder per CMD
net stop server && net start server
Achtung: Das Neustarten des Server-Dienstes trennt kurzzeitig alle aktiven Netzwerkverbindungen zu diesem Windows-System. Am besten in einer Wartungszeit durchführen.
Mount-Befehl nach der Korrektur
Nach dem Neustart des Server-Dienstes das Einbinden erneut versuchen:
sudo mount -t cifs //192.168.1.100/freigabe /mnt/share -o username=user,password=pass,uid=$(id -u),gid=$(id -g)
Für permanentes Einbinden via /etc/fstab:
//192.168.1.100/freigabe /mnt/share cifs username=user,password=pass,uid=1000,gid=1000,iocharset=utf8 0 0
Mit dem erhöhten IRPStackSize-Wert und einem Neustart des Server-Dienstes ist der Fehler dauerhaft behoben – ohne jegliche Änderungen am Linux-System.


