A-A+

RedHat搭建NFS文件共享服务器的方法

2015年12月13日 站长资讯 暂无评论

首先说一下什么是NFS,其实就是Network File System的缩写,是sun公司开发的。能够实现不同的机器,不同的操作系统乐意彼此共享文件。在我前面的文章中有提到Samba,它也是一种文件共享服务器。不同的是,NFS实现的是linux客户机之间的文件共享,而Samba主要是为了实现windows和linux之间的文件共享,前者相对简单,后者相对复杂,但是复杂必然有复杂的道理。

下面我介绍下如何搭建NFS服务器,以及客户机如何能够实现文件共享:

场景:

某单位需要配置 NFS 服务器, 为另外一台运行 Oracle 数据库的 Linux 服务器提供备份存储。

主机名 IP 地址

nfs1.abc.local 192.168.1.241

db1.abc.local 192.168.1.242

2. 实验环境

2.1. 操作系统安装

  1. # cat /etc/redhat-release    
  2. Red Hat Enterprise Linux Server release 6.4 (Santiago)   
  3. # uname -a   
  4. Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29   
  5. 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux   

2.2. 服务器基本配置

修改 IP 地址。 (注意:根据您的实现环境进行配置)

  1. # vi /etc/sysconfig/network-scripts/ifcfg-eth0   
  2. DEVICE=eth0   
  3. TYPE=Ethernet   
  4. ONBOOT=yes   
  5. NM_CONTROLLED=yes   
  6. BOOTPROTO=static   
  7. IPADDR=192.168.1.241   
  8. NETMASK=255.255.255.0   
  9. GATEWAY=192.168.1.1   

修改主机名

  1. # vi /etc/sysconfig/network   
  2. NETWORKING=yes   
  3. #HOSTNAME=localhost.localdomain   
  4. HOSTNAME=nfs1.abc.local   
  5.    
  6. # service network restart   

为了方便实验,将防火墙关闭。

# service iptables stop

# chkconfig iptables off

同时关闭 selinux。

  1. # vi /etc/sysconfig/selinux   
  2. # This file controls the state of SELinux on the system.   
  3. SELINUXcan take one of these three values:   
  4. #     enforcing - SELinux security policy is enforced.   
  5. #     permissive - SELinux prints warnings instead of enforcing.   
  6. #     disabled - No SELinux policy is loaded.   
  7. #SELINUX=enforcing   
  8. SELINUX=disabled   
  9. SELINUXTYPEcan take one of these two values:   
  10. #     targeted - Targeted processes are protected,   
  11. #     mls - Multi Level Security protection.   
  12. SELINUXTYPE=targeted  

重新启动以便生效。

# reboot

3. NFS 服务器安装与配置

3.1. 安装 NFS 服务器组件

3.1.1. 方法 1:通过 RPM 来进行安装

  1. # mkdir /mnt/cdrom   
  2. # mount /dev/cdrom /mnt/cdrom/   
  3. mount: block device /dev/sr0 is write-protected, mounting read-only   
  4. # cd /mnt/cdrom/Packages/    
  5. # ls nfs*   
  6. nfs4-acl-tools-0.3.3-6.el6.x86_64.rpm    
  7. nfs-utils-1.2.3-36.el6.x86_64.rpm    
  8. nfs-utils-lib-1.1.5-6.el6.i686.rpm    
  9. nfs-utils-lib-1.1.5-6.el6.x86_64.rpm   
  10. # rpm -ivh nfs-utils-1.2.3-36.el6.x86_64.rpm    
  11. error: Failed dependencies:   
  12.         keyutils >= 1.4-4 is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  13.         libevent is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  14.         libevent-1.4.so.2()(64bit) is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  15.         libgssglue is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  16.         libgssglue.so.1()(64bit) is needed by nfs-utils-1:1.2.3-36.el6.x86_64  
  17.   
  18.   
  19.         libgssglue.so.1(libgssapi_CITI_2)(64bit) is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  20.         libnfsidmap.so.0()(64bit) is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  21.         libtirpc is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  22.         libtirpc.so.1()(64bit) is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  23.         nfs-utils-lib >= 1.1.0-3 is needed by nfs-utils-1:1.2.3-36.el6.x86_64   
  24.         rpcbind is needed by nfs-utils-1:1.2.3-36.el6.x86_64   

解决包的依赖性

  1. # rpm -ivh nfs-utils-1.2.3-36.el6.x86_64.rpm \   
  2. nfs-utils-lib-1.1.5-6.el6.x86_64.rpm \   
  3. rpcbind-0.2.0-11.el6.x86_64.rpm keyutils-1.4-4.el6.x86_64.rpm  \   
  4. libevent-1.4.13-4.el6.x86_64.rpm \   
  5. libgssglue-0.1-11.el6.x86_64.rpm  \   
  6. libtirpc-0.2.1-5.el6.x86_64.rpm    
  7. Preparing...                ########################################### [100%]   
  8.    1:libgssglue             ########################################### [ 14%]   
  9.    2:libtirpc               ########################################### [ 29%]   
  10.    3:rpcbind                ########################################### [ 43%]   
  11.    4:libevent               ########################################### [ 57%]   
  12.    5:keyutils               ########################################### [ 71%]   
  13.    6:nfs-utils-lib          ########################################### [ 86%]   
  14.    7:nfs-utils              ########################################### [100%]  

3.1.2. 方法 2:通过 YUM 来进行安装

通过 YUM 来解决包的相关性,需要配置yum源

# mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom/

mount: block device /dev/sr0 is write-protected, mounting read-only

# vi /etc/yum.repos.d/rhel-dvd.repo

创建新的文件,添加如下内容:

  1. [rhel-dvd]   
  2. name=Red Hat Enterprise Linux $releasever - $basearch - DVD   
  3. baseurl=file:///mnt/cdrom/Server/   
  4. enabled=1   
  5. gpgcheck=1   
  6. gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release   
  7. # yum list | grep nfs   
  8. nfs-utils.x86_64           1:1.2.3-36.el6  rhel-dvd    
  9. nfs-utils-lib.i686         1.1.5-6.el6     rhel-dvd    
  10. nfs-utils-lib.x86_64       1.1.5-6.el6     rhel-dvd    
  11. nfs4-acl-tools.x86_64      0.3.3-6.el6     rhel-dvd    
  12. sblim-cmpi-nfsv3.i686      1.1.1-1.el6     rhel-dvd   
  13.   
  14. sblim-cmpi-nfsv3.x86_64    1.1.1-1.el6     rhel-dvd    
  15. sblim-cmpi-nfsv4.i686      1.1.0-1.el6     rhel-dvd    
  16. sblim-cmpi-nfsv4.x86_64    1.1.0-1.el6     rhel-dvd     
  17. # yum -y install nfs-utils  

很方便地就安装完毕了

3.2. 启动 NFS 服务

NFS 依赖 rpcbind 服务,设置为其自动启动

由于nfs服务依赖于rpc(远程过程调用)服务,所以在启动nfs服务之前,需要先启动rpc服务

  1. # chkconfig rpcbind on   
  2. # service rpcbind start   
  3. # service nfs start   
  4. Starting NFS services:                                     [  OK  ]   
  5. Starting NFS quotas:                                       [  OK  ]   
  6. Starting NFS mountd:                                       [  OK  ]   
  7. Starting NFS daemon:                                       [  OK  ]   
  8. # tail /var/log/messages 中   
  9. rpc.mountd[1797]: Version 1.2.3 starting   
  10. kernel: NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state   
  11. recovery directory   
  12. kernel: NFSD: starting 90-second grace period   
  13. # chkconfig nfs on  

3.3. 配置 NFS 服务器

查看当前共享的 NFS 信息

