0. 背景
公司需要配置1个ArcGIS Server分布式集群,其中需要一个存放地图数据的共享目录,数据量大约在20T左右。于是,专门搞了台Dell服务器作为存储,挂载3T的SATA盘7块。原计划使用Win7作为存储机的操作系统,但分区后发现MBR格式的分区表,单分区最大为2.2T。百度之后发现使用GPT格式的分区表可以支持更大的单分区,但是需要以UEFI方式启动。可惜,服务器较老,不支持UEFI。好不容易使用RAID将众多磁盘转为了一块大磁盘,再分区RAID就毫无意义。于是将目光从Windows转向Linux。
此处使用的ArcGIS版本为ArcGIS 10.1
在ArcGIS时指定的地图根服务器目录和配置存储目录都使用了UNC路径。于是想当然的使用Linux部署NFS服务,并共享文件夹。路径为:
配置存储目录: \\192.168.2.160\home\server\gisData\arcgisserver\config-store
服务器根目录:\\192.168.2.160\home\server\gisData\arcgisserver\directories
结果,在创建站点过程中,出现如下情况:
config-store文件夹创建了,但directories文件夹并未创建,并提示
Another process is accessing the config-store,
如果在出现错误之后再次运行,则提示config-store already existed,应当删除后再试。删除之后,故障依旧。
1. 问题分析
在ESRI官网上检索该问题,没有太多实质性的收获。回到了ESRI官网上,找到了关于一个站点多主机配置的的说明。于是找到了蛛丝马迹。如下:
A. 官网上的描述中总是有种假定在Windows平台下的味道
B. 官网描述中从来没有找到非Windows平台下的蛛丝马迹
毕竟Windows和Linux是有区别的,由此推断官方有可能也仅是在Windows平台上验证通过的。反过来想,这玩意本身就是.NET开发的。
2. 调整思路
及时使用Linux服务器作为存储,那么对外提供存储的路径也一定要和Windows下的UNC路径一致。那么windows下的UNC路径和NFS路径有什么区别和关系呢?联想到之前,同事在Windows共享文件夹下面是部署成功了的。那问题就转换成了Windows共享文件夹路径与NFS路径的区别。继续百度,Windows共享协议使用的是smb,跟NFS还是完全两码事。可见无知是多么可怕。既然之前使用Windows共享协议是成功的,还是老老实实的用SMB。接下来就是在CentOS上配置Samba的事情了。
此处的CentOS版本为CentOS 7
3. 开始解决
yum install -y samba-common samba-client samba // 安装sambavi /etc/samba/smb.conf // 建议在配置之前先复制一下原始的 smb.conf文件,以免配置错误导致smb服务无法启动时,尴尬。其中配置内容如下:-------------------------Global-------------------------
workgroup = WORKGROUP // 个人担心Windows共享发现中不能识别,所以修改,是否必须并未验证
-------------------------Standalone Server Option-------------------------
security = user // 由于此处为新版本 security = share将导致服务无法启动
map to guest = Bad Password
passdb backend = tdbsam
。。。。
# A publicly accessible directory that is read only, except for users in the...
[public]
comment = Public Stuff
path = /home/nobody
#path = /gisData
guest account = guest
public = yes
browseable = yes
guest ok = yes
writable = yes
; printable = no
; write list = +staff
:wq 保存,其中访问路径为\public,权限也是public即支持匿名访问。
id nobody // 查看在当前系统中nobody用户的标示,如属于哪个用户组mkdir /home/nobody //创建文件夹,不建议太深,因为这一路的文件夹的权限可能会阻碍我们走向成功;但是注意,创建的文件夹一定在大磁盘的分区下面。如果使用CentOS自动分区,/home所在的分区最大。chown nobody:nobody /home/nobody // 修改该文件夹所有者为nobody,这样就可以匿名访问了systemctl restart smb //重启Smb服务Win7 旗舰版下试验,\\192.168.2.160\public。
继续试验,在Win7的网络中,找到了192.168.2.160这么个节点,也能看到public共享文件夹,但是双击,依然提示无法访问。想到了常见的两个问题。SELinux和防火墙。systemctl stop firewalld // CentOS6时代使用service iptables stopsetenforce 0 //临时禁用SElinux,重启后失效。永久禁用需要编辑 /etc/selinux/config SELINUX = disabled在Win7下终于顺利挂载成功继续新建站点配置路径为 \\192.168.2.160\public\arcigsserver\config-store,\\192.168.2.160\public\arcigsserver\directories成功搞定新站点发布出人意料的是Windows要求输入用户名和密码,一阵百度之后的结果是,Windows默认的设置导致。修改步骤如下:
单击[开始]——[运行] 输入“secpol.msc”打开管理工具,展开“本地策略”;
然后,单击“安全选项”。 双击“网络安全:LAN Manager 身份验证级别”;
最后,单击列表中:发送LM和NTLMv2,如果已协商,则使用NTLMv2协议。,然后退出
4. 后记
在部署之前,我甚至还考虑过是不是NFS的连接数被用完了。于是各种百度寻找问题答案,没有找到。从中学习到了几个方面,软件是非常严谨的玩意,就像计算机一样仅有YES,NO两个选项。在这个行当中存在很多,非常相似的东西,但是不能耍小聪明,想当然的认为双方可以互相替代,实践是检验真理的唯一标准。工作经验越多越是容易犯这么个错误。反过来讲,如果在写说明产品手册的时候,更严谨一些。将节约更多时间,这样大家可以花更多时间在更有意义的事情上面。
今天解决了这么个小事情,略有成就,分享给需要的小伙伴!
如果觉得《基于Samba实现在Windows下访问Linux共享文件夹》对你有帮助,请点赞、收藏,并留下你的观点哦!