linux下nfs简介和搭建

关于网络文件系统经常会用于nas存储架构,而跟我们最常用的就是NFS和CIFS,nfs主要是用于unix的网络文件系统,而CIFS则主要是windows下的网络文件系统,这里我们只介绍nfs。

nfs广泛应用在freebsd、sco、solaris等等异构操作平台,允许一个系统在网络上与其他主机共享目录和文件,nfs可用于不同类型的主机、操作系统、网络架构和传输协议运行环境中的网络文件远程访问和共享。

Nfs的工作原理是使用cs架构,服务器程序向其他主机提供对文件系统的访问,其过程叫做输出,nfs客户端程序对共享文件访问时,把他们从nfs服务器中输送出来。

nfs使用的是远程过程过程调用(remote procedure call,PRC)协议来协助NFS本身的运作。
PRC远程进程调主要是当使用某些服务来进行远程联机的时候,主机的IP地址、服务的端口及其服务PID等信息都需要管理和对应,nfs本身的服务并没有提供数据传递的协议,nfs是使用prc程序来实现网络传输功能,nfs的服务端和客户端都需要运行prc程序。

理论有点晦涩,主要我们只需要理论nfs是一种网络的文件系统,可以实现多个客户端共享远程服务器的一个文件或者目录,这种传输是通过prc协议来运行的,下面我们来动手测试配置下nfs服务

[root@ogg ~]# mount /dev/sdb1 /nfs
[root@ogg ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              18G   15G  2.4G  87% /
/dev/sda1              99M   14M   80M  15% /boot
tmpfs                 432M     0  432M   0% /dev/shm
none                  432M  104K  432M   1% /var/lib/xenstored
/dev/sdb1             4.0G   73M  3.7G   2% /nfs

1 编辑/etc/exports文件,编写nfs共享的目录、IP地址和共享的权限设置。
[root@ogg ~]# vi /etc/exports

/nfs 192.168.56.*(rw,sync,no_root_squash)

关于/etc/exports文件分为三部分,其中第一部分为本地要共享出去的目录,第二部分为允许访问的主机(可以是一个IP地址或者一个IP网段),第三部分是关于共享的权限方式
rw:可读写
ro:只读
sync:同步模式,内存中数据实时写进磁盘
async:异步模式,内存中数据定期写进磁盘
no_root_squash:客户端的root用户对共享目录拥有至高的权限控制,就像是对本机目录操作一样
root_squash:客户端的root用户对共享目录只是拥有普通的权限
all_squash:不管使用nfs的用户是谁,他的身份都会被限定成为一个指定的普通用户身份
anonuid/anongid: 要和root_squash和all_squash一同使用,用于指定使用nfs的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。

2 启动服务器端的nfs和portmap:
[root@ogg ~]# /etc/init.d/portmap status
portmap (pid 1908) is running...
[root@ogg ~]# /etc/init.d/nfs status
rpc.mountd is stopped
nfsd is stopped
rpc.rquotad is stopped
[root@ogg ~]# /etc/init.d/nfs start
Starting NFS services:  [  OK  ]
Starting NFS quotas: [  OK  ]
Starting NFS daemon: [  OK  ]
Starting NFS mountd: [  OK  ]

这里看出服务器端的相关nfs相关的端口
[root@ogg ~]# ps -ef|grep nfs|grep -v grep
root      3822    11  0 23:18 ?        00:00:00 [nfsd4]
root      3824     1  0 23:18 ?        00:00:00 [nfsd]
root      3825     1  0 23:18 ?        00:00:00 [nfsd]
root      3826     1  0 23:18 ?        00:00:00 [nfsd]
root      3827     1  0 23:18 ?        00:00:00 [nfsd]
root      3828     1  0 23:18 ?        00:00:00 [nfsd]
root      3829     1  0 23:18 ?        00:00:00 [nfsd]
root      3830     1  0 23:18 ?        00:00:00 [nfsd]
root      3831     1  0 23:18 ?        00:00:00 [nfsd]

3 在client端进行挂载,这里我们挂载到两个client端
[root@localhost ~]# mkdir /nfs1
[root@localhost ~]# mount -t nfs 192.168.56.58:/nfs /nfs1  -- 需要注意如果文件被锁住了,需要加上-o nolock来释放文件锁。
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       11G  9.1G  953M  91% /
tmpfs                 900M     0  900M   0% /dev/shm
/dev/sda1             485M   33M  428M   7% /boot
/dev/sdb1             5.0G  4.5G  195M  96% /u01
/dev/sdd1             4.0G  1.1G  2.7G  28% /ftp
192.168.56.58:/nfs    4.0G   72M  3.7G   2% /nfs1

[root@dg01 ~]# mkdir /nfs2
[root@dg01 ~]# mount -t nfs 192.168.56.58:/nfs /nfs2
[root@dg01 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              19G   16G  1.7G  91% /
/dev/sda1              99M   22M   73M  23% /boot
/dev/sdb1             9.9G  6.6G  2.8G  71% /u01
tmpfs                 1.5G     0  1.5G   0% /dev/shm
/dev/sde1             7.9G  5.7G  1.9G  76% /opt
192.168.56.58:/nfs    4.0G   72M  3.7G   2% /nfs2

下面看看我们随便在哪台主机(客户端还是服务端)编写一个文件,看其他主机能否看见
[root@localhost nfs1]# cat /etc/issue > /nfs1/test.txt

[root@ogg nfs]# ls -l /nfs/test.txt
-rw-r--r-- 1 root root 75 Jul  8 02:49 /nfs/test.txt

[root@dg01 nfs2]# ls -l /nfs2/test.txt
-rw-r--r-- 1 root root 75 Jul  8 02:49 /nfs2/test.txt

Nfs的常用命令exportfs,主要用于查看挂载信息、重新挂载等
[root@ogg nfs]# exportfs -v
/nfs            192.168.56.*(rw,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)
[root@ogg nfs]# vi /etc/exports

/nfs 192.168.56.*(rw,async,no_root_squash)

[root@ogg nfs]# exportfs -avr
exporting 192.168.56.*:/nfs

[root@ogg nfs]# exportfs  -v
/nfs            192.168.56.*(rw,async,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)

-a表示全部挂载或者卸载
-r表示重新挂载
-u表示卸载一个或者多个目录
-v 显示共享的目录信息

看出这里第一次挂载时是sync实时同步磁盘,然后exportfs重新挂载后是async异步定期磁盘

Showmount可以查看nfs的共享情况,比如我们在nfs server端查看nfs的共享状态,这里可以得知nfs服务端将本地的 /nfs分别共享给了192.168.56.102和192.168.56.170两个client端。
[root@ogg nfs]# showmount -a  
All mount points on ogg.single:
192.168.56.102:/nfs
192.168.56.170:/nfs

还可以和其他本地磁盘一样将nfs挂载写到/etc/fstab文件中,开机自动进行挂载
[root@localhost nfs1]# vi /etc/fstab
。。。
192.168.56.58:/nfs      /nfs1                   nfs     defaults        0 0

关于nfs的内容其实不多,还是那句套话,dba需要掌握更多非数据库知识才能更好的完成工作,其实在很多资深dba眼里,存储主机这些都算作了dba所必须掌握的。

About xiaoyu

xiaoyu,享受数据库带给xiaoyu的乐趣! 13439818916@163.com 欢迎邮件联系讨论
This entry was posted in linux、unix、windows. Bookmark the permalink.