# showmount -e localhost

Export list for localhost: 空白无输出

下面,做一个最基础的测试。创建 export 目录,分配权限

  1. # mkdir /nfsdata   
  2. # ll /nfsdata/ -d   
  3. drwxr-xr-x 2 root root 4096 Jul 31 15:16 /nfsdata/   
  4. # chmod a+w /nfsdata/   
  5. # ll /nfsdata/ -d   
  6. drwxrwxrwx 2 root root 4096 Jul 31 15:16 /nfsdata/   

配置 export 文件

# vi /etc/exports

添加如下内容,注意选项中逗号之间没有空格!

/nfsdata *(rw,root_squash,no_all_squash,sync)

这里的意思是说,需要共享/nfsdata这个目录,对所有客户端(*)都是可读写的(rw),并且是异步方式来访问。 因为不设置其他参数,客户端创建文件或目录时默认的属主和组就是nfsnobody,即使客户端使用的账号是root。

  1. # exportfs -r   
  2.    
  3. Tip: -r Reexport all directories, synchronizing /var/lib/nfs/etab with /etc/exports. This option   
  4. removes entries in /var/lib/nfs/etab which have been deleted from /etc/exports, and removes   
  5. any entries from the kernel export table which are no longer valid.   
  6. # showmount -e localhost   
  7. Export list for localhost:   
  8. /nfsdata *   

自己连接一下自己,测试一下。

# mkdir /mnt/nfs

# mount 127.0.0.1:/nfsdata/ /mnt/nfs

查看 mount 的信息

  1. # mount   
  2. /dev/mapper/VolGroup-lv_root on / type ext4 (rw)   
  3. proc on /proc type proc (rw)   
  4. sysfs on /sys type sysfs (rw)   
  5. devpts on /dev/pts type devpts (rw,gid=5,mode=620)   
  6. tmpfs on /dev/shm type tmpfs (rw)   
  7. /dev/sda1 on /boot type ext4 (rw)   
  8. none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)   
  9. /dev/sr0 on /mnt/cdrom type iso9660 (ro)   
  10. sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)   
  11. nfsd on /proc/fs/nfsd type nfsd (rw)   
  12. 127.0.0.1:/nfsdata/ on /mnt/nfs type nfs (rw,vers=4,addr=127.0.0.1,clientaddr=127.0.0.1)   

检查目录是否可以写入。

  1. # touch /mnt/nfs/testfile1.txt   
  2. # ll /mnt/nfs/testfile1.txt    
  3. -rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 31 15:28 /mnt/nfs/testfile1.txt  

注:如果以后直接在服务器上的共享目录创建文件或目录,要记得将属主和组设置为nfsnobody。否则客户端在访问时会出现“Permission denied”。

3.4. 配置 NFS 客户机

NFS 客户机也需要安装 nfs-utils 包。

  1. # showmount -e 192.168.1.241   
  2. Export list for 192.168.1.241:   
  3. /nfsdata *   
  4. [root@db1 ~]# mount 192.168.1.241:/nfsdata /mnt/nfs/   
  5. [root@db1 ~]# ls /mnt/nfs/ -l   
  6. total 0   
  7. -rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 31 15:28 testfile1.txt   
  8. [root@db1 ~]# echo test >> /mnt/nfs/testfile1.txt    
  9. [root@db1 ~]# ls /mnt/nfs/testfile1.txt    
  10. /mnt/nfs/testfile1.txt   
  11. [root@db1 ~]# ls /mnt/nfs/testfile1.txt  -l   
  12. -rw-r--r-- 1 nfsnobody nfsnobody 5 Jul 31 15:47 /mnt/nfs/testfile1.txt  

4.排错

4.1 启动NFS服务时出错

原因可能是rpcbind没有启动

# service rpcbind start

# service nfs start

4.2 权限出错

是文件系统的权限不足

# chmod a+w /nfsdata

标签:

给我留言