Linux上NFS 服务端 客户端的安装及配置
$ cat /proc/version Linux version 3.10.0-327.el7.x86_64 (mockbuild@x86-034.build.eng.bos.redhat.com) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Oct 29 17:29:29 EDT 2015
# 安装 $ yum install nfs-utils rpcbind -y # 检查 $ rpm -qa nfs-utils rpcbind rpcbind-0.2.0-32.el7.x86_64 nfs-utils-1.3.0-0.21.el7.x86_64
$ systemctl start rpcbind $ systemctl start nfs $ ps -ef|grep rpc rpc 960 1 0 2020 ? 00:01:15 /sbin/rpcbind -w rpcuser 11716 1 0 13:57 ? 00:00:00 /usr/sbin/rpc.statd --no-notify root 11724 2 0 13:57 ? 00:00:00 [rpciod] root 11728 1 0 13:57 ? 00:00:00 /usr/sbin/rpc.idmapd root 11743 1 0 13:57 ? 00:00:00 /usr/sbin/rpc.mountd root 12483 20145 0 13:57 pts/1 00:00:00 grep --color=auto rpc $ ps -ef|grep nfs root 11755 2 0 13:57 ? 00:00:00 [nfsd4] root 11756 2 0 13:57 ? 00:00:00 [nfsd4_callbacks] root 11760 2 0 13:57 ? 00:00:00 [nfsd] root 11761 2 0 13:57 ? 00:00:00 [nfsd] root 11762 2 0 13:57 ? 00:00:00 [nfsd] root 11763 2 0 13:57 ? 00:00:00 [nfsd] root 11764 2 0 13:57 ? 00:00:00 [nfsd] root 11765 2 0 13:57 ? 00:00:00 [nfsd] root 11766 2 0 13:57 ? 00:00:00 [nfsd] root 11767 2 0 13:57 ? 00:00:00 [nfsd] root 12644 20145 0 13:57 pts/1 00:00:00 grep --color=auto nfs $ lsof -i:111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 960 rpc 6u IPv4 90650864 0t0 UDP *:sunrpc rpcbind 960 rpc 8u IPv4 90650866 0t0 TCP *:sunrpc (LISTEN) rpcbind 960 rpc 9u IPv6 90650867 0t0 UDP *:sunrpc rpcbind 960 rpc 11u IPv6 90650869 0t0 TCP *:sunrpc (LISTEN) $ rpcinfo -p localhost program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 51177 status 100024 1 tcp 55076 status 100005 1 udp 20048 mountd 100005 1 tcp 20048 mountd 100005 2 udp 20048 mountd 100005 2 tcp 20048 mountd 100005 3 udp 20048 mountd 100005 3 tcp 20048 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 60484 nlockmgr 100021 3 udp 60484 nlockmgr 100021 4 udp 60484 nlockmgr 100021 1 tcp 38648 nlockmgr 100021 3 tcp 38648 nlockmgr 100021 4 tcp 38648 nlockmgr
$ systemctl enable rpcbind $ systemctl enable nfs Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. $ systemctl list-unit-files --type=service|grep "enabled"|egrep "rpcbind|nfs" nfs-server.service enabled nfs.service enabled
$ mkdir /data/nfs-server-images $ chown -R nfsnobody.nfsnobody /data/nfs-server-images $ ls -ld /data/nfs-server-images drwxr-x--- 2 nfsnobody nfsnobody 4096 1月 6 14:18 /data/nfs-server-images
$ cat>>/etc/exports<<EOF #NFS server share directories /data/nfs-server-images 10.1.236.0/24(ro,sync,no_root_squash) EOF $ cat /etc/exports #NFS server share directories /data/nfs-server-images 10.1.236.0/24(ro,sync,no_root_squash)
$ systemctl reload nfs $ cat /var/lib/nfs/etab /data/nfs-server-images 10.1.236.0/24(ro,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,ro,secure,root_squash,no_all_squash)
$ showmount -e 10.1.236.58 Export list for 10.1.236.58: /data/nfs-server-images 10.1.236.0/24
$ yum install nfs-utils rpcbind -y $ rpm -qa nfs-utils rpcbind nfs-utils-1.3.0-0.21.el7.x86_64 rpcbind-0.2.0-32.el7.x86_64
$ systemctl start rpcbind $ ps -ef|grep rpc rpc 9119 1 0 14:38 ? 00:00:00 /sbin/rpcbind -w root 9201 6816 0 14:39 pts/0 00:00:00 grep --color=auto rpc [root@ocdp-42-59 data]# lsof -i:111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 9119 rpc 6u IPv4 2910094566 0t0 UDP *:sunrpc rpcbind 9119 rpc 8u IPv4 2910094568 0t0 TCP *:sunrpc (LISTEN) rpcbind 9119 rpc 9u IPv6 2910094569 0t0 UDP *:sunrpc rpcbind 9119 rpc 11u IPv6 2910094571 0t0 TCP *:sunrpc (LISTEN)
$ systemctl enable rpcbind $ systemctl list-unit-files --type=service|grep "enabled"|grep "rpcbind"
$ showmount -e 10.1.236.58 Export list for 10.1.236.58: /data/nfs-server-images 10.1.236.0/24
$ mkdir /data/nfs-client-images $ mount -t nfs 10.1.236.58:/data/nfs-server-images /data/nfs-client-images $ echo "mount -t nfs 10.1.236.58:/data/nfs-server-images /data/nfs-client-images">>/etc/rc.local #提示:也可以放入/etc/fstab,如果要放入/etc/fstab,需启用netfs服务。这是因为fstab会优先于网络被Linux系统加载。网络没启动时执行fstab会导致连不上NFS服务器端,无法实现开机自动挂载。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rootvg-lv_root 36G 25G 12G 69% / devtmpfs 16G 0 16G 0% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 1.6G 15G 10% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/vda1 509M 110M 399M 22% /boot tmpfs 3.2G 0 3.2G 0% /run/user/995 tmpfs 3.2G 0 3.2G 0% /run/user/0 tmpfs 3.2G 0 3.2G 0% /run/user/1039 /dev/vdb 493G 185G 283G 40% /data 10.1.236.58:/data/nfs-server-images 493G 129G 339G 28% /data/nfs-client-images #我们刚挂载的
在NFS Server共享目录添加一个文件
$ ll nfs-server-images/ 总用量 4 -rw-r----- 1 root root 12 1月 6 14:35 test.txt
在NFS Client共享目录查看文件已经同步
$ ll /data/nfs-client-images/ total 4 -rw-r----- 1 root root 12 Jan 6 14:35 test.txt
在NFS Client尝试删除文件
# 在2.5步我们设置共享目录权限为(ro,sync),表示只读权限,并且请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回 $ rm test.txt rm: remove regular file ‘test.txt’? y rm: cannot remove ‘test.txt’: Read-only file system
权限 | 说明 |
---|---|
rw | 表示可读写权限 |
ro | 表示只读权限 |
sync | 请求或写入数据时,数据同步写入到NFSServer的硬盘才返回(优点,数据安全不会丢,缺点,性能比不启用该参数要差) |
async | 写入时数据会先写到内存缓冲区,只到硬盘有空档才会再写入磁盘,这样可以提高写入效率!;风险为若服务器宕机或不正常关机,会损失缓冲区为写入磁盘的数据(解决办法:服务器主板加电池或加UPS不间断电源)! |
no_root_squash | 访问NFS Server共享的用户如果是root的话,它对该共享目录具有root权限。这个配置原本是为无盘客户端准备的,用户避免应用 |
root_squash | 如果访问NFS Server共享目录的用户是root,则它的权限将被压缩或匿名用户,同时它的UID和GID通常会变成nfsnobody帐号身份 |
all_squash | 不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody帐号身份。在早期多个NFS客户端同时写入NFS Server数据时,这个参数很有用*在生产中配置NFS的重要技巧1)、确保所有客户端服务器对NFS共享目录都具备相同的用户访问权限 a、all_squash把所有客户端都压缩成固定的匿名用户(UID相同) b、就是aninuid,anongid指定的UID和GID的用户2)、所有的客户端和服务端都需要有一个相同的UID和GID用户,即nfsnobody(UID必须相同) |
anonuid | 参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多NFS Clients时,如多台Web Server共享一个NFS目录,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可 |
anongid | 同anonuid,区别就是把uid(用户id)换成gid(组id) |
noatime | 在文件系统上不更新inode访问时间 |
nosuid | 不允许设置用户标识或设置组标识为才能生效 |
intr | 当服务器宕机或者无法到达时,允许中断NFS请求 |
noexec | 当服务器宕机或者无法到达时,允许中断NFS请求 |
rsize=8192和wsize=8192 | 通过设定大的同时传输的数据块大小(bytes),以提高NFS读写的速度 |
nodiratime | 不允许更新文件系统上的目录 inode 访问记录 |
设置共享目录只读是防止客户端删除image
发现把目录设置为只读ro之后,NFS端无法解压tar包,或者拷贝tar包到yum repo目录
解决办法:
# 修改权限,需要no_root_squash $ cat >/etc/exports<<EOF #NFS server share directories /data/nfs-server-images 10.1.236.0/24(ro,sync,no_root_squash) EOF $ systemctl reload nfs