linux nfs文件共享
◆一、概念
NFS是网络文件系统(Network File System)的简称,是分布式计算机系统的一个组成部分,可实现在异构网络上共享和装配远程文件系统。
NFS由SUN公司开发,目前已成为文件服务的一种标准(RFC1904,RFC1813)。其最大的功能就是可以通过网络,让不同操作系统的计算机可以共享数据,所以也可以看作是一个文件服务器。NFS是除了SAMBA之外Windows与Linux及Unix与Linux之间通信的方法。
理想条件下的NFS 网络拓扑结构 |
1、设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务);
2、NFS只是一种文件系统,本身没有传输功能,是基于RPC协议实现的,才能达到两个Linux系统之间的文件目录共享;
3、NFS为C/S架构;
◆二、服务器配置
1、配置文件
主要配置文件为:/etc/exports
格式为: 共享目录 可mount主机IP(参数1,参数2,……)
如:/var/nfs 172.20.*.*(rw,sync,no_rootl_squash)
ro: 只读
rw: 可读写
sync: 同步写入
async: 不同步写入
root_squash: 将root用户映射为来宾账号
no_root_squash: 将root用户映射为非来宾账号
all_squash: 所有帐号为来宾帐号
anonuid,anongid: 指定映射的来宾帐号的UID和GID;
说明:必须注意nfs/目录的访问权限,必须设置成777权限;父目录/var权限无要求,普通的755即可;
2、启动相关服务
然后依次启动相关服务:portmap,nfslock,nfs
service portmap start
service nfslock start
service nfs start
关闭顺序相反。
3、检查共享目录
随后可以采用showmount –e查看一下,看看共享的目录情况:
[root@ns var]# showmount -e
Export list for ns.osserver:
/var/nfs 172.20.*.*
OK,到此为止,NFS服务器搭建完毕;
◆三、客户端配置
1、确保portmap运行
客户端必须确保RPC协议相应的portmap正常运行,否则mount将失败;
2、挂载/var/nfs目录(本地挂载点为/mnt/nfs)
mount -t nfs 172.20.65.16:/var/nfs /mnt/nfs
成功mount以后,即可同本地目录一样随意操作;
◆四、其它相关命令
1、当修改了/etc/exports文件后,可以不用重新启动nfs服务,直接采用exports –rv 即可重新导出共享目录;
该命令格式如下:
exportfs [-aruv]
-a :全部mount或者unmount /etc/exports中的内容
-r :重新mount /etc/exports中分享出来的目录
-u :umount 目录
-v :在 export 的时候,将详细的信息输出到屏幕上。
具体例子:
[root@ns var]# showmount -e
Export list for ns.osserver:
/var/nfs 172.20.*.*
[root@ns var]# exportfs –au #全部卸载
[root@ns var]# showmount -e
Export list for ns.osserver:
[root@ns var]# exportfs –rv #全部重新 export 一次
exporting 172.20.*.*:/var/nfs
[root@ns var]#
2、showmout命令对于NFS的操作和查错有很大的帮助,所以我们先来看一下showmount的用法
showmout
-a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。
-e :显示指定的NFS SERVER上export出来的目录。
例如:
[root@localhost ~]# showmount -e 172.20.16.139
Export list for 172.20.16.139 :
/root/share 172.20.16.137[root@ns var]# showmount -a
All mount points on localhost.localdomain:
*:/root/share
172.20.16.139:,172.20.16.139
172.20.16.139:DEFAULT
◆五、常见问题解答
1、提示:mount to NFS server '172.20.67.203' failed: server is down.
解决方案:可能是NFS服务器的防火墙有问题;
2、提示:mount: RPC: Timed out
解决方案:由于RPC协议没运行;启动portmap服务;
也有可能是防火墙问题;Server/Client均有可能。
[root@test conn]# service nfslock status #服务器端查看
rpc.statd (pid 3041) is running...
[root@test conn]# service portmap status
portmap (pid 2983) is running...
[root@test conn]# service nfs status
rpc.mountd (pid 22877) is running...
nfsd (pid 22874 22873 22872 22871 22870 22869 22868 22867) is running...
rpc.rquotad (pid 22862) is running...
[root@test conn]# showmount -e
Export list for test:
[root@test conn]# vi /etc/exports
/var/nfs 10.109.131.*(rw,async)
[root@test conn]# exportfs -arv
exporting 10.109.131.*:/var/nfs
[root@test conn]# showmount -e
Export list for test:
/var/nfs 10.109.131.*[root@test ~]# mkdir /var/nfs
[root@test nfs]# cd /var/nfs
[root@test nfs]#
[root@jacktest ~]# mount -t nfs 10.109.131.209:/var/nfs/ /mnt/nfs/ #客户端查看
[root@jacktest ~]# ll /mnt/nfs/a.123
-rw-r--r-- 1 root root 0 Jan 15 16:28 /mnt/nfs/a.123[root@jacktest ~]# mount
...
10.109.131.209:/var/nfs/ on /mnt/nfs type nfs (rw,addr=10.109.131.209)[root@jacktest ~]# showmount -e 10.109.131.209
Export list for 10.109.131.209:
/var/nfs 10.109.131.*
特例:NSF权限是通过ID号来确认权限,因此root默认为
[root@test conn]# id hbase #服务器端查看,hbase的ID号为502
uid=502(hbase) gid=502(hbase) groups=502(hbase)
[root@test conn]# setfacl -m u:hbase:rwx /var/nfs/
[root@test conn]# ll /var/nfs/
total 0
-rw-r--r-- 1 root root 0 Jan 15 16:28 a.123
[root@test conn]# su - hadoop
[hadoop@test ~]$ cd /var/nfs/
[hadoop@test nfs]$ touch 11.hadoop
[hadoop@test nfs]$ ll
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-r--r-- 1 root root 0 Jan 15 16:28 a.123
[hadoop@test nfs]$ su - hbase[root@test conn]# setfacl -m u:hbase:rwx /var/nfs/
[root@test conn]# ll /var/nfs/
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 hbase hbase 0 Jan 15 16:57 321.hbase
-rw-r--r-- 1 root root 0 Jan 15 16:28 a.123
[root@jacktest ~]# groupadd -g 502 openstack #客户端查看,openstack的ID号为502
[root@jacktest ~]# useradd -g 502 -u 502 openstack
[root@jacktest ~]# id openstack
uid=502(openstack) gid=502(openstack) groups=502(openstack)
[root@jacktest ~]# ll /mnt/nfs/
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 openstack openstack 0 Jan 15 16:57 321.hbase
-rw-r--r-- 1 root root 0 Jan 15 16:28 a.123
[root@jacktest ~]# su - openstack
[openstack@jacktest ~]$ cd /mnt/nfs/
[openstack@jacktest nfs]$ ll /mnt/nfs/
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 openstack openstack 0 Jan 15 16:57 321.hbase
-rw-r--r-- 1 root root 0 Jan 15 16:28 a.123
[openstack@jacktest nfs]$ touch b.openstack
[openstack@jacktest nfs]$ ll
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 openstack openstack 0 Jan 15 16:57 321.hbase
-rw-r--r-- 1 root root 0 Jan 15 16:28 a.123
-rw-rw-r-- 1 openstack openstack 0 Jan 15 17:04 b.openstack
[root@test conn]# ll /var/nfs/ #服务器端查看
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 hbase hbase 0 Jan 15 16:57 321.hbase
-rw-r--r-- 1 root root 0 Jan 15 16:28 a.123
-rw-rw-r-- 1 hbase hbase 0 Jan 15 17:04 b.openstack
统一用一个权限访问:
[root@test nfs]# useradd -u 511 nfstest #服务器端查看
[root@test nfs]# touch nfstest
[root@test nfs]# ls
11.hadoop 321.hbase b.openstack nfstest
[root@test nfs]# ll
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 hbase hbase 0 Jan 15 16:57 321.hbase
-rw-rw-r-- 1 hbase hbase 0 Jan 15 17:04 b.openstack
-rw-r--r-- 1 root root 0 Jan 15 17:16 nfstest
[root@test nfs]# chown nfstest.nfstest /var/nfs/nfstest
[root@test nfs]# ll
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 hbase hbase 0 Jan 15 16:57 321.hbase
-rw-rw-r-- 1 hbase hbase 0 Jan 15 17:04 b.openstack
-rw-r--r-- 1 nfstest nfstest 0 Jan 15 17:16 nfstest
[root@test nfs]# vi /etc/exports
[root@test nfs]# cat /etc/exports
/var/nfs 10.109.131.*(rw,async,all_squash,anonuid=511,anongid=511)
[root@test nfs]# exportfs -ra
[root@test nfs]# exportfs -rav
exporting 10.109.131.*:/var/nfs
[root@test nfs]# showmount -e 10.109.131.209
Export list for 10.109.131.209:
/var/nfs 10.109.131.*
[root@test nfs]#
[root@jacktest nfs]# ll #客户端查看
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 openstack openstack 0 Jan 15 16:57 321.hbase
-rw-rw-r-- 1 openstack openstack 0 Jan 15 17:04 b.openstack
-rw-r--r-- 1 511 511 0 Jan 15 17:16 nfstest[root@jacktest nfs]# vim /etc/fstab
...
192.168.1.5:/var/nfs /mnt/nfs nfs default,-rnetdev 0 0
[root@test var]# vi /etc/sysconfig/nfs #固定监控端口
# Optional arguments passed to rpc.mountd. See rpc.mountd(8)
# Port rquotad should listen on.
RQUOTAD_PORT=875
# Optinal options passed to rquotad
#RPCRQUOTADOPTS=""
# Optional arguments passed to rpc.mountd. See rpc.mountd(8)
#RPCMOUNTDOPTS=""
# Port rpc.mountd should listen on.
MOUNTD_PORT=892
[root@test var]# rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 676 status
100024 1 tcp 679 status
100011 1 udp 991 rquotad
100011 2 udp 991 rquotad
100011 1 tcp 994 rquotad
100011 2 tcp 994 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100021 1 udp 39240 nlockmgr
100021 3 udp 39240 nlockmgr
100021 4 udp 39240 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 tcp 37209 nlockmgr
100021 3 tcp 37209 nlockmgr
100021 4 tcp 37209 nlockmgr
100005 1 udp 1005 mountd
100005 1 tcp 1008 mountd
100005 2 udp 1005 mountd
100005 2 tcp 1008 mountd
100005 3 udp 1005 mountd
100005 3 tcp 1008 mountd
◆六、示例
1. 服務器端配製:
[root@MyLinux ~]# useradd -u 510 nfstest
[root@MyLinux ~]# mkdir /shared
[root@MyLinux ~]# touch /shared/nfstest
[root@MyLinux ~]# ll /shared/nfstest
-rw-r--r-- 1 root root 0 Apr 6 16:22 /shared/nfstest
[root@MyLinux ~]# tail /etc/passwd
.
nfstest:x:510:510::/home/nfstest:/bin/bash
[root@MyLinux ~]# chown nfstest.nfstest /shared/nfstest
[root@MyLinux ~]# ll /shared/nfstest
-rw-r--r-- 1 nfstest nfstest 0 Apr 6 16:22 /shared/nfstest
[root@MyLinux ~]# vi /etc/exports
/shared 10.109.0.0/16(rw,all_squash,anonuid=510,anongid=510)
[root@MyLinux ~]# exportfs -ra
[root@MyLinux ~]# showmount -e 10.109.132.126
Export list for 10.109.132.126:
/shared 10.109.0.0/16
2. 客戶端手动挂载:
[root@MyLinux ~]# mkdir /mnt/nfs
[root@MyLinux ~]# mount -t nfs 10.109.132.126:/shared /mnt/nfs
3. 客戶端自动挂载:
[root@MyLinux ~]# vim /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
10.109.132.126:/shared /mnt/nfs nfs defaults,_rnetdev 0 0 #若挂载不成功则跳过不挂载
---END---
转载于:https://blog.51cto.com/wangfx/1896858