NFS

http://blog.csdn.net/zhangyang0402/article/details/5021028




NFS意为网络文件系统,是一种linux下的文件共享方式,有点像windows下的网上邻居
在ubuntu下配置nfs是一件非常简单的事, 先说一下基本流程:
首先要有一台nfs服务器,在这台服务器上安装nfs-kernel-server,配置要共享的目录,启动服务就OK了!
然 后是客户端的配置,客户端先安装nfs-common,再将服务器共享目录mount到本地目录即可。


服务器端:
1、安装服务器 软件
代码:
sudo aptitude install  nfs-kernel-server


2、配置共享目录
代码:
sudo vi /etc/exports


一个典型的共享目录配置如下:
代码:
/home *(rw,sync,no_subtree_check)




/home 是要共享的目录


*是允许访问的计算机,可以是以下内容
单个机器:一个全限定域名(能够被服务器解析)、主机名(能够被服务器解 析)或IP地址。
通配符指定的主机名,使用 * 或 ?字符来指定一个字符串匹配,IP地址中不使用通配符,*代表允许所有计算机访问共享目录
IP 网络:使用a.b.c.d/z,a.b.c.d是网络,z是子网掩码中的位数(如192.168.0.0/24)。另一种可以接受的格式是 a.b.c.d/netmask,a.b.c.d是网络,netmask是子网掩码(如192.168.70.8/255.255.255.0)。


() 内是共享选项
rw是指客户端拥有读写权限,还有一个ro选项,代表只读
sync是指同步写入资料到内存与硬盘中,与之相反的选项是 async
no_subtree_check:不检测子目录,提高性能(摘自网络,未验证)
root_squash:如果客户端使用 root访问共享目录,会被当作匿名用户(也就是说,权限变的很小,比较安全)
no_root_squash:客户端使用root访问共享目录时 还是拥有root权限,极不安全
all_squash:无论客户端使用什么用户访问共享目录都会被当作匿名用户
其它选项参考man exports


配置完以后重启一下服务器:
代码:
sudo /etc/init.d/nfs-kernel-server restart




客 户端:
1、
代码:
sudo aptitude search  nfs-common


2、
代码:
sudo mount 192.168.1.2:/home /media
#映射共享目录,192.168.1.2是服务器地址,/home是服务器的共享目录, /media是映射到的本地目录




如果要开机自动映射,修改/etc/fstab即可
代码:
192.168.1.2:/home   /media   nfs   defaults   0   0
如果要开机自动映射,即修改那个/etc/fstab文件,最好在挂载选项里加一个nolock,要不然似乎挂载不了,会阻塞,导致系统不能正常启动。
到这里nfs基本配置完成了,但大多数情况下是不能正常运行的,
因为还涉及到用户权限的问题:linux下文件都有u(所属用户)、g(所属 组)、o(其它)三组权限,本地文件很简单,直接根据登录用户即可判断权限,
但对于共享文件,是根据客户端访问时使用的uid和gid来判断的。
例 如服务器上有个文件所属的uid是1000(为简便不考虑gid),权限是700,现在共享出来了,客户端来访问它,客户端登录的uid为900,
这 时客户端是无法查看和修改这个文件的,怎么办?
1、服务器修改文件所属uid为900;
2、客户端新建一个uid为1000的用户并用它 来访问(通常使用NIS实现)。
这两种方法皆可,实际上保持客户端访问的uid和共享文件所属uid一致就行




测试了一 下,ubuntu 9.10下不加nolock能挂,但不知道会不会有隐患
测试中发现了一个新问题,开机自动挂载可能会发现有类似下面的提示:
mountall: Event failed
mount.nfs: DNS resolution failed for 192.168.1.2: Name or service not known
mountall: mount /media [714] terminated with status 32
mountall: Filesystem could not be mounted: /media
猜测是mount的时候网络相关服务还没准备好


网上找 到了两种解决方案:
1、客户修改/etc/network/interfaces,修改对应的网卡,下面是我的:
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
当 eth0是通过dhcp自动获取IP的时候会报错,改成静态IP仅仅提示mountall: Event failed,其它的错误没有了
2、不 使用/etc/fstab自动挂载,在/etc/rc.local中第一行加入
mount 192.168.1.2:/home /media



一、基本概念

NFS:Network File System,即网络文件系统.

简单地说,一台服务器共享目录(提供NFS服务),客户机可将服务器上的共享目录挂载到本地,从而共享信息。

客户端通过RPC获得服务器的提供NFS的端口,并与服务器建立连接。

 

二、检查NFS相关软件是否安装

[root@centos ~]# rpm -qa|grep portmap

portmap-4.0-65.2.2.1

[root@centos ~]# rpm -qa|grep nfs

nfs-utils-lib-1.0.8-7.2.z2

nfs-utils-1.0.9-40.el5

 

若未安装,请找到相应的RPM包安装。

 

三、NFS 服务器端配置

1.启用服务(portmap 和nfs)

 

[root@localhost ~]# service portmap status

