Linux NFS 服务安装配置(网络文件共享)

guiyun affiliate



一、  简介

网络文件系统(Network File System,简称NFS)是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源,在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样

二、  环境准备

image.png


   


三、  服务端安装配置

[root@Nfs-Server ~]# cat /etc/redhat-release

CentOS release 6.6 (Final)

[root@Nfs-Server ~]# uname -r

2.6.32-504.el6.x86_64

[root@Nfs-Server ~]# uname -m

x86_64

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

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

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

rpcbind-0.2.0-13.el6.x86_64

nfs-utils-1.2.3-75.el6.x86_64

[root@Nfs-Server ~]# /etc/init.d/rpcbind start

Starting rpcbind:                                          [  OK  ]

[root@Nfs-Server ~]# /etc/init.d/rpcbind status

rpcbind (pid  1855) is running...

[root@Nfs-Server ~]# netstat -tnlup|grep "rpcbind"|grep -v "grep"

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1855/rpcbind

tcp        0      0 :::111                      :::*                        LISTEN      1855/rpcbind

udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1855/rpcbind

udp        0      0 0.0.0.0:758                 0.0.0.0:*                               1855/rpcbind

udp        0      0 :::111                      :::*                                    1855/rpcbind

udp        0      0 :::758                      :::*                                    1855/rpcbind

[root@Nfs-Server ~]# lsof -i:111

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rpcbind 1855  rpc    6u  IPv4  15621      0t0  UDP *:sunrpc

rpcbind 1855  rpc    8u  IPv4  15624      0t0  TCP *:sunrpc (LISTEN)

rpcbind 1855  rpc    9u  IPv6  15626      0t0  UDP *:sunrpc

rpcbind 1855  rpc   11u  IPv6  15629      0t0  TCP *:sunrpc (LISTEN)

[root@Nfs-Server ~]# rpcinfo -p localhost #查看NFS注册端口信息

   program vers proto   port  service

    100000    4   tcp    111  portmapper

    100000    3   tcp    111  portmapper

    100000    2   tcp    111  portmapper

    100000    4   udp    111  portmapper

    100000    3   udp    111  portmapper

    100000    2   udp    111  portmapper

[root@Nfs-Server ~]# /etc/init.d/nfs start

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting RPC idmapd:                                       [  OK  ]

[root@Nfs-Server ~]# /etc/init.d/nfs status

rpc.svcgssd is stopped

rpc.mountd (pid 27057) is running...

nfsd (pid 27073 27072 27071 27070 27069 27068 27067 27066) is running...

rpc.rquotad (pid 27052) is running...

[root@Nfs-Server ~]# netstat -tnlup|grep "2049"|grep -v "grep"

tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -

tcp        0      0 :::2049                     :::*                        LISTEN      -

[root@Nfs-Server ~]# rpcinfo -p localhost

   program vers proto   port  service

    100000    4   tcp    111  portmapper

    100000    3   tcp    111  portmapper

    100000    2   tcp    111  portmapper

    100000    4   udp    111  portmapper

    100000    3   udp    111  portmapper

    100000    2   udp    111  portmapper

    100011    1   udp    875  rquotad

    100011    2   udp    875  rquotad

    100011    1   tcp    875  rquotad

    100011    2   tcp    875  rquotad

    100005    1   udp  52329  mountd

    100005    1   tcp   4257  mountd

    100005    2   udp   9617  mountd

    100005    2   tcp  29066  mountd

    100005    3   udp  56146  mountd

    100005    3   tcp   7727  mountd

    100003    2   tcp   2049  nfs

    100003    3   tcp   2049  nfs

    100003    4   tcp   2049  nfs

    100227    2   tcp   2049  nfs_acl

    100227    3   tcp   2049  nfs_acl

    100003    2   udp   2049  nfs

    100003    3   udp   2049  nfs

    100003    4   udp   2049  nfs

    100227    2   udp   2049  nfs_acl

    100227    3   udp   2049  nfs_acl

    100021    1   udp  23470  nlockmgr

    100021    3   udp  23470  nlockmgr

    100021    4   udp  23470  nlockmgr

    100021    1   tcp  15660  nlockmgr

    100021    3   tcp  15660  nlockmgr

    100021    4   tcp  15660  nlockmgr

