|
心情崩溃长达1周,论坛求助、**远程技术服务均未能解决 ,后来自己摸索解决了 ,过程如下:
之前的BUG反馈帖:https://club.fnnas.com/forum.php ... mp;page=1#pid107164
之前的求助帖:https://club.fnnas.com/forum.php ... mp;page=1#pid106844
局域网中有2台飞牛NAS,故障飞牛的网络名称是fnos210,正常飞牛是fnos220。
一、故障排查
1.现象一,无法访问共享文件
故障飞牛:用windows客户端访问smb时,输入账号密码后,出现了错误代码0x80070035,“找不到网络路径”
正常飞牛:用windows客户端访问smb能正常显示出共享文件夹列表
2.现象二,根据日志查原因
故障飞牛:samba的log表明rpcd_classic模块无法解析符号get_current_unixname。
- <div><b>admin@fnos210:</b>~$ tail -n 20 /var/log/samba/log.
- /usr/libexec/samba/rpcd_classic: symbol lookup error: /usr/libexec/samba/rpcd_classic: undefined symbol: get_current_unixname, version SMBCONF_0.0.1</div>
复制代码
正常飞牛:log中无此错误
3.现象三,进一步分析原因
故障飞牛:libsmbconf.so 中不存在 get_current_unixname 符号,可能是文件损坏?
正常飞牛:libsmbconf.so 中有 get_current_unixname 符号
- <div><b>admin@fnos220:</b>/$ nm -D /lib/x86_64-linux-gnu/libsmbconf.so.0 | grep get_current_unixname
- 000000000005a670 T <font color="#8b0000">get_current_unixname</font>@@SMBCONF_0.0.1</div>
复制代码
4.现象四,samba版本相同
二台飞牛运行 dpkg -l | grep samba 的结果相同,因此二台飞牛的库文件可能兼容
猜测解决方法:尝试替换文件,把正常飞牛的库文件拷到故障飞牛中
二、故障解决
<在正常飞牛中操作:>
1.创建备份脚本
- sudo nano /tmp/backup_libs_fnos220.sh
复制代码
- <div>#!/bin/bash
- # 定义备份目录
- BACKUP_DIR="/tmp/backup_libs_fnos220"
- mkdir -p "$BACKUP_DIR"
- # 关键动态库文件列表
- LIBS=(
- "/lib/x86_64-linux-gnu/libsmbconf.so.0"
- "/usr/libexec/samba/rpcd_classic"
- )
- # 备份文件
- for LIB in "${LIBS[@]}"; do
- if [ -f "$LIB" ]; then
- cp "$LIB" "$BACKUP_DIR/"
- echo "Backup: $LIB -> $BACKUP_DIR/"
- else
- echo "File not found: $LIB"
- fi
- done
- echo "Backup completed. Files are stored in: $BACKUP_DIR"</div>
复制代码
2.运行备份脚本
- sudo bash /tmp/backup_libs_fnos220.sh
复制代码
3.将备份的文件远程复制到故障飞牛的/tmp中:
- rsync -avz -e "ssh -p 22" /tmp/backup_libs_fnos220 admin@192.168.10.210:/tmp/
复制代码
<到故障飞牛中操作:>
4.在目标服务器中备份旧文件,再用拷过来的新文件替换:
- sudo nano /tmp/restore_libs_fnos210.sh
复制代码
- <div>#!/bin/bash
- # 定义备份目录和恢复目录
- RESTORE_DIR="/tmp/backup_libs_fnos220"
- BACKUP_DIR="/tmp/backup_original_fnos210"
- mkdir -p "$BACKUP_DIR"
- # 关键动态库文件列表
- LIBS=(
- "/lib/x86_64-linux-gnu/libsmbconf.so.0"
- "/usr/libexec/samba/rpcd_classic"
- )
- # 恢复文件
- for LIB in "${LIBS[@]}"; do
- if [ -f "$LIB" ]; then
- # 备份原始文件
- cp "$LIB" "$BACKUP_DIR/"
- echo "Backup original: $LIB -> $BACKUP_DIR/"
- fi
- # 恢复备份文件
- if [ -f "$RESTORE_DIR/$(basename "$LIB")" ]; then
- cp "$RESTORE_DIR/$(basename "$LIB")" "$LIB"
- chmod --reference="$LIB" "$LIB" # 确保权限一致
- echo "Restored: $RESTORE_DIR/$(basename "$LIB") -> $LIB"
- else
- echo "Restore file not found: $RESTORE_DIR/$(basename "$LIB")"
- fi
- done
- echo "Restore completed. Original files are backed up in: $BACKUP_DIR"</div>
复制代码
5.运行替换脚本(建议先在web界面关闭smb服务)
- sudo bash /tmp/restore_libs_fnos210.sh
复制代码
6.故障得到解决,libsmbconf.so 中出现了 get_current_unixname 符号,共享文件也能正常访问了
|
|