昨晚躺床上用手机看树莓派里面下载的电影,发现samba竟然连接不上了,用了正好30天了,一直都没问题,怎么会突然连接不上,还以为是树莓派重启了?samba服务没启动?
连接ssh看一下,系统正常,ps了一下,smbd服务没在,命令行启动samba,报错:
Job for smbd.service failed because the control process exited with error code.See "systemctl status smbd.service" and "journalctl -xe" for details.
真是百思不得其解,哪都没动过,怎么会出现这样的问题?按提示操作:
systemctl status smbd.service
无用部分省略Jan 07 20:08:43 blog.dngz.net systemd[1]: Starting Samba SMB Daemon...Jan 07 20:08:43 blog.dngz.net smbd[26617]: /usr/sbin/smbd: error while loading shared libraries: /usr/lib/aarch64-linux-gnu/samba/libgensec.so.0: invalid ELF headerJan 07 20:08:43 blog.dngz.net systemd[1]: smbd.service: Main process exited, code=exited, status=127/n/aJan 07 20:08:43 blog.dngz.net systemd[1]: smbd.service: Failed with result 'exit-code'.Jan 07 20:08:43 blog.dngz.net systemd[1]: Failed to start Samba SMB Daemon.
命令行执行:
testparm
也是一样的报错:
testparm: error while loading shared libraries: /usr/lib/aarch64-linux-gnu/samba/libgensec.so.0: invalid ELF header
执行 journalctl -xe 或 journalctl -b | grep smbd 也看到类似的错误提示。
libgensec.so.0: invalid ELF header
提示很明显 /usr/lib/aarch64-linux-gnu/samba/libgensec.so.0 这个文件损坏
用命令看一下
file /usr/lib/aarch64-linux-gnu/samba/libgensec.so.0
返回:
/usr/lib/aarch64-linux-gnu/samba/libgensec.so.0: data
这不是正常的linux可执行文件该返回的结果。
看了一下libgensec.so.0的修改时间是没问题的。我就不明白了,好好的文件怎么就会损坏?难道是tf卡质量不好,自动坏掉的?
没办法,只能重装了,备份一下samba配置文件开始搞。
卸载samba,重装samba
sudo apt-get remove samba 卸载是没用的,libgensec.so.0文件还是在那里,也就是卸载得不干净,sudo apt-get remove --purge samba 也没用。
samba正确的卸载方式
需要执行两个命令:
sudo apt-get remove samba sudo apt autoremove
重新安装samba
sudo apt-get updatesudo apt-get install -y samba#sudo apt-get install samba samba-common-bin #备选
如果安装的时候出现选配置文件的提示界面:
Samba server and utilitiessmb.conf: A new version (/run/samba/upgrades/smb.conf) of configuration file /data/conf/samba/smb.conf is available, but the version installed currently has been locally modified.What do you want to do about modified configuration file smb.conf?install the package maintainer's versionkeep the local version currently installedshow the differences between the versionsshow a side-by-side difference between the versionsstart a new shell to examine the situation
选择第二项 keep the local version currently installed,再确定即可,这样可以使用自己原来的samba配置文件。
安装完成,再次查看验证一下:
file /usr/lib/aarch64-linux-gnu/samba/libgensec.so.0
返回:
/usr/lib/aarch64-linux-gnu/samba/libgensec.so.0: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=d7bdd19e136455e3fb8edb607cb0a203f0a22288, stripped
正常的!
执行:
samba --version
显示:Version 4.9.5-Debian,正常。
ps一下发现服务已经自动启动起来了:
ps x|grep smb
30999 ? Ss 0:00 /usr/sbin/smbd --foreground --no-process-group
31001 ? S 0:00 /usr/sbin/smbd --foreground --no-process-group
31002 ? S 0:00 /usr/sbin/smbd --foreground --no-process-group
31004 ? S 0:00 /usr/sbin/smbd --foreground --no-process-group
31248 ? S 0:00 /usr/sbin/smbd --foreground --no-process-group
在电脑上直接连接原先配置好的共享目录,很顺利的打开了,搞定。
查看了一下被损坏的/usr/lib/aarch64-linux-gnu/samba/libgensec.so.0 文件和重新安装后的该文件,文件大小都是186440字节,经过16进制比较了一下,内容确实不一样,两者文件前面17%的内容差异很大,后面的83%内容完全一样,真不知道怎么损坏的。