[root@Nfs-Server ~]# chkconfig --level 3 rpcbind on

[root@Nfs-Server ~]# chkconfig --level 3 nfs on

[root@Nfs-Server ~]# chkconfig --list nfs

nfs             0:off   1:off   2:off   3:on    4:off   5:off   6:off

[root@Nfs-Server ~]# chkconfig --list rpcbind

rpcbind         0:off   1:off   2:off   3:on    4:off   5:off   6:off

[root@Nfs-Server ~]# mkdir /data #创建共享目录

[root@Nfs-Server ~]# ls -ld /data/

drwxr-xr-x. 2 root root 4096 Apr 27 13:54 /data/

[root@Nfs-Server ~]# vim /etc/exports

/data   192.168.100.0/24(rw,sync,all_squash)

[root@Nfs-Server ~]# cat /etc/exports

/data   192.168.100.0/24(rw,sync,all_squash)

[root@Nfs-Server ~]# /etc/init.d/nfs reload

[root@Nfs-Server ~]# exportfs -rv

exporting 192.168.100.0/24:/data

[root@Nfs-Server ~]# showmount -e localhost

Export list for localhost:

/data 192.168.100.0/24

[root@Nfs-Server ~]# mount -t nfs 192.168.100.133:/data /mnt/

[root@Nfs-Server ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3              13G  1.6G   11G  13% /

tmpfs                 244M     0  244M   0% /dev/shm

/dev/sda1             976M   27M  898M   3% /boot

192.168.100.133:/data  13G  1.6G   11G  13% /mnt

[root@Nfs-Server ~]# cat /proc/mounts|grep "mnt"|grep -v "grep"

192.168.100.133:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.100.133,minorversion=0,local_lock=none,addr=192.168.100.133 0 0

[root@Nfs-Server ~]# touch /mnt/lb.txt #创建文件失败,没有权限

touch: cannot touch `/mnt/lb.txt': Permission denied

[root@Nfs-Server ~]# cat /var/lib/nfs/etab #查看共享目录参数,NFS客户端访问服务端是以ID为65534的用户身份访问,也就是nfsnobody

/data   192.168.100.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)

[root@Nfs-Server ~]# grep "nfsnobody" /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

[root@Nfs-Server ~]# ls -ld /data/

drwxr-xr-x. 2 root root 4096 Mar 12 22:39 /data/

[root@Nfs-Server ~]# chown -R nfsnobody: /data/

[root@Nfs-Server ~]# ls -ld /data/

drwxr-xr-x. 2 nfsnobody root 4096 Aug 30 20:36 /data/

[root@Nfs-Server ~]# touch /mnt/lb.txt

[root@Nfs-Server ~]# ls -l /mnt/lb.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 Apr 27 14:38 /mnt/lb.txt

[root@Nfs-Server ~]# ls -l /data/lb.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 Apr 27 14:38 /data/lb.txt

[root@Nfs-Server ~]# cat >> /etc/sysctl.conf<<EOF #内核参数优化

 

####For NFS Server By LinBin At 2017-04-27####

net.core.wmem_default = 8388608  #默认写内存缓冲区

net.core.rmem_default = 8388608  #默认写内存缓冲区

net.core.rmem_max = 16777216 #最大写内存缓冲区

net.core.wmem_max = 16777216 #最大读内存缓冲区

EOF

[root@Nfs-Server ~]# sysctl -p

 

启动顺序:rpcbind(13)-->nfs(30)

关闭顺序:nfs(60)-->rpcbind(87)

[root@Nfs-Server ~]# head -5 /etc/init.d/rpcbind

#! /bin/sh

#

# rpcbind       Start/Stop RPCbind

#

# chkconfig: 2345 13 87

[root@Nfs-Server ~]# head -6 /etc/init.d/nfs

#!/bin/sh

#

# nfs           This shell script takes care of starting and stopping

#               the NFS services.

#

# chkconfig: - 30 60

 

NFS配置文件语法格式

第一列:共享目录

第二列:客户端地址(权限)

EXAMPLE

       # sample /etc/exports file

       /               master(rw) trusty(rw,no_root_squash)

       /projects       proj*.local.domain(rw)

       /usr            *.local.domain(ro) @trusted(rw)

       /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)

       /pub            *(ro,insecure,all_squash)

       /srv/www        -sync,rw server @trusted @external(ro)

       /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)

       /build          buildhost[0-9].local.domain(rw)

 

NFS配置文件权限参数

rw                          #读写权限

ro                          #只读权限

sync                         #数据同步写入硬盘,效率不高

async                       #数据异步写入硬盘,效率比sync高,但可能会丢失数据

root_squash                 #将root用户及所属组都映射为匿名用户或用户组nfsnobody

no_root_squash              #与root_squahs相反

all_squash                  #将所有用户都映射为匿名用户nfsnobody

no_all_squash               #与all_squash相反

anonuid                     #匿名用户UID

anongid                     #匿名用户GID

四、  客户端安装配置

[root@Web01-Server ~]# cat /etc/redhat-release

CentOS release 6.6 (Final)

[root@Web01-Server ~]# uname -r

2.6.32-504.el6.x86_64

[root@Web01-Server ~]# uname -m

x86_64

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

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

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

rpcbind-0.2.0-13.el6.x86_64

nfs-utils-1.2.3-75.el6.x86_64

[root@Web01-Server ~]# /etc/init.d/rpcbind start

Starting rpcbind:                                          [  OK  ]

[root@Web01-Server ~]# /etc/init.d/rpcbind status

rpcbind (pid  26992) is running...

[root@Web01-Server ~]# netstat -tnlup|grep "rpcbind"|grep -v "grep"

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      26992/rpcbind

tcp        0      0 :::111                      :::*                        LISTEN      26992/rpcbind

udp        0      0 0.0.0.0:879                 0.0.0.0:*                               26992/rpcbind

udp        0      0 0.0.0.0:111                 0.0.0.0:*                               26992/rpcbind

udp        0      0 :::879                      :::*                                    26992/rpcbind

udp        0      0 :::111                      :::*                                    26992/rpcbind

[root@Web01-Server ~]# lsof -i:111

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rpcbind 26992  rpc    6u  IPv4  36885      0t0  UDP *:sunrpc

rpcbind 26992  rpc    8u  IPv4  36888      0t0  TCP *:sunrpc (LISTEN)

rpcbind 26992  rpc    9u  IPv6  36890      0t0  UDP *:sunrpc

rpcbind 26992  rpc   11u  IPv6  36893      0t0  TCP *:sunrpc (LISTEN)

[root@Web01-Server ~]# chkconfig --level 3 rpcbind on

[root@Web01-Server ~]# chkconfig --list rpcbind

rpcbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@Web01-Server ~]# showmount -e 192.168.100.133

clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)     #未关闭服务器端防火墙

[root@Nfs-Server ~]# /etc/init.d/iptables stop

iptables: Setting chains to policy ACCEPT: filter          [  OK  ]

iptables: Flushing firewall rules:                         [  OK  ]

iptables: Unloading modules:                               [  OK  ]

[root@Nfs-Server ~]# chkconfig --level 3 iptables off

[root@Web01-Server ~]# showmount -e 192.168.100.133

Export list for 192.168.100.133:

/data 192.168.100.0/24

[root@Web01-Server ~]# mount -t nfs 192.168.100.133:/data /mnt/

[root@Web01-Server ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3              13G  1.6G   11G  13% /

tmpfs                 244M     0  244M   0% /dev/shm

/dev/sda1             976M   27M  898M   3% /boot

192.168.100.133:/data  13G  1.6G   11G  13% /mnt

[root@Web01-Server ~]# cat /proc/mounts|grep "mnt"|grep -v "grep"

192.168.100.133:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.100.134,minorversion=0,local_lock=none,addr=192.168.100.133 0 0

[root@Web01-Server ~]# echo "/bin/mount -t nfs 192.168.100.133:/data /mnt/" >> /etc/rc.local

[root@Web01-Server ~]# tail -1 /etc/rc.local

/bin/mount -t nfs 192.168.100.133:/data /mnt/

[root@Web01-Server ~]# ls -l /mnt/lb.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 Apr 27 14:38 /mnt/lb.txt

[root@Web01-Server ~]# touch /mnt/linbin.txt #创建文件

[root@Web01-Server ~]# ls -l /mnt/linbin.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 Apr 27 14:40 /mnt/linbin.txt

[root@Web0-Server ~]# cat >> /etc/sysctl.conf<<EOF #内核参数优化

 

####For NFS Server By LinBin At 2017-04-27####

net.core.wmem_default = 8388608  #默认写内存缓冲区

net.core.rmem_default = 8388608  #默认写内存缓冲区

net.core.rmem_max = 16777216 #最大写内存缓冲区

net.core.wmem_max = 16777216 #最大读内存缓冲区

EOF

[root@Web0-Server ~]# sysctl -p

 

性能、安全挂载参数推荐

[root@Web01-Server ~]# mount -t nfs -o bg,hard,nosuid,noexec,noatime,nodev,nodiratime,rsize=65535,wsize=65535 192.168.100.133:/data /mnt

[root@Web01-Server ~]# echo “/bin/mount -t nfs -o bg,hard,nosuid,noexec,noatime,nodev,nodiratime,rsize=65535,wsize=65535 192.168.100.133:/data /mnt” >> /etc/rc.local

[root@Web01-Server ~]# tail -1 /etc/rc.local

/bin/mount -t nfs -o bg,hard,nosuid,noexec,noatime,nodev,nodiratime,rsize=65535,wsize=65535 192.168.100.133:/data /mnt

bg                          #后台执行

hard                        #硬挂载,持续呼叫,结合参数intr支持中断,避免整个系统被NFS锁死

rsize                       #限制读取速度

wsize                       #限制写入速度

proto                       #协议

nosuid                      #不允许设置suid

noexec                      #不允许执行二进制文件

nodev                       #不允许解读字符或区块设备

noatime                     #不更新文件访问时间

nodiratime                  #不更新目录访问时间

 

[root@Web01-Server mnt]# umount /mnt/ #不能卸载已挂载文件系统

umount.nfs: /mnt: device is busy

umount.nfs: /mnt: device is busy

[root@Web01-Server mnt]# umount -lf /mnt/

[root@Web01-Server mnt]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       6.9G  1.4G  5.2G  22% /

tmpfs           244M     0  244M   0% /dev/shm

/dev/sda1       190M   27M  153M  16% /boot

五、  mount命令

mount

【功能说明】

挂载文件系统

 

【语法格式】

mount [-lhV]

mount -a [-fFnrsvw] [-t vfstype] [-O optlist]

mount [-fnrsvw] [-o option[,option]...]  device|dir

mount [-fnrsvw] [-t vfstype] [-o options] device dir

 

【实践操作】

[root@node1 ~]# mount -t ext4 -o noexec /dev/sdb1 /mnt

 

【常用参数】

-t                   指定挂载类型

-o                   指定挂载参数

async             数据异步写入硬盘

sync              数据同步写入硬盘

ro                只读方式挂载

rw                读写方式挂载

atime             每次存取时更新访问时间

noatime           每次存取时不更新访问时间

dev               允许解读字符或区块设备

nodev             不允许解读字符或区块设备

diratime          每次存取更新目录访问时间

nodiratime        每次存取不更新目录访问时间

exec              允许执行二进制文件

noexec            不允许执行二进制文件

suid              允许设置suid

nosuid            不允许设置suid

remount           重新挂载一个已挂载的文件系统,通常是将只读文件系统重新挂载为可读写

-a                   重新加载/etc/fstab


guiyun affiliate

作者头像
南宫俊逸创始人

君子好学,自强不息~

上一篇:一步步教你通过YOUTUBE赚取美金(视频+教程)
下一篇:Install WordPress on CentOS 7

发表评论

腾讯-云服务器2核4G,首年70元