NFS会经常用到,用于在网络上共享存储。这样讲,你对NFS可能不太了解,笔者不妨举一个例子来说明一下NFS是用来做什么的。假如有三台机器A、B、C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到A、B、C。但是使用NFS只需要放到A上,然后A共享
本文将介绍怎么在Scientific Linux 6.3上搭建NFS服务端和客户端. NFS的意思是网络文件系统Network File System; 通过NFS,其客户端可以像在本地一样读取和写入远程NFS服务器.
1 备注信息
我使用了下面的两个Scientific Linux操作系统:
- NFS服务端: server.example.com, IP address: 192.168.0.100
- NF客户端: client.example.com, IP address: 192.168.0.101
2 安装NFS
服务端:
在NFS服务端伤感运行:
yum install nfs-utils nfs-utils-lib
然后我们给NFS创建一个系统startup连接并启动服务:
chkconfig –levels 235 nfs on
/etc/init.d/nfs start
客户端:
在客户端机器上安装NFS客户端,执行命令:
yum install nfs-utils nfs-utils-lib
3 “导出”服务器上的文件夹
服务端:
我想创建/home和/var/nfs 文件夹让客户端访问,所以就要“导出”这两个文件夹让客户端访问.
当客户端进入到共享的NFS服务端的时候,经常进来的用户是nobody. 但通常情况下nobody是没有权限进去/home 文件夹的 (我不建议给 nobody用户授权这个文件夹), 我们又要让nobody用户对 /home文件夹有写入权限, 那就要让NFS能以root用户登陆 (如果/home 文件夹为只读的话,肯定是进不来的). /var/nfs 文件夹不存在,所以我们创建下并给用户授权。在我测试的这两台系统上nobody 用户和nobody用户组的ID都是99.当我们尝试从客服端进入到/var/nfs的时候,遇到Permission denied错误。所以我就修改了权限(chmod 777 /var/nfs)这样每个用户都能进去。然后从可客户端写入/var/nfs文件夹的,但从客户端写入/var/nfs文件夹的时候只允许nobody用户组的用户,服务端上又没有这个nonexistant权限(服务器上nonexistant的ID为65534),所以我就修改/var/nfs文件夹的拥有者ID为65534并修改/var/nfs权限为775,这样客户端就可以写入了:
mkdir /var/nfs
chown 65534:65534 /var/nfs
chmod 755 /var/nfs
现在我们就在“导出”的NFS共享这里修改/etc/exports 文件夹. 我们指定/home 和/var/nfs 为NFS共享目录,然后让NFS以root的权限进入到/home
man 5 exports
vi /etc/exports
/home 192.168.0.101(rw,sync,no_root_squash,no_subtree_check) /var/nfs 192.168.0.101(rw,sync,no_subtree_check) |
(参数no_root_squash 就是指定已root登录/home.)
修改 /etc/exports后,我们执行
exportfs -a
生效
4 客户端上设置NFS共享
客户端:
首先我们在客户端上创建想要分享的NFS文件夹,如:
mkdir -p /mnt/nfs/home
mkdir -p /mnt/nfs/var/nfs
然后这么分配:
mount 192.168.0.100:/home /mnt/nfs/home
mount 192.168.0.100:/var/nfs /mnt/nfs/var/nfs
然后做为可以分享的
df -h
[root@client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_server2-LogVol00
9.7G 1.7G 7.5G 18% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 504M 39M 440M 9% /boot
192.168.0.100:/home 9.7G 1.7G 7.5G 19% /mnt/nfs/home
192.168.0.100:/var/nfs
9.7G 1.7G 7.5G 19% /mnt/nfs/var/nfs
[root@client ~]#
然后
mount
[root@client ~]# mount
/dev/mapper/vg_server2-LogVol00 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.0.100:/home on /mnt/nfs/home type nfs (rw,vers=4,addr=192.168.0.100,clientaddr=192.168.0.101)
192.168.0.100:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,vers=4,addr=192.168.0.100,clientaddr=192.168.0.101)
[root@client ~]#
5 测试
客服端上你可以尝试在NFS 共享上创建文件
客户端:
touch /mnt/nfs/home/test.txt
touch /mnt/nfs/var/nfs/test.txt
我们进入到服务端看看这两个文件有没有创建成功
服务端:
ls -l /home/
[root@server ~]# ls -l /home/
total 0
-rw-r–r– 1 root root 0 Dec 11 16:58 test.txt
[root@server ~]#
ls -l /var/nfs
[root@server ~]# ls -l /var/nfs
total 0
-rw-r–r– 1 nfsnobody nfsnobody 0 Dec 11 16:58 test.txt
[root@server ~]#
(Please note the different ownerships of the test files: the /home NFS share gets accessed as root, therefore /home/test.txt is owned by root; the /var/nfs share gets accessed asnobody/65534, therefore /var/nfs/test.txt is owned by 65534.)
6 开机的时候就设置NFS共享
为了避免每次手动去共享,我们可以修改 /etc/fstab ,这样开机的时候就自动共享了.
客户端:
打开/etc/fstab 然后添加下面的
vi /etc/fstab
[...] 192.168.0.100:/home /mnt/nfs/home nfs rw,sync,hard,intr 0 0 192.168.0.100:/var/nfs /mnt/nfs/var/nfs nfs rw,sync,hard,intr 0 0 |
你可以根据自己的需要修改rw,sync,hard,intr参数.
man nfs
测试是否生成 /etc/fstab 正常运行,重启客户端:
reboot
重启后你就发现了两个NFS共享的
df -h
[root@client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_server2-LogVol00
9.7G 1.7G 7.5G 18% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 504M 39M 440M 9% /boot
192.168.0.100:/home 9.7G 1.7G 7.5G 19% /mnt/nfs/home
192.168.0.100:/var/nfs
9.7G 1.7G 7.5G 19% /mnt/nfs/var/nfs
[root@client ~]#
和
mount
[root@client ~]# mount
/dev/mapper/vg_server2-LogVol00 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.0.100:/home on /mnt/nfs/home type nfs (rw,sync,hard,intr,vers=4,addr=192.168.0.100,clientaddr=192.168.0.101)
192.168.0.100:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,sync,hard,intr,vers=4,addr=192.168.0.100,clientaddr=192.168.0.101)
[root@client ~]#