收起左侧

【分析&修复】Smb & 备份 异常的故障分析和修复

0
回复
94
查看
[ 复制链接 ]

0

主题

1

回帖

0

牛值

江湖小虾

修复Samba

前言

smile 本文是对 飞牛smb和备份服务异常的技术性分析和修复,和这篇 【修复】[docker]及[smb]&[备份]异常的修复指南 文章有异曲同工之处,均可参考。本文更偏向于技术分析和修复,更适合开发者参考。 smile

原文地址: https://gitee.com/kuma_fixfnos/fix-samba

本文提供的资源都在 原文地址 里,请 【克隆/下载】=> 【下载zip】。一切更新以上面的 原文地址 为准。

需要权限为root,请SSH登录飞牛并切换为root。

提供的脚本代码清晰,修复所需的额外下载资源来源可靠,这些均可自行审#查。

本文的一切操作,都是本人亲自实践检验可行的,如果你使用了还是无法解决问题,那可能是你所遇到的情况超出本文的范围了,请回复反馈。

smile smile 另外有 【修复 飞牛 NTFS 驱动】,这个不再单独发帖了,基本上是安装应用商店的ntfs驱动。但作者的这个只采用了默认的apt源,导致国内下载缓慢,安装缓慢容易失败。我的方案是魔改这个应用,希望作者能更新。

简介

修复飞牛smb服务。

问题列表

1、smb启动失败

飞牛系统更新后,smb无法启动,经排查,journalctl -xeu smbd.service 包含如下

smbd.service: Failed at step EXEC spawning /usr/sbin/smbd: No such file or directory

可以确定,是包损坏或未安装,需要重新安装相关包。

重装时,建议备份Samba相关数据。详见 install_samba.sh

要下载哪些包,详见 download_samba.sh

2、smb修复后,客户端访问异常

smb修复后,能启动,但客户端变为无法访问,之前是能正常访问的,现在修改密码也无法访问。

客户端输入用户名密码后,显示 网络名不存在等等。

飞牛中日志表现为,大量类似

pam_unix(samba:session): session closed for user admin

经排查,/var/log/samba/log.<ClientHostName> 中 包含如下

/usr/lib/x86_64-linux-gnu/samba/vfs/trim_perms.so: cannot open shared object file: No such file or directory

此文件不存在。可从iso中提取,位于 <ISO挂载盘符>:\trimfs.tgz\trimfs.tar\usr\lib\x86_64-linux-gnu\samba\vfs\trim_perms.so,放置到指定路径后,客户端可正常访问smb资源。

3、飞牛备份服务异常

飞牛备份服务异常,表现为 加载失败...

飞牛备份服务用到的是smb客户端(libsmbclient),可重装此包来解决问题。

下载地址: ftp.cn.debian.org (Ctrl+F: libsmbclient)

mkdir -p /tmp/libsmbclient_u3_amd64
curl -L -o /tmp/libsmbclient_u3_amd64/libsmbclient_4.17.12+dfsg-0+deb12u3_amd64.deb \
     http://ftp.cn.debian.org/debian/pool/main/s/samba/libsmbclient_4.17.12+dfsg-0+deb12u3_amd64.deb
cd /tmp/libsmbclient_u3_amd64 && dpkg -i --force-depends *.deb
   
# 或如下u2版本
mkdir -p /tmp/libsmbclient_u2_amd64
curl -L -o /tmp/libsmbclient_u2_amd64/libsmbclient_4.17.12+dfsg-0+deb12u2_amd64.deb \
     http://ftp.cn.debian.org/debian/pool/main/s/samba/libsmbclient_4.17.12+dfsg-0+deb12u2_amd64.deb
cd /tmp/libsmbclient_u3_amd64 && dpkg -i --force-depends *.deb

下载符合自己硬件的包,安装即可。

dpkg -i --force-depends libsmbclient_4.17.12+dfsg-0+deb12u3_amd64.deb

详见 download_samba.shinstall_samba.sh

4、优化smb配置(可选)

smb.conf中,默认是包含如下配置

include = /etc/samba/users/%Y.share.conf

%Y,年份。但实际路径下是用户ID(UID),如 1000.share.conf。这将导致 include无法加载到需要的文件,表现为网络共享中看不到任何共享的文件资源。

1000.share.conf 此类配置文件,在飞牛客户端中的配置路径为

文件共享协议  -> SMB  -> 可见文件夹范围(我的文件、他人共享)

目前测试,仅 我的文件、他人共享的配置数据保存在此,其它配置数据保存位置不清楚。

Samba中也没有提供直接的UID变量,可修改为 %U,然后根据 1000.share.conf这样的数字UID来创建对应用户名的软链接。
即,/etc/samba/users/用户名.share.conf -> /etc/samba/users/UID.share.conf
因为当前,飞牛官方仍是采用UID来命名文件的。详见 create_samba_share_links.shupdate_samba_smbConf.sh

经测试,%U 实际值为小写,符合系统用户名。可能是Samba当前版本bug吧,暂时采用大写U。

Samba常用变量分类

  1. 用户和连接相关变量
    • %U - 当前连接用户的用户名(大写)
    • %u - 当前连接用户的用户名(小写)
    • %G - 当前连接用户的主组名
    • %g - 当前连接用户的主组名(小写)
    • %H - 用户的home目录
    • %m - 客户端NetBIOS名称
    • %M - 客户端DNS名称
    • %I - 客户端IP地址
    • %a - 客户端架构(如Samba、Windows等)
  2. 服务器相关变量
    • %h - 服务器主机名
    • %L - 服务器NetBIOS名称
    • %N - NIS服务器名
    • %v - Samba版本
  3. 时间和日期变量
    • %T - 当前日期和时间
    • %d - 当前日期
    • %t - 当前时间
    • %D - 当前域
    • %w - 当前周
  4. 共享和文件相关变量
    • %P - 当前共享的根目录
    • %p - 当前共享的根目录(小写)
    • %S - 当前共享名
    • %s - 当前共享名(小写)

资源

当前提供的脚本等资源有:

  • init.sh : 初始化。主要是给其它脚本添加执行权限。
  • download_samba.sh : 下载Samba相关安装包(Deb)。
  • install_samba.sh : 安装Samba包(Deb)。
  • create_samba_share_links.sh : 为Samba用户配置文件创建软链接。
  • update_samba_smbConf.sh : 更新smb.conf。
  • trim_perms\trim_perms.so : 补丁资源,提取自ISO。

使用

init.sh : 初始化。主要是给其它脚本添加执行权限。

# 给脚本添加执行权限: chmod +x init.sh
# 运行脚本: ./init.sh

download_samba.sh : 下载Samba相关安装包(Deb)。

# 功能: 下载Samba相关包

# 给脚本添加执行权限:chmod +x download_samba.sh
# 运行脚本:./download_samba.sh [arg1,2,3,4]
#           arg1, 版本(4.17.12...)
#           arg2, 架构(amd64|i386|arm64|mips64el|ppc64el|s390x)
#           arg3, 标签(deb12u3|deb12u2)
#           arg4, URL(http://ftp.cn.debian.org)

下载包有,类似如下

samba_4.17.12+dfsg-0+deb12u3_amd64.deb
samba-common_4.17.12+dfsg-0+deb12u3_all.deb
samba-common-bin_4.17.12+dfsg-0+deb12u3_amd64.deb
samba-dsdb-modules_4.17.12+dfsg-0+deb12u3_amd64.deb
samba-libs_4.17.12+dfsg-0+deb12u3_amd64.deb
samba-vfs-modules_4.17.12+dfsg-0+deb12u3_amd64.deb
libsmbclient_4.17.12+dfsg-0+deb12u3_amd64.deb

默认从 ftp.cn.debian.org 下载,并打包到当前脚本下。

Samba包

  • samb - Samba主包,包含smbd服务守护进程
  • samba-common-bi - Samba通用二进制文件,包含smbd、nmbd等核心服务
  • samba-commo - Samba通用配置文件和脚本
  • samba-lib - Samba库文件,提供基础库支持
  • samba-vfs-module - 虚拟文件系统模块,提供额外的VFS功能
  • samba-dsdb-module - 目录服务数据库模块,用于域控制器功能

install_samba.sh : 安装Samba包(Deb)。

# 功能: 安装Samba相关包

# 给脚本添加执行权限:chmod +x install_samba.sh
# 运行脚本:./install_samba.sh [arg1,2]
#           arg1, 版本(4.17.12...)
#           arg2, 架构(amd64|i386|arm64|mips64el|ppc64el|s390x)
#           arg3, 标签(deb12u3|deb12u2)

根据 download_samba.sh 脚本打包的文件,进行安装。当前脚本目录下需要存在相应的tar文件。

请根据自己的硬件安装对应的包。

该脚本将备份/etc/samba/目录,备份/var/lib/samba目录。

Samba安装成功后,首次启动测试,启动成功后才进行配置恢复,然后重启服务,并清理备份的相关资源,部分资源保留,供用户选择是否清理。

create_samba_share_links.sh : 为Samba用户配置文件创建软链接。

# 功能: 为Samba用户配置文件创建软链接

# 给脚本添加执行权限: chmod +x create_samba_share_links.sh
# 运行脚本: ./create_samba_share_links.sh

查找所有 /etc/samba/users/*.share.conf文件并创建软链接,可在新建用户后再次运行,以便为新用户创建相关文件。

update_samba_smbConf.sh : 更新smb.conf。

# 功能: 更新smb.conf

# 给脚本添加执行权限: chmod +x update_samba_smbConf.sh
# 运行脚本: ./update_samba_smbConf.sh

该脚本只需运行1次。主要用于修改smb.conf中的include语句,使用sed替换%Y为%U。

trim_perms\trim_perms.so : 补丁资源,提取自ISO。

此补丁在 install_samba.sh 中会自动检测并安装,如果系统中不存在的话。

目前只检测 "/usr/lib/x86_64-linux-gnu/samba/vfs/" ,其它硬件可能不适用,将不会被安装。

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则