您的位置:首页 > 其它

苦战samba乱码『看我出招系列』

2007-01-09 13:19 246 查看
[align=right]作者:田逸(sery@163.com)
※版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。[/align]
[align=left]
一台运行Redhat 7.3的服务器由于机器使用时间过久而出现硬盘故障,具体的表现是系统运行一段时间后就挂起了;经诊断是磁盘出现坏道所致。于是通知用户尽可能的备份数据,然后申请一个新的硬盘,打算把数据复制到新的系统。在做这个事情之前,我试着在单用户下运行fsck检查文件系统,但没有成功,看来只得用新的系统来挂接有故障的硬盘,然后再复制目录和文件。作者:田逸 [出处:51cto博客

[/align]
在硬盘上我用RedHat AS 4替代以前的RedHat linux 7,安装完成后以源码方式安装了Samba软件,操作步骤如下:

请输入内容
1、下载文件 [root@localhost ~]# wget http://us5.samba.org/samba/ftp/samba-3.0.23d.tar.gz
2、在当前目录解压文件 [root@localhost ~]# tar zxvf samba-3.0.23d.tar.gz; cd samba-3.0.23d/source
3、配置、编译及安装 [root@localhost ~]# ./configure –prefix=/usr/local/samba //指定安装目录为/usr/local/samba
[root@localhost ~]#make;make install
4、拷贝samba的配置文件 [root@localhost ~]# cd ..; cd examples; cp smb.conf.default /usr/local/samba/lib/smb.conf.
5、修改配置文件/usr/local/samba/lib/smb.conf。根据自己的需求修改,一般而言,默认的情况都能满足要求。如果做过修改,修改完成后,运行testperm /usr/local/samba/lib/smb.conf检查一下配置文件是否正确。如果正确无误将出现类似后面的输出:Loaded services file OK.
6、添加samba用户。因为samba用户需是系统用户,因此在添加samba用户时需要检查添加的用户是否属于系统用户。再执行命令 /usr/local/samba/bin/smbpasswd -a <username> 输入2次同样的密码就能成功添加samba用户。顺便说明一下,很多初学者会忽略添加samba用户这个过程,从而导致他不能从windows客户端正常登陆。7、启用samba服务。/usr/local/samba/sbin/nmbd 及 /usr/local/samba/sbin/smbd
作者:田逸 [出处:51cto博客
正确运行后,我把损坏的硬盘挂接到目录/mnt/hdd5下,然后按照以前的目录布局把相关的目录及文件复制到相关的位置,并给其相应的权限。做完后告诉用户(就是同事)让他们去恢复和使用samba。一会儿用户反应samba的目录和文件出现中文乱码的情况,换机器试也如此,其状态如下图所示:



作者:田逸

尝试着修改配置文件,手动加上代码页的语言为zh_CN,重新启动samba服务,在windows的客户端还是乱码,再换成其他编码,还是不行,后来又把samba删除换成更新的版本和换成低的版本,也是不行,客户催得很急,心里很是紧张。
作者:田逸
不经意中,发现用ssh的客户端软件securecrt能正常显示中文,连samba的用户目录里的中文名文件和目录都能正常显示,我想:能不能用ssh这样的客户端工具来实现一个转换呢?试一试吧!于是我拿出SSH Secure File Transfer Client这个工具连接linux 服务器,察看linux服务器这端的文件和目录,发现除了samba用户目录的中文乱码外,其他目录的中文名称则能正常显示,接着在linux的samba用户目录建一个中文名的目录,再从网上邻居访问samba发现中文名称显示正常。再试着在linux下用cp拷贝挂接分区的文件到samba用户目录,从windows的网上邻居访问windows还是乱码,但把那些乱码的中文名目录或文件通过SSH Secure File Transfer Client拷贝到windows目录却没有乱码,再把这些目录/文件拷回通过SSH Secure File Transfer Client拷贝samba用户目录则正常。于是得到这样的解决办法:在windows上通过 SSH Secure File Transfer Client把linux上挂接目录的文件拷贝到windows的目录,然后再把这些目录/文件拷贝回linux的samba用户目录即可。
作者:田逸 http://sery.blog.51cto.com
照上面的办法测试了几个小文件,发现此法可行。但有这样一个问题—需要拷贝的目录大小是数十GB,要来回倒腾可能需要很长的时间,而且我的windows硬盘的空间还没有这么多的空间来存储这些中转数据,看来还得使用一点技巧。

我的操作是这样的:先用windows网上邻居访问samba服务器,把samba目录映射成windows的网络驱动器(如下图所示):



[align=left] [/align]

然后使用SSH Secure File Transfer Client把linux挂接目录的数据拷贝到windows的网络驱动器下(这实际上是在linux服务器上进行数据拷贝)。过程如下图所示:



花了很长一段时间,终于把这数据复制完毕,用windows的网上邻居访问samba,中文目录和中文文件名显示正常;用VSS客户端访问samba,一切正常。

造成乱码的原因是由于不同版本的linux的字符编码不同造成的(因为原来的系统进不去了,其编码不能再找到),通过windows中转一下就一致了。

注:运行命令 export LANG=zh_CN 把language临时设置成zh_CN.
[align=right] ※版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。[/align]
[align=right] 2007-1-6 于福缘门[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: