SMB 2.0(SMB 1.0 비활성화됨)을 실행하는 서버에 연결할 때 오류가 반환됩니다 mount -t cifs -v <address>
. Host is Down
해결책은 vers=2.0
매개변수 목록을 지정하는 것입니다 mount
. 명령줄을 통해 설치하고 이 매개변수를 지정할 수 있는 경우 이는 매우 효과적입니다. 그러나 GUI나 mount
사용자를 대신하여 호출되는 일부 프로그램을 사용할 때는 이 매개변수가 지정되지 않습니다.
mount -t cifs
모든 통화에 대해 SMB 2.0+를 기본값으로 설정할 수 있는 방법이 있습니까 ? 아마도 smb.conf
?
현재 아치 리눅스를 실행하고 있습니다.
편집하다:서비스를 추가 min protocol = SMB2
하고 다시 시작합니다. /etc/samba/smb.conf
둘 다 서버에 연결하기 전에 SMB 버전을 지정 해야 mount
합니다 .smbclient
편집 2:버전 매개변수를 지정하지 않고 서버에 연결할 수 있도록 client min protocol = SMB2
추가 되었습니다 . 그러나 새로 추가된 행은 여전히 존중되지 않습니다 .client max protocol = SMB3
smbclient
mount
smb.conf
답변1
불행하게도 커널의 파일 시스템 모듈은 cifs
전혀 읽지 못합니다. /etc/samba/smb.conf
Windows 파일 공유 마운트를 허용하는 CIFS 클라이언트 모듈은 Samba와 완전히 독립적입니다.
스톡 커널 버전 4.13에서는 모듈의 기본 프로토콜 수준이 cifs
SMB3으로 변경되었으며, 2017년 9월에 다중 언어 협상 패치가 스톡 커널에 추가되었습니다(기본값을 "SMB2.1 이상"으로 효과적으로 설정).
나는 "엔터프라이즈" Linux 배포판이 패치를 이전 커널로 백포트했다고 확신하지만 Arch에서는 커널 버전 4.13 이상으로 업그레이드하는 것이 유일한 옵션일 수 있습니다.
다음은 kernel.org Git의 관련 패치에 대한 링크입니다.커밋 ID는 특정 커널 버전의 패치를 추적하는 데 유용할 수 있습니다.
답변2
이 문제를 조사하는 과정에서 명령의 CIFS 매개변수를 조정하는 스크립트를 작성했습니다 mount
.
#!/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[@]}"
이 스크립트를 /bin/mount.sh
.
chmod a+x /bin/mount.sh
mv /bin/mount /bin/mount.real && ln -fs mount.sh /bin/mount
제거하다
test -L /bin/mount && rm -f /bin/mount && mv -f /bin/mount.real /bin/mount
rm -f /bin/mount.sh