Linux下部署NFS服务 局域网共享文件夹

NFS

一、NFS简介和架构图

  • NFS是Network File System的缩写,即网络文件系统。一种使用于分散式文件协定,功能是通过网络让不同的机器、不同的操作系统能够分享个人数据,让应用程序通过网络可以访问位于服务器磁盘中的数据。
  • NFS在文件传送或信息传送的过过程中,依赖于RPC协议。RPC,远程过程调用(Remote Procedure Call),是使客户端能够执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,就是因为NFS使用了RPC提供的传输协议,可以说NFS就是使用PRC的一个程序。
  • NFS存储服务器主要用于用户上传的数据,图片音频、等信息

二、NFS适用场景

  • 2.1 NFS 最好是部署在局域网 ,不要在公网上 ;
  • 2.2 NFS 只能在 linux 上使用 (如果想让 windows 和 Linux 之间实现数据共享建议使用 FTP 或者 samba);
  • 2.3 NFS 适合在中小型企业使用

三、服务端配置(IP:10.10.50.9)

  • 检查系统中是否安装 NFS 和 RPC ,并进行安装NFS 和RPC

    [root@NFS ~]# rpm -qa nfs-utils rpcbind

    [root@NFS ~]# yum -y install nfs-utils rpcbind       #使用 yum 安装nfs 和 rpc  
  • 在服务端创建共享目录/data/nfs/

    [root@NFS ~]# mkdir -p /data/nfs/
    [root@NFS ~]# chmod 777 /data/nfs/
    [root@NFS ~]# ll /data/
  • 编辑配置NFS配置文件

    [root@NFS ~]# cat >>/etc/exports< /data/nfs 10.10.15.20(rw,sync,no_subtree_check) 10.10.12.198(rw,sync,no_subtree_check)
    > EOF
    [root@NFS ~]# cat /etc/exports
    /data/nfs 10.10.15.20(rw,sync,no_subtree_check) 10.10.12.198(rw,sync,no_subtree_check)
    [root@NFS ~]#

其中:/data/nfs 是服务器端共享的目录
10.10.15.20和10.10.12.198 是共享目录的客户端ip地址(rw,sync),其中rw代表拥有读写的权限,sync代表数据同步写入NFS服务器端的硬盘中。也可以用async,async是大数据时使用,是先写到缓存区,再写到磁盘里。no_subtree_check 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。

    [root@NFS ~]# exportfs -r                           #让配置文件生效 
  • 启动RPC和NFS服务

    service rpcbind start #启动rpc 
    service nfs start #启动nfs 
    service rpcbind status #查看rpc运行状态
    service nfs status #查看nfs运行状态
  • 查看NFS服务是否向rpc注册端口信息

    [root@NFS ~]# rpcinfo -p localhost

选项与参数:

-p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
-t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
-u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;
  • 在NFS设定妥当之后,可以先在服务端自我测试一下是否可以联机!利用 showmount 这个指令来查看!

    [root@NFS ~]# showmount -e localhost
    Export list for localhost:
    /data/nfs     10.10.12.198,10.10.15.20
    [root@NFS ~]#

选项与参数:

    -a :显示目前主机与客户端的 NFS 联机分享的状态;
    -e :显示某部主机的 /etc/exports 所分享的目录数据。

参数说明:

    #rpcinfo  -p     检查nfs服务是否有注册端口信息
    #showmount -e    检查共享目录信息 

四、客户端配置(IP:10.10.12.198,10.10.15.20)

  • 查看系统中是否有nfs和rpc

    [root@rsync ~]#  rpm -qa nfs-utils rpcbind
  • 进行安装服务,并启动服务

    [root@rsync ~]# yum -y install nfs-utils rpcbind

    [root@rsync ~]# service rpcbind start #启动rpc 
    [root@rsync ~]# service nfs start #启动nfs 
  • 创建挂载目录

    [root@rsync]# mkdir -p /data/nfs
  • 查看客户端是否可以收到服务端的共享信息

    [root@rsync nfs]# showmount -e 10.10.50.9
    Export list for 10.10.50.9:
    /data      10.10.12.198,10.10.15.20
    [root@rsync nfs]#
  • 进行nfs 共享目录的挂载

    mount -t nfs 10.10.50.9:/data/nfs /data/nfs

    [root@localhost nfs]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   50G   23G   28G  45% /
    devtmpfs                 3.8G     0  3.8G   0% /dev
    tmpfs                    3.8G     0  3.8G   0% /dev/shm
    tmpfs                    3.8G  8.9M  3.8G   1% /run
    tmpfs                    3.8G     0  3.8G   0% /sys/fs/cgroup
    /dev/mapper/centos-home  407G  6.0G  401G   2% /home
    /dev/sda1               1014M  147M  868M  15% /boot
    tmpfs                    770M     0  770M   0% /run/user/0
    10.10.50.9:/data/nfs   50G   21G   30G  42% /data/nfs

服务端:

    [root@NFS nfs]# echo "nfs" > test.txt

客户端:

    [root@rsync data]# cat /data/nfs/test.txt
    nfs


五、问题

1,在部署nfs的时候,共享了一个文件夹。为了让远程nfs客户端挂载这个文件夹的时候都有可读写权限,我需要把服务器上的用户uid、gid设置成nfs服务端文件夹一样的权限。不过因为之前新建的用户uid、gid都是系统自动生成的,几台服务器之前某个用户的uid、gid可能都不一样,

解决方法

1. 需要把这个uid、gid都设置成统一某个值。

# usermod -u 2005 thn
# groupmod -g 2005 thn

  thn用户的家目录下面的文件属主和属组会在命令执行后自动修改成新的uid、gid对应的属主 属  组,但是其他文件目录需要手动修改。手动修改的命令也比较简单。

# find / -user 2001 -exec chown -h thn {} \;
# find / -group 2001 -exec chgrp -h thn {} \;

 这样用户和组的uid、gid就修改好了。可以用id命令看下是否修改的如我们所愿。

# ls -l /home/thn/
# id -u thn
# id -g thn
# grep thn /etc/passwd
# grep thn /etc/group

2.

服务端

# echo N > /sys/module/nfsd/parameters/nfs4_disable_idmapping
# service rpcbind restart

客户端

# echo N > /sys/module/nfs/parameters/nfs4_disable_idmapping
# service rpcbind restart

现在在服务端和客户端将发送字符串主体而不是数字 ID

你可能感兴趣的:(运维,linux,服务器,网络)