no bady:NFS文档共享服务搭建与挂载,及java调用 2024-04-24 20:39:49 0 0 NFS文档共享服务搭建与挂载,及java调用 1、安装nfsyum install nfs* 2、安装rpcyum install rpc* 3、创建共享文件夹mkdir /usr/share/fengsheng 4、创建一个文件echo "Youtube -FengSheng" > /usr/share/fengsheng/demon.txt 5、查看文件内容cat /usr/share/fengsheng/demon.txt 6、设置共享目录所有者为nfsnobadychown nfsnobady /usr/share/fengsheng/ 7、编辑挂载文件vim /etc/exports 文件内容为:/usr/share/fengsheng 172.20.10.0/24(rw,sync,root_squash,insecure) 其中,/usr/share/fengsheng为共享目录。 172.20.10.0/24 为客户端,即访问共享服务的ip,0/24的写法,表示172.20.10网段均可访问。 (rw,sync,root_squash,insecure)为权限。其中insecure控制客户端接口,如果未设置,可能导致客户端无法获取共享服务连接。 注释:权限相关参数 ro:共享目录只读; rw:共享目录可读可写; all_squash:所有访问用户都映射为匿名用户或用户组; no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组; root_squash(默认):将来访的root用户映射为匿名用户或用户组; no_root_squash:来访的root用户保持root帐号权限; anonuid=:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534); anongid=:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534); secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器; insecure:允许客户端从大于1024的tcp/ip端口连接服务器; sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性; async:将数据先保存在内存缓冲区中,必要时才写入磁盘; wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率; no_wdelay:若有写操作则立即执行,应与sync配合使用; subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限; no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率; 8、生效配置参数exportfs -r 9、查看配置参数exportfs -v 注释:exportfs用法 -a* :全部mount或者unmount /etc/exports中的内容* -r* :重新mount /etc/exports中分享出来的目录* -u* :umount 目录* -v* :将详细的信息输出到屏幕上 10、启动nfs服务systemctl restart nfs 11、设置开机启动项systemctl enable nfs 12、查看nfs服务状态systemctl status nfs 13、如果防火墙开启,则设置防火墙(步骤13至17)firewall-cmd --permanent --add-service=nfsshowmount -e unknown keyword "rw.sync.root_squash" 由于nfs服务需要开启 mountd,nfs,nlockmgr,portmapper,rquotad这5个服务,需要将这5个服务的端口加到iptables里面* 而nfs* 和 portmapper两个服务是固定端口的,nfs为2049,portmapper为111。其他的3个服务是用的随机端口,那就需要* 先把这3个服务的端口设置成固定的。 14、查看当前这5个服务的端口并记录下来 用*rpcinfo -p\#rpcinfo -p 这里显示 nfs 2049, portmapper 111, 将剩下的三个服务的端口随便选择一个记录下来* mountd 976 rquotad 966 nlockmgr 33993 15*、*将这3个服务的端口设置为固定端口vim /etc/services 在文件的最后一行添加: mountd 976/tcp mountd 976/udp rquotad 966/tcp rquotad 966/udp nlockmgr 33993/tcp nlockmgr 33993/udp 保存并退出。 16、重启下nfs服务。service nfs restart 17、在防火墙中开放这5个端口 编辑iptables配置文件vim /etc/sysconfig/iptables 添加如下行: -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 976 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 966 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 33993 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p udp --dport 976 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p udp --dport 2049 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p udp --dport 966 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -p udp --dport 33993 -j ACCEPT 保存退出并重启iptables* 18、linux客户端挂载nfsmount -t nfs 192.168.0.10:/sharedisk /sharedisk 19、windows10客户端挂载nfs 打开控制面板 > 程序 > 启用或关闭 Windows 功能,找到NFS服务打开子目录勾选NFS客户端与管理工具。 NFS客户端:通过界面操作挂在NFS 打开我的电脑点击此电脑 > 映射网络驱动器 如果连接成功你会发现在此电脑多了一个网络盘符 下来就可以打开查看文件了 20、增加读写权限 需要读写权限的需要修改注册表 通过修改注册表将windows访问NFS时的UID和GID改成0即可,步骤如下 1、在运行中输入regedit,打开注册表编辑器; 2、进入HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default条目; 3、选择新建----QWORD值,新建AnonymousUid,AnonymousGid两个值,值为0; 4、重启电脑 注册表才会生效; 右键查看属性发现读写权限跟隐藏文件都打开了 21、卸载umount 盘符 例如:umount V: 如果要卸载全部的NFS挂载:umount -f -a 22、引入包文件<dependency><groupId>com.emc.ecs</groupId><artifactId>nfs-client</artifactId><version>1.0.3</version></dependency> 23、java连接nfs服务器上传,下载文件package com.svw.ematrix.center.document.manager.util;import com.emc.ecs.nfsclient.nfs.NfsCreateMode;import com.emc.ecs.nfsclient.nfs.NfsSetAttributes;import com.emc.ecs.nfsclient.nfs.io.Nfs3File;import com.emc.ecs.nfsclient.nfs.io.NfsFileInputStream;import com.emc.ecs.nfsclient.nfs.io.NfsFileOutputStream;import com.emc.ecs.nfsclient.nfs.nfs3.Nfs3;import com.emc.ecs.nfsclient.rpc.CredentialUnix;import java.io.*;import java.util.logging.Level;import java.util.logging.Logger;/** * @作者 saw * @版本 V1.0 * @描述 NFS工具类 */public class NfsUtil { private static final String NFS_IP = "172.20.30.61"; private static final String NFS_DIR = "/usr/share/fengsheng"; /** * 上传文件到NFS服务器 * @param path NFS 存储的相对路径 * @param fileName 文件名称包括文件后缀 * @param content 文件二进制内容 * @return */ public static boolean upload(String path, String fileName, byte []content){ NfsFileOutputStream outputStream = null; InputStream inputStream = null; NfsSetAttributes nfsSetAttr = new NfsSetAttributes(); nfsSetAttr.setMode((long) (0x00100 + 0x00080 + 0x00040 + 0x00020 + 0x00010 + 0x00008 + 0x00004 + 0x00002)); try {// 注意,此处uid和gid需设置成0,代表root用户,如未设置成0,则可能没有对共享目录的读写权限 Nfs3 nfs3 = new Nfs3(NFS_IP, NFS_DIR, new CredentialUnix(0, 0, null), 3); String paths[] = path.substring(1).split("/");//去掉第一个/之后进行分割处理 StringBuilder p = new StringBuilder(); //首先判断目录是否存在,如果不存在则进行创建目录 for(String s:paths){ p.append("/").append(s); Nfs3File filePath = new Nfs3File(nfs3, p.toString()); if (!filePath.exists()) { filePath.mkdir(nfsSetAttr); } } //创建文件 Nfs3File desFile = new Nfs3File(nfs3, path+"/"+fileName); desFile.create(NfsCreateMode.GUARDED, nfsSetAttr, null); outputStream = new NfsFileOutputStream(desFile); outputStream.write(content); return true; } catch (IOException ex) { Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex); } finally{ if(null!=outputStream){ try { outputStream.close(); } catch (IOException ex) { Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex); } } } return false; } /** * 文件下载 * @param filePath NFS上面的文件路径信息 * @return */ public static byte[] download(String filePath){ ByteArrayOutputStream bos = null; NfsFileInputStream inputStream = null; BufferedInputStream bis = null; try { Nfs3 nfs3 = new Nfs3(NFS_IP, NFS_DIR, new CredentialUnix(0, 0, null), 3); Nfs3File file = new Nfs3File(nfs3, filePath); inputStream = new NfsFileInputStream(file); bis = new BufferedInputStream(inputStream); bos = new ByteArrayOutputStream(); int date = -1; while ((date = bis.read()) != -1) { bos.write(date); } return bos.toByteArray(); } catch (IOException ex) { Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex); } finally{ if(null!=bos){ try { bos.close(); } catch (IOException ex) { Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex); } } if(null!=bis){ try { bis.close(); } catch (IOException ex) { Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex); } } if(null!=inputStream){ try { inputStream.close(); } catch (IOException ex) { Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex); } } } return null; }} 收藏(0)