linux下应该应有一个类似windows下bat的批处理文件,只要运行就能一键解决各种系统文件、打印共享问题。以下是sh原料:
一、麒麟系统默认自带samba
二、配置服务器端samba的smb.conf文件
输入sudo pluma /etc/samba/smb.conf
在下边添加
[share]
comment= kylin share
path=/data/share
create mask=0777
directory mask=0777
public=yes
writeable=yes
available=yes
server min protocol = LANMAN1
然后保存。
(在Samba配置中,server min protocol = LANMAN1的含义是设置服务器支持的最小SMB协议版本为LANMAN1。
SMB(Server Message Block)是一种用于局域网上共享文件和打印机的通信协议。不同版本的SMB协议具有不同的特性和安全性。较旧的客户端可能只支持较旧的SMB协议版本,而现代的Samba服务器默认可能不支持这些较旧的协议版本。因此,当较旧的客户端尝试连接到现代的Samba服务器时,可能会出现协议协商失败的情况,导致无法正常访问共享资源4。
通过在Samba配置文件/etc/samba/smb.conf的[global]部分添加server min protocol = LANMAN1,可以指定服务器支持的最小SMB协议版本为LANMAN1,从而允许较旧的客户端连接到服务器5。这有助于兼容不同版本的操作系统与现代Samba版本之间的通信差异,解决客户端连接时报错NT_STATUS_INVALID_NETWORK_RESPONSE的问题4。
需要注意的是,启用较旧的SMB协议版本可能存在安全隐患,因此如果可以升级客户端以支持更新的SMB协议版本,建议尽量升级客户端)如果SMB1感觉卡顿,需要添加#注释掉这行,按照下边的方法设置最小版本为SMB2.改动不会影响win客户端,因为win环境SMB最小为SMB2。
三、添加共享文件夹:
在数据盘新建个share文件夹。不要home下新建,否则无法共享。创建共享文件夹:
sudo mkdir /data/share/sbg
sudo chmod 777 /home/share/sbg
以上步骤可以直接用鼠标新建文件夹,点右键设置共享,在高级共享里添加用户,设置读写权限。
四、重启电脑或者启动samba
sudo /etc/init.d/smbd start
五、在客户端打开共享
方法1(IP访问):
windows客户端浏览器中输入\\192.168.1.104\share
linux客户端安装samba客户端(一般默认安装有):
sudo apt-get install smbclient
运行以下命令打开共享smb://192.168.1.104/sbg
IP地址可以根据共享文件电脑ip实际情况调整,输入共享密码.
方法2(计算机名访问):
最好不要在客户端设置SAM1或NT1,兼容性虽然好,但卡顿问题多
六、改进(限制SMB版本、优化参数、开启CIFS)
1、在服务器端上验证确保Linux内核≥2.6.26================
uname -r # 输出示例:5.4.0-135-generic
2、服务器端打开文件(二选一)=========
sudo nano /etc/samba/smb.conf
sudo vim /etc/samba/smb.conf
3、64MB下写入===========
传输块调整(解决WIFI64MB带宽瓶颈)
rsize = 65536 # 从1MB降至64KB
wsize = 65536
veto oplock files = /*.mdb/*.ldb/*.sqlite # 防止关键文件锁冲突
min protocol = SMB2 # 强制使用高效协议
#1000MB提高单次读取块大小为1M=============
rsize = 1048576
wsize = 1048576
veto oplock files = /*.mdb/*.ldb/*.sqlite # 防止关键文件锁冲突
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
#设置文件权限为可读写、可执行,会增加同步次数,各类安全巡检会判定配置不合规,不推荐。
create mask = 0766
force create mode = 0766
#设置文件权限为可读写不可执行,推荐。
create mask = 0666
force create mode = 0666
3、#强制smb版本为2
server min protocol = SMB2
4、在服务器端关闭oplocks 机会锁。=================
oplocks=no
#服务器开启后大量小文件批量读取场景性能提升明显。重复读取文件速度更快。但是Linux CIFS 内核本身存在兼容性 bug,SMB3 搭配 oplock 长期使用有偶发读写异常。因此关闭。
kernel oplocks = no
#这是Linux 专属内核级机会锁,让 Samba 把锁管理交给系统内核,优化锁性能。它是 oplocks 的增强附属功能,依赖 oplocks 主开关。必须配套设置 同时关闭或打开。否则SMB逻辑混乱
七、客户端优化5\
1、客户端一般无需设置。也可以打开文件=========
sudo nano /etc/samba/smb.conf
#sudo vim /etc/samba/smb.conf
3、#强制smb版本为2
删除此行client min protocol = NT1
client min protocol = SMB2
4、# TCP:客户端删除固定缓冲区,只保留低延迟,消除内核TCP告警
socket options = TCP_NODELAY IPTOS_LOWDELAY
#注意case sensitive = no,不区分大小写,有windows环境兼容性更好
# 目录缓存,不用反复请求服务器文件列表
getwd cache = yes
# 无访问15分钟自动断连,避免僵死连接卡住目录
deadtime = 15
# 关闭WINS解析,只走广播+hosts,杜绝域名解析卡住
name resolve order = bcast host lmhosts wins
# 检查语法错误
testparm
# 随后重启服务生效
sudo systemctl restart smbd nmbd
5、下边分析挂载工具:gvfs全称:GNOME Virtual File System,GNOME 虚拟文件系统是统信 UOS、Ubuntu、Deepin 这类基于 GNOME 生态的 Linux 桌面自带工具。给桌面文件管理器提供各类网络路径、外接设备的访问能力。================
CIFS = Common Internet File System,通用互联网文件系统。本质是SMB 协议在 Linux 系统下的内核实现。
Windows 文件共享底层协议是 SMB;Linux 要读写 Windows/Samba 共享,靠内核模块cifs.ko实现挂载,所以大家统称这种挂载方式为 CIFS 挂载。
第一步:杀掉当前 GVFS 残留,卸载所有 GVFS-SMB 挂载=============
# 卸载所有gvfs挂载的smb共享
gio mount -u smb://qilin.local/sbg
# 强制结束全部gvfs后台进程
pkill -f gvfs
# 校验无gvfs smb挂载
mount | grep gvfs
第二步:用户级永久屏蔽 SMB 相关 GVFS 进程(最关键,统信标准方案)==========
GVFS 属于用户 systemd 服务,必须加--user执行 mask,彻底锁死无法自启、无法被桌面唤醒。逐条复制执行:
bash
# 屏蔽SMB挂载、局域网网络扫描、mDNS解析(元凶三进程)
systemctl --user mask gvfsd-smb.service
systemctl --user mask gvfsd-network.service
systemctl --user mask gvfsd-dnssd.service
# 屏蔽多余网络监控组件,防止连带拉起SMB
systemctl --user mask gvfs-goa-volume-monitor.service
systemctl --user mask gvfs-smb-browse.service
# 重启gvfs主进程,让屏蔽生效
systemctl --user restart gvfs-daemon
可恢复命令(后续需要放开 GVFS-SMB 时执行)========
systemctl --user unmask gvfsd-smb.service gvfsd-network.service gvfsd-dnssd.service gvfs-goa-volume-monitor.service gvfs-smb-browse.service
systemctl --user restart gvfs-daemon
第三步:文件管理器深度屏蔽网络 SMB 入口(杜绝误点)===============
统信 DDE 文件管理器自带开关,彻底隐藏 / 禁用网络 SMB 挂载入口,分两种版本:
方式 A(新版文件管理器 ≥6.0.56,推荐)普通用户终端执行,关闭文件管理器 CIFS/GVFS 自动网络挂载:dde-dconfig --set -a org.deepin.dde.file-manager -r org.deepin.dde.file-manager.mount -k enableCifsMount -v false
第四步:保证 CIFS 环境完整可用(缺一不可)===========
1. 确认依赖安装
sudo apt install cifs-utils samba-client avahi-daemon
2. 保证域名解析服务正常(计算机名 qilin.local 必备)
nmbd 负责 NetBIOS 计算机名,avahi 负责.local mDNS,绝对不能关:
sudo systemctl enable --now nmbd avahi-daemon
# 不要mask这两个服务!和GVFS无关
3. 最终稳定 CIFS 挂载命令(全程计算机名、两端锁匹配根治报错)
推荐两端全关锁方案,全程只用/mnt/sbg访问,彻底绕开 GVFS。开机自动挂载 fstab(计算机名适配 DHCP)
sudo nano /etc/fstab
在最后写入(临时测试用,里边的参数和最终版不同):
//qilin.local/sbg /mnt/sbg cifs username=huanghe,password=密码,uid=1000,gid=1000,vers=3.0,tcp,timeo=20,retrans=2,cache=strict,ropidcache,actimeo=45,noserverino,nooplocks,hard,sec=ntlmv2,_netdev,x-systemd.after=network-online.target 0 0
解释:
_netdev:识别为网络盘,等 DHCP 拿到 IP 再挂载;
x-systemd.after=network-online.target:确保网络、域名解析就绪。
测试:sudo mount -a。
必须分清哪些服务不能动:nmbd、avahi-daemon、cifs内核模块、smbd(客户端不用开smbd,服务端必须开)
屏蔽锁定:gvfsd-smb、gvfsd-network、gvfsd-dnssd(仅这几个,不要全删 gvfs,否则 U 盘、手机挂载失灵)
八、常见疑问汇总
A、禁用 GVFS 后 CIFS 变慢吗?================
不会。CIFS 走内核,GVFS 是用户态两套完全独立,CIFS 性能不受 GVFS 任何影响。
Windows 访问 Samba 服务器受影响吗?完全无影响。Windows 依靠服务端 smbd/nmbd 走标准 SMB,和客户端统信的 GVFS 没有任何关联。
还能访问 FTP、U 盘、手机吗?可以。只屏蔽 SMB 相关 GVFS,FTP、移动硬盘、MTP 手机依赖的 gvfs 组件正常运行。
还会出现「对非套接字进行套接字操作」吗?只要两端锁统一关闭 + 无 GVFS 双重挂载,该报错基本彻底根除。li
B、cifs重启后访问故障修复========
nux使用CIFS共享,在文件管理器输入“/run/user/1000/gvfs/smbshare:server=qilin.local,share=sbg/”之后可以正常访问共享,但是重启后再次输入则报错:“无法创建目录:[Errno2]No such file or directory:”。从文件管理器中点击左侧挂载的共享,能够访问,然后问题消失。是否是因为cifs开机未启动?是的,如果avahi-daemon服务未启动,就启动cifs挂载,则导致cifs开机启动不成功,此时应按如下取消开机启动,而是等待avahi-daemon服务启动后再启动。方法如下:sudo nano /etc/fstab
在最后写入:
//qilin.local/sbg /mnt/sbg cifs username=huanghe,password=密码,uid=1000,gid=1000,noperm,vers=3.0,_netdev,noauto,x-systemd.automount,x-systemd.requires=avahi-daemon.service 0 0
#解释:
#在绝大多数 Linux 发行版(包括统信UOS、麒麟、Ubuntu、Deepin)中:第一个创建的用户,系统分配的 ID 号就是 1000。
#uid(User ID):代表用户身份。1000 通常就是你的登录用户名(比如你脚本里的 huanghe)。
#gid(Group ID):代表用户组身份。1000 通常是与你的用户名同名的私人组。
#第一个0 代表不备份。因为 /mnt/sbg 是一个远程网络文件夹,里面的数据本身就在服务器上,没有必要让系统本地备份工具去处理它。填 0 是最佳实践。
#第二个0是(磁盘检查顺序 / fsck)这个位置是给系统启动时的磁盘扫描工具 fsck(文件系统检查)用的。0 代表不对该分区进行磁盘检查。fsck 只能检查物理硬盘上的文件系统(如 ext4、xfs),而 cifs 是网络协$
C、IP方式访问存在问题。============
1、试试在客户端、服务端的设置、网络安全中心中关闭防火墙限制。
2、通常SAMBA包含smb(smbd) 核心服务和(nmbd)NetBIOS 名称服务。如只能通过IP实现文件共享,win客户端的打印机共享无法实现,请检查服务器端的nmbd是否被限制。
开启nmbd后win7可以通过服务器名qilin.local访问并添加打印机。
解释:
IP和计算机名两种方式共享的特点如下:
- 方法一:只靠 IP 访问共享,nmbd 可以关闭,仅保留 smbd 也能工作。
- 方法二:让 Windows “网上邻居” 能看到这台 Linux 主机;打开nmbd解析主机名 <->NetBIOS 名。