快速代码

  1. # nfs的Server配置文件和配置方法
  2. echo '/newnfs 192.168.3.*rw,sync,no_root_squash)' >> /etc/exports
  3. # 根目录新建文件夹,权限777
  4. mkdir /newnfs && chmod 777 /newnfs
    # 重新启动rpcbind和nfs-server服务
  5. systemctl restart rpcbind && systemctl restart nfs-server
  6.  
  7. # nfs的Client
  8. # 查看Sever信息
  9. showmount -e 192.168.2.197
    # 挂载
  10. mkdir /newnfs
  11. mount -t nfs 192.168.2.197:/newnfs /newnfs

文件传输系列

传输文件的方法有很多,比如ssh自带的sftp,vsftp的ftp,samba提供的.
  • openssh
    • sftp:22/tcp
    • sftp是基于ssh实现的,所以启动了sshd后自带sftp,不需要其他额外的配置就可以使用
  • vsftp
    • ftp:20,21/tpc
    • ftp是最"传统"的文件传输协议了,不过报文不加密,抓包就直接可以看到在头部的账号密码,不安全
  • samba
    • smb:139/udp和445/tcp
    • smb是微软创造的协议,目前基础在Windows系统和Linux系统之间传输文件使用
  • webdav
    • http:?/tcp
    • webdav是我最喜欢的传输方式了,如果只需要下载文件,甚至不需要额外的下载软件客户端,只要在web上打开,同时也支持https
  • nfs-utils
    • nfs:2049/tcp和rpc:111/tcp
    • 在多台Linux之间传输文件,nfs无非是最佳的选择,nfs可以将其他Linux主机的文件挂载在本Linux,就想管理本地文件一样的方便

NFS

  • 今天来学习一下NFS

NFS概述

这里的概述引用了大佬文章:NFS服务详解
  • NFS(Network File System)是一种基于TCP/IP传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源
  • NAS存储: NFS服务的实现依赖于RPC (Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。
  • NFS需要两个程序包
    • nfs-utils:负责文件传输的主程序
    • rpcbind:可以将RPC程序号码和通用地址互相转换,负责信息传输的
  • 二者互有分工,要先启动rpcbind后才可启动nfs.

NFS安装

  1. # 可以先查询一下本机是否有安装了nfs
  2. # rpm系列Linux
  3. rpm -aq | grep nfs
  4.  
  5. # deb系列
  6. dpkg -l | grep nfs
  7.  
  8. # 查询rpcbind也是同理 
 
  1. # 没有就安装一下啦
  2. # rpm,当然用dnf命令也可以安装的
  3. yum install nfs-utils rpcbind
  4.  
  5. # deb
  6. apt install nfs-utils rpcbind

NFS_Server配置

NFS对应的配置文件为/etc/exports,初始化时文件是空的,#号备注也没有。
  1. [root@client_149 ~]# cat /etc/exports
  2. [root@client_149 ~]#

配置文件的格式

1共享目录的路径 2允许访问的NFS客户端ip(3共享权限参数)

  • 1、第一项为目录的绝对路径
  • 2、允许访问的ip,可以使用通配符,比如192.168.2.*代表192.168.2.0-255都可以访问
  • 3、权限参数,有三对
参数
备注
文件读写权限相关
  • 读写rw
  • 只读ro
登录账号映射匿名
  • root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
  • no_root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
  • all_squash:无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
同步数据的方式
  • sync:同时将数据写入到内存与硬盘中,保证不丢失数据
  • async:优先将数据保存到内存,然后再写入硬盘;这样效率更高,但如果断电或者内存出现其他情况可能会丢失数据
#比如
/root/newdir 192.168.2.149(rw,sync,root_squash)
 注意后面的扣号之间不需要空格,这也是个个坑。

新建共享文件夹

先建立个新的文件夹,并且给足权限,777。
  1. [root@server_197 ~]# mkdir /newnfs
  2. [root@server_197 ~]# ll / | grep newnfs
  3. drwxr-xr-x. 2 root root 6 Aug 30 19:57 newnfs
  4. [root@server_197 ~]# chmod -R 777 /newnfs/
  5. [root@server_197 ~]# ll / | grep newnfs
  6. drwxrwxrwx. 2 root root 6 Aug 30 19:57 newnfs

写入配置

  1. [root@server_197 ~]# echo '/newnfs 192.168.2.*rw,sync,no_root_squash)' >> /etc/exports
  2. [root@server_197 ~]# cat /etc/exports /newnfs
  3. 192.168.2.(rw,sync,no_root_squash)

固定端口(可选)

如果你在使用ipstables,或者是有有其他网段端口的限制,可能需要固定一下端口。

  • nfs使用到端口

    •   portmapper(rpc-bind提供)端口:111 udp/tcp
    •   nfs/nfs_acl(nfs提供)端口:2049 udp/tcp
    •   mountd 端口:32768-65535 udp/tcp
    •   nlockmgr 端口:32768-65535 udp/tcp
 
系统 RPC服务在 nfs服务启动时默认会给 mountd 和 nlockmgr 动态选取一个随机端口来进行通讯。
/etc/sysconfig/nfs后追加以下内容,用于固定mountd和nlockmgr端口为4001-4004。
  1. RQUOTAD_PORT=4001
  2. LOCKD_TCPPORT=4002
  3. LOCKD_UDPPORT=4002
  4. MOUNTD_PORT=4003
  5. STATD_PORT=4004
可以在这里固定好端口,修改后需要都要重新启动一次服务。

启动服务和开机启动

使用systemctl来启动rpcbindnfs-server服务,要注意先启动rpcbind再启动nfs-server
  1. [root@server_197 ~]# systemctl restart rpcbind
  2. [root@server_197 ~]# systemctl enable rpcbind
  3. [root@server_197 ~]# systemctl restart nfs-server
    [root@server_197 ~]# systemctl enable nfs-server
  4. Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

用netstat看一下是不是有端口监听了,有就是启动成功了。

  1. [root@server_197 ~]# netstat -tlpn | grep "2049\|111"
  2. tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
  3. tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
  4. tcp6 0 0 :::111 :::* LISTEN 1/systemd
  5. tcp6 0 0 :::2049 :::* LISTEN -

firewall和iptables

firewall放行对应的服务,nfs、rpc-bind、mountd
如果可以建议只保留firewall就可以了。
  1. systemctl stop iptables
  2. systemctl disable iptables
  1. [root@server_197 ~]# firewall-cmd --permanent --add-service=nfs
  2. success
  3. [root@server_197 ~]# firewall-cmd --permanent --add-service=rpc-bind
  4. success
  5. [root@server_197 ~]# firewall-cmd --permanent --add-service=mountd
  6. success
  7. [root@server_197 ~]# firewall-cmd --reload
  8. success

iptables这个有点局限性,如果非要使用,先依据前面可选的先固定好mountd的端口。我一般情况都先关了iptables留firewall。不过还是这样写一下啦,万一用得上。

以之前设置的mountd固定端口,4001-4004,以及nfs:2049、rpc:111

  1. iptables -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT
  2. iptables -A INPUT -p udp -m udp --dport 111 -j ACCEPT
  3. iptables -A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
  4. iptables -A INPUT -p udp -m udp --dport 2049 -j ACCEPT
  5. iptables -A INPUT -p tcp -m tcp --dport 4001:4004 -j ACCEPT
  6. iptables -A INPUT -p udp -m udp --dport 4001:4004 -j ACCEPT
  7.  
  8. # iptables -I : 新加一条规则链
  9. # iptables -A :增加一条规则链
  10. # ptables -I 添加的规则放在现有规则的最前面,iptables -A 放在现有规则的最后。

重新启动一下防火墙啦

NFS_Client配置

作为使用Client,相当于Sever分享了一块硬盘,我们可以直接挂载在Client本地。

mount挂载

先看一下Sever共享信息,也就是对应我们之前在Sever的/etc/exports的配置。

如果不在许可范围内会提示mount.nfs: access denied by server while mounting。

  • showmount -[e|a|v] <ip>
    • -e,查看共享信息(记住-e就可以了)
    • -a,查看本机挂载的文件资源的情况NFS资源的情况
    • -v,查看nfs版本
  • mount -t nfs 192.168.2.197:/newnfs /newnfs

    • 将192.168.2.197:/newnfs挂载在本机的/newnfs,因为之前设置了权限这个文件夹是777
  1. [root@client_149 ~]# showmount -e 192.168.2.197 #看一下先Sever共享信息
  2. Export list for 192.168.2.197:
  3. /newnfs 192.168.2.*
  4. [root@client_149 ~]# mount -t nfs 192.168.2.197:/newnfs /newnfs
  • 也可以从根目录全部挂载,不过因为没有权限,还是只可以看到设置777权限的/newnfs
  1. # 新建个文件夹用于挂载Server的根目录
  2. [root@client_149 ~]# mkdir /nfs_197
  3. # 挂载
  4. [root@client_149 ~]# mount -t nfs 192.168.2.197:/ /nfs_197
  5. # 查看一下挂载好的目录内容
  6. [root@client_149 ~]# ll /nfs_197
  7. total 0
  8. drwxrwxrwx. 2 root root 20 Aug 31 01:30 newnfs

自动挂载

fstab挂载

重新启动后就要重新挂载啦,我们可以编辑一下/etc/fstab设置一下自动挂载。

在最后面追加

  1. echo '192.168.2.197:/newnfs /newnfs nfs 0 0' >> /etc/fstab

如果不生效,将自动挂载也设置为开机启动

  1. systemctl start remote-fs.target
  2. systemctl enable remote-fs.target

开机执行

当然,也可以开机时候自动执行挂载的命令/etc/rc.local

  1. # 把之前的mount命令追加到rc.local的末尾
  2. [root@client_149 ~]# echo 'mount -t nfs 192.168.2.197:/newnfs /newnfs' >> /etc/rc.local
  3. # 追加完成后看一下
  4. [root@client_149 ~]# cat /etc/rc.local | grep -v "#"
  5. touch /var/lock/subsys/local
  6. mount -t nfs 192.168.2.197:/newnfs /newnfs

这里记得要这个/etc/rc.local可执行+x

测试

目前Server和Client都已经配置好,我们在Server、Client任意主机在共享、挂载的目录内新建个文件,再在另一主机上查看一下。

Linux的NFS的配置的更多相关文章

  1. linux nfs服务配置挂载以及oracle使用nfs存储挂载注意事项

    服务端共享目录 /home/XXX/nfs_shared 172.16.22.0/24(rw,no_root_squash) service nfs restart 常用命令: 查看所有nfs共享目录 ...

  2. 嵌入式Linux之NFS配置

    NFS(Network File System) 1.RPC和rpcbind RPC(Remote Procedure Call)即远程过程调用,是分布式应用的基础,即允许计算机远程调用网络上其他计算 ...

  3. Linux系统中NFS服务配置

    文章目录:                一.NFS服务简介                二.NFS服务端配置                三.NFS客户端配置                四. ...

  4. Linux服务——二、配置NFS及autofs自动挂载服务

    一.NFS服务配置步骤 NFS的作用:能够使两台虚拟机之间实现文件共享.数据同步 准备:主机名.网络.yum源 Server端: 1.安装nfs-util和rpcbind:(图形化自带) [root@ ...

  5. 20145213《信息安全系统设计基础》实验一 Linux开发环境的配置

    北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号:20145213 20145222 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...

  6. Linux系统NFS网络文件系统

    Linux系统NFS网络文件系统 NFS(network file system)网络文件系统,就是通过网络让不同的主机系统之间可以共享文件或目录,此种方法NFS客户端使用挂载的方式让共享文件或目录到 ...

  7. Linux搭建nfs服务器

    使用linux进行嵌入式开发的时候,为了方便开发,通常是将开发板挂载到宿主机的文件系统上,然后将代码放到共享给开发板的目录中,再通过开发板运行. 首先查看是否安装了 nfs 软件包,yum list ...

  8. LINUX+Vmware+SVN的配置和安装

    LINUX+Vmware+SVN的配置和安装 验证SVN安装了没有 svnserve --version 查看CentOS自带JDK是否已安装. ◆输入:yum list installed |gre ...

  9. 信息安全系统设计基础实验一:Linux开发环境的配置和使用

    北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础    班级:1353 姓名:芦畅 傅冬菁 学号:20135308 20135311 成绩:       指导教师:娄家鹏      ...

随机推荐

  1. Javaer 面试必背系列!超高频八股之三色标记法

    可达性分析可以分成两个阶段 根节点枚举 从根节点开始遍历对象图 前文提到过,在可达性分析中,第一阶段 "根节点枚举" 是必须 STW 的,不然如果分析过程中用户进程还在运行,就可能 ...

  2. 下载nltk数据包报错

    安装nltk需要两步:安装nltk和安装nltk_data数据包 安装nltk 安装nltk很简单,可以直接在pycharm环境中安装,flie -> settings-> Python ...

  3. 关于个人全栈项目【臻美Chat】遇到的BUG以及解决方法

    项目展示: 问题总结:一.单用户重复登录设备 将每次输入的用户名与已经记录在后台的数组ar比较,如果存在则表示重复. // 生成数组var ar="";socket.on('arr ...

  4. $.fn解析

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个 ...

  5. WCF全局捕获日志

    /// <summary> /// WCF服务端异常处理器 /// </summary> public class WCF_ExceptionHandler : IErrorH ...

  6. 2 Zookeeper 单击安装

    (二)Zookeeper 本地模式安装 下载地址 镜像库地址:http://archive.apache.org/dist/zookeeper/ apache-zookeeper-3.6.0.tar. ...

  7. 2022-07-15/16 第一小组 田龙月 管理系统javaSE

    JavaSE小项目(基础语法:二分查找:冒泡排序)--还是存在bug:删除一个数组内一组数据后面只有一组后面数据能向前移位 (YY:使用"方法"应该会好很多,代码架构会清晰一点)未 ...

  8. 006面试题__创建String对象

    常见面试题: String s = new String("hello"); 问:创建了几个对象? 答:2个 1. 创建了一个字符常量池,指向了"hello"字 ...

  9. Jmeter-记一次自动化造数引发的BeanShell写入excel实例

    一.前言 最近工作和生活说忙也忙,说不忙也不忙,但就是已经感觉很长时间没有get新的技术技能了,就是一丢丢的那种也没有,哈哈哈,今天就来讲一下最近get到的小技能吧. 工作中,由于某个需求需要几百条数 ...

  10. 西文字符与中文GBK编码的区别

    一般来讲二者读取的时候西文字符的数值是正,而中文字符的数值是负的,此时读取的是中文字符的前一半,需要再读取一个char类型的数据,在大多数运行环境下这个规则都是用. ps:转自算法竞赛的笔记,要注意在 ...