SMB 2.0 を実行しているサーバー (SMB 1.0 は無効) に接続するときに を使用するとmount -t cifs -v <address>
エラーが返されます。回避策は、 の引数リストに を指定することです。これは、コマンド ライン経由でマウントしていて、この引数を指定できる場合は正常に機能します。ただし、GUI またはユーザーに代わって呼び出すプログラムを使用する場合は、この引数は指定されません。Host is Down
vers=2.0
mount
mount
呼び出し元に関係なく、すべての呼び出しに対して SMB 2.0+ をデフォルトにする方法はありますかmount -t cifs
? おそらくsmb.conf
?
現在Arch Linuxを実行しています。
編集:サービスmin protocol = SMB2
に 追加され、再起動されました。 と の両方で、サーバーに接続する前に SMB バージョンを指定する必要があります。/etc/samba/smb.conf
mount
smbclient
編集2:
と を追加するとclient min protocol = SMB2
、バージョン引数を指定せずにサーバーに接続できるようclient max protocol = SMB3
になります。ただし、では に新しく追加された行がまだ考慮されません。smbclient
mount
smb.conf
答え1
残念ながら、カーネルのcifs
ファイルシステム モジュールはまったく読み取りません/etc/samba/smb.conf
。Windows ファイル共有のマウントを可能にする CIFS クライアント モジュールは、Samba とは完全に別です。
モジュールのデフォルトのプロトコル レベルは、cifs
バニラ カーネル バージョン 4.13 で SMB3 に変更され、マルチ方言ネゴシエーション パッチ (実質的にはデフォルトを「SMB2.1 以降」に設定) が 2017 年 9 月にバニラ カーネルに追加されました。
「エンタープライズ」 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