portmap (pid 2612) is running...

[root@localhost ~]# service nfs status

rpc.mountd is stopped

nfsd is stopped

rpc.rquotad is stopped

[root@localhost ~]# service nfs start

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

 

2.配置文件(/etc/exports)

#开头的行表示注释

格式:  share_dir    client_host(permission1,permission2,...,permissionn)

参数:

(1)share_dir

共享目录,必须是目录,若为文件,则在挂载时会出错.

若目录名含有空格等字符,须用双引号

(2)client_host

可以是单个主机(10.226.70.32),也可以是网络段(10.226.70.0/24),支持通配符*和?

(3)permission

ro: 只读(read-only)

rw:读和写(read-write)

root_squash:压缩root用户。当客户端以root挂载时,则NFS服务器将root视为匿名用户服务(nfsnobody)

no_root_squash:不压缩root用户。当客户端以root挂载时,则NFS服务器仍将root视为root用户,不太安全。

sync:同步写磁盘

async:异步写磁盘。

 

注:

(1)多个权限间用逗号隔开

例如:

/testnfs        10.226.70.0/24(rw,sync,no_root_squash)

 

将服务器的/testnfs目录共享给10.226.70.0/24网段,属于这个网段的主机有读写、同步写磁盘和不压缩root用户的权限。

 

(2)修改/etc/exports后,要使修改后的文件生效,需使用exportfs命令或重新启动nfs服务

exportfs命令

[root@centos /]# exportfs -rv

exporting 10.226.70.0/24:/testnfs

 

重新启动nfs服务

[root@centos /]# service nfs restart

Shutting down NFS mountd:                                  [  OK  ]

Shutting down NFS daemon:                                  [  OK  ]

Shutting down NFS quotas:                                  [  OK  ]

Shutting down NFS services:                                [  OK  ]

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

 

3.showmount命令

显示NFS服务器上的mount信息

 

(1) showmount -a  列出被mount的目录及客户端主机或IP

[root@centos /]# showmount -a

All mount points on centos:

10.226.70.32:/testnfs/test

 

(2) showmount -d  只列出被mount的目录

[root@centos /]# showmount -d

Directories on centos:

/testnfs/test

 

(3) showmount -e  显示NFS服务器上的export list

[root@centos /]# showmount -e

Export list for centos:

/testnfs  10.226.70.0/24

/testnfs2 10.226.70.0/24

 

四、客户端访问NFS共享目录

假设10.226.70.32主机访问NFS服务器10.226.70.30上的目录/testnfs

[root@localhost ~]# mount -t nfs -o rw 10.226.70.30:/testnfs /mnt/cdrom

客户端10.226.70.32将NFS服务器10.226.70.30上的目录/testnfs挂载到本地/mnt/cdrom

 

卸载挂载的目录

[root@localhost ~]# umount /mnt/cdrom


****************************************************************************************


文中使用的是rhel4 版本的linux,其他版本会有不同。

服务器端:

1、配置/etc/exports

格式说明:

共享目录

指定ip地址的主机(192.168.1.123)/网段中所有主机(192.168.10.0/24)

(共享参数)

/u01/workspace  192.168.10.0/24(rw,sync)

/u01/archives   192.168.10.0/24(rw,sync)

Nfs 访问权限说明

               ro                     

只读访问

        rw            

         读写访问

        sync          

         所有数据在请求时写入共享

        async        

          NFS在写入数据前可以相应请求

        secure        

         NFS通过1024以下的安全TCP/IP端口发送

        insecure       

        NFS通过1024以上的端口发送

        wdelay          

       如果多个用户要写入NFS目录,则归组写入(默认)

        no_wdelay  

            如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

        hide                   

在NFS共享目录中不共享其子目录

        no_hide                

共享NFS目录的子目录

        subtree_check    

      如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

        no_subtree_check 

      和上面相对,不检查父目录权限

        all_squash       

      共享文件的UID和GID映射匿名用户anonymous,适合公用目录。

        no_all_squash   

       保留共享文件的UID和GID(默认)

        root_squash     

       root用户的所有请求映射成如anonymous用户一样的权限(默认)

        no_root_squas   

       root用户具有根目录的完全管理访问权限

        anonuid=xxx     

       指定NFS服务器/etc/passwd文件中匿名用户的UID

2、重启服务器端的nfs服务:

 service portmap restart

 service nfs restart

使修改生效

3、配置客户端

mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,timeo=600,actimeo=0 192.168.10.121:/u01/archives /u01/archives

mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,timeo=600,actimeo=0 192.168.10.121:/u01/workspace /u01/workspace

/etc/Fstab

192.168.1.101:/oracle/archive /oracle/archive    nfs    defaults       0 0 

或者/etc/rc.d/rc.local 使之开机启动

mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,timeo=600,actimeo=0 192.168.10.121:/u01/archives /u01/archives

mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,timeo=600,actimeo=0 192.168.10.121:/u01/workspace /u01/workspace



你可能感兴趣的:(NFS)