Bei Verwendung von wird ein Fehler mount -t cifs -v <address>
zurückgegeben Host is Down
, wenn eine Verbindung zu einem Server hergestellt wird, auf dem SMB 2.0 ausgeführt wird (und SMB 1.0 deaktiviert ist). Eine Problemumgehung besteht darin, vers=2.0
die Argumentliste von anzugeben mount
. Dies funktioniert einwandfrei, wenn Sie über die Befehlszeile mounten und die Möglichkeit haben, dieses Argument anzugeben. Wenn Sie jedoch eine GUI oder ein Programm verwenden, das mount
in Ihrem Namen aufruft, wird dieses Argument nicht angegeben.
Gibt es eine Möglichkeit, SMB 2.0+ als Standard für alle Anrufe festzulegen mount -t cifs
, unabhängig davon, wer anruft? Vielleicht in smb.conf
?
Derzeit wird Arch Linux ausgeführt.
BEARBEITEN:Dem Dienst hinzugefügt und neu gestartet. min protocol = SMB2
Für beide ist weiterhin die Angabe der SMB-Version vor der Verbindung mit dem Server erforderlich./etc/samba/smb.conf
mount
smbclient
EDIT2:
Durch das Hinzufügen von client min protocol = SMB2
und client max protocol = SMB3
kann smbclient
eine Verbindung zum Server hergestellt werden, ohne dass das Versionsargument angegeben werden muss. mount
Die neu hinzugefügten Zeilen in werden jedoch weiterhin nicht berücksichtigt smb.conf
.
Antwort1
cifs
Leider kann das Dateisystemmodul des Kernels /etc/samba/smb.conf
überhaupt nicht gelesen werden. Das CIFS-Clientmodul, das das Mounten von Windows-Dateifreigaben ermöglicht, ist vollständig von Samba getrennt.
Die Standardprotokollebene im cifs
Modul wurde im Vanilla-Kernel, Version 4.13, auf SMB3 geändert und im September 2017 wurde den Vanilla-Kerneln ein Patch zur Verhandlung mehrerer Dialekte hinzugefügt (der den Standard effektiv auf „SMB2.1 oder höher“ setzt).
Ich bin ziemlich sicher, dass die „Enterprise“-Linux-Distributionen den Patch auf frühere Kernel zurückportiert haben, aber unter Arch besteht Ihre einzige Option möglicherweise darin, auf die Kernelversion 4.13 oder höher zu aktualisieren.
Hier ist ein Link zum entsprechenden Patch im Git von kernel.org.Die Commit-ID kann beim Verfolgen des Patches in bestimmten Kernelversionen hilfreich sein.
Antwort2
Im Rahmen der Untersuchung dieses Problems habe ich ein Skript geschrieben, das die CIFS-Parameter für den mount
Befehl anpasst.
#!/bin/bash
#
# Force SMB2.0 mount. We prefix the options list because a later explicit
# "vers=..." option overrides the one we add.
########################################################################
#
args=()
# Only consider checking options if we have a CIFS mount
[[ "$*" =~ '-t cifs' ]] && cifs=yes || cifs=
options=
for arg in "$@"
do
if [[ $next == 'options' ]]
then
# Prefix version to options string
arg="vers=2.0,$arg"
next=
fi
args+=("$arg")
# CIFS options check
if [[ $cifs == 'yes' ]]
then
[[ $arg == '-o' ]] && next=options
fi
done
logger -p user.notice -t "${0/*\/}" "intercepted $0 ${args[*]}"
exec "$0.real" "${args[@]}"
Installieren Sie dieses Skript als /bin/mount.sh
. Führen Sie dann diese Befehle aus
chmod a+x /bin/mount.sh
mv /bin/mount /bin/mount.real && ln -fs mount.sh /bin/mount
Deinstallieren Sie es mit
test -L /bin/mount && rm -f /bin/mount && mv -f /bin/mount.real /bin/mount
rm -f /bin/mount.sh