我正在尝试运行:
sudo mount -t cifs //user.my-backup.com /mnt/wal_drive -o iocharset=utf8,rw,credentials=/etc/backupcredentials.txt,uid=postgres,gid=postgres,file_mode=0660,dir_mode=0770
Run Code Online (Sandbox Code Playgroud)
但是我不断收到以下错误:
mount error(22): Invalid argument
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
小智 74
也许这有助于解决这个问题,mount error(22): Invalid argument
...可能的错误是 mount 命令上的参数/s(模式)。
检查您遇到的错误的日志。
tail -f /var/log/kern.log
Run Code Online (Sandbox Code Playgroud)删除无效参数
drg*_*rog 14
另一个可能的原因是存在sec=ntlm
in/etc/fstab
并且它与较新的 SMB 协议(如 SMB3)不兼容。
虽然不是 OP 的情况,但这也可能导致mount error(22): Invalid argument
错误,就像升级旧服务器后对我所做的那样。
尽管kern.log
包含对 的建议specify vers=1.0 on mount
,但删除或更改可能更安全sec=ntlm
。也许使用默认值来允许自动协商 SMB 版本和安全性,或指定兼容选项,例如vers=3.0,sec=ntlmssp
.
显然,这取决于您的 SMB 服务器的功能,但vers=1.0
除非必要,否则我会尽量避免。
小智 8
我在 Arch Linux 上遇到了同样的问题,日志中有这条消息:
kernel: CIFS VFS: cifs_mount failed w/return code = -22
Run Code Online (Sandbox Code Playgroud)
对我来说,解决方案是指定旧版本的 cifs(默认为 3.0):
/etc/fstab
:
//my-router/share /media/share cifs ver="2.1",rw,soft,uid=ele,gid=ele,file_mode=0770,dir_mode=0770,credentials=/etc/router-credentials.conf 0 0
Run Code Online (Sandbox Code Playgroud)