Linux NFS 搭建与配置
程序员文章站
2022-06-16 11:25:25
...
一、NFS 介绍
NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。简单的理解,NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务。
NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
二、nfs服务器部署
yum install nfs-utils rpcbind -y
2、NFS服务器操作
# mkdir -p /app/k8s ##NFS挂载目录
# chmod 777 -R /app/k8s
# systemctl start rpcbind ##启动rpc服务
# systemctl enable rpcbind
# systemctl start nfs ##启动NFS服务
# systemctl enable nfs
## NFS默认配置文件路径是:/etc/exports
## /etc/exports配置文件的格式是:
## NFS共享的目录 NFS客户端地址(参数1,参数2)
## NFS共享的目录:为NFS服务器端要共享的实际目录,要用决定路径,如(/data)。注意共享目录的本地权限,需要读写权限,一定要让本地目录可以被NFS客户端的用户读写
## NFS客户端地址:为NFS服务器端授权的可访问的共享目录的NFS客户端地址,可以为单独的ip地址或者主机名,域名等,也可以是整个网段的地址
# echo "/app/k8s 192.101.11.159(rw,no_root_squash,sync)" >>/etc/exports ##NFS 客户端IP 192.101.11.159
# echo "/app/k8s 192.101.11.160(rw,no_root_squash,sync)" >>/etc/exports ##NFS 客户端IP 192.101.11.160
# echo "/app/k8s 192.101.11.161(rw,no_root_squash,sync)" >>/etc/exports ##NFS 客户端IP 192.101.11.161
# echo "/app/k8s 192.101.10.0/24(rw,no_root_squash,sync)" >>/etc/exports ##NFS 客户端IP 192.101.10.0---192.101.10.255
# exportfs -r #使配置生效
# systemctl restart nfs
# systemctl status nfs
注意:必须要先启动rpc服务,然后再启动NFS服务
# 查看 NFS 服务项 rpc 服务器注册的端口列表
$ rpcinfo -p localhost
# 服务端看下是否正确加载了设置的 /etc/exports 配置
$ showmount -e localhost
Export list for localhost:
/app/k8s 192.101.11.161,192.101.11.160,192.101.11.159
参数说明:
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_squash root 用户具有根目录的完全管理访问权限
anonuid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID
anongid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID
三、NFS客户端部署
yum install nfs-utils rpcbind -y ##不需要启动nfs服务
4、NFS客户端操作
# mkdir -p /app/k8s ##挂载NFS目录
# systemctl start rpcbind
# systemctl enable rpcbind
# mount -t nfs 192.101.11.156:/app/k8s /app/k8s
# df -h | grep 192.101.11.156
192.101.11.156:/app/k8s 98G 39G 60G 40% /app/k8s
## 卸载已挂载的NFS共享目录
# umount /app/k8s
四、启动自动挂载nfs文件
格式:
<server>:</remote/export> </local/directory> nfs < options> 0 0
# vi /etc/fstab
192.101.11.156:/app/k8s /app/k8s nfs defaults 0 0
保存退出,重启系统,查看/app/k8s 有没有自动挂载
# df -h | grep 192.101.11.156
192.101.11.156:/app/k8s 98G 39G 60G 40% /app/k8s
五、相关命令
1、exportfs
如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:
# exportfs [-aruv]
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 在export的时候,将详细的信息输出到屏幕上。
具体例子:
# exportfs -au 卸载所有共享目录
# exportfs -rv 重新共享所有目录并输出详细信息
2、nfsstat
查看NFS的运行状态,对于调整NFS的运行有很大帮助。
3、rpcinfo
查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些。
4、showmount
-a 显示已经于客户端连接上的目录信息
-e IP或者hostname 显示此IP地址分享出来的目录
5、netstat
可以查看出nfs服务开启的端口,其中nfs 开启的是2049,portmap 开启的是111,其余则是rpc开启的。
最后注意两点,虽然通过权限设置可以让普通用户访问,但是挂载的时候默认情况下只有root可以去挂载,普通用户可以执行sudo。
NFS server 关机的时候一点要确保NFS服务关闭,没有客户端处于连接状态!通过showmount -a 可以查看,如果有的话用kill killall pkill 来结束,(-9 强制结束)
NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。简单的理解,NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务。
NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
二、nfs服务器部署
yum install nfs-utils rpcbind -y
2、NFS服务器操作
# mkdir -p /app/k8s ##NFS挂载目录
# chmod 777 -R /app/k8s
# systemctl start rpcbind ##启动rpc服务
# systemctl enable rpcbind
# systemctl start nfs ##启动NFS服务
# systemctl enable nfs
## NFS默认配置文件路径是:/etc/exports
## /etc/exports配置文件的格式是:
## NFS共享的目录 NFS客户端地址(参数1,参数2)
## NFS共享的目录:为NFS服务器端要共享的实际目录,要用决定路径,如(/data)。注意共享目录的本地权限,需要读写权限,一定要让本地目录可以被NFS客户端的用户读写
## NFS客户端地址:为NFS服务器端授权的可访问的共享目录的NFS客户端地址,可以为单独的ip地址或者主机名,域名等,也可以是整个网段的地址
# echo "/app/k8s 192.101.11.159(rw,no_root_squash,sync)" >>/etc/exports ##NFS 客户端IP 192.101.11.159
# echo "/app/k8s 192.101.11.160(rw,no_root_squash,sync)" >>/etc/exports ##NFS 客户端IP 192.101.11.160
# echo "/app/k8s 192.101.11.161(rw,no_root_squash,sync)" >>/etc/exports ##NFS 客户端IP 192.101.11.161
# echo "/app/k8s 192.101.10.0/24(rw,no_root_squash,sync)" >>/etc/exports ##NFS 客户端IP 192.101.10.0---192.101.10.255
# exportfs -r #使配置生效
# systemctl restart nfs
# systemctl status nfs
注意:必须要先启动rpc服务,然后再启动NFS服务
# 查看 NFS 服务项 rpc 服务器注册的端口列表
$ rpcinfo -p localhost
# 服务端看下是否正确加载了设置的 /etc/exports 配置
$ showmount -e localhost
Export list for localhost:
/app/k8s 192.101.11.161,192.101.11.160,192.101.11.159
参数说明:
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_squash root 用户具有根目录的完全管理访问权限
anonuid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID
anongid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID
三、NFS客户端部署
yum install nfs-utils rpcbind -y ##不需要启动nfs服务
4、NFS客户端操作
# mkdir -p /app/k8s ##挂载NFS目录
# systemctl start rpcbind
# systemctl enable rpcbind
# mount -t nfs 192.101.11.156:/app/k8s /app/k8s
# df -h | grep 192.101.11.156
192.101.11.156:/app/k8s 98G 39G 60G 40% /app/k8s
## 卸载已挂载的NFS共享目录
# umount /app/k8s
四、启动自动挂载nfs文件
格式:
<server>:</remote/export> </local/directory> nfs < options> 0 0
# vi /etc/fstab
192.101.11.156:/app/k8s /app/k8s nfs defaults 0 0
保存退出,重启系统,查看/app/k8s 有没有自动挂载
# df -h | grep 192.101.11.156
192.101.11.156:/app/k8s 98G 39G 60G 40% /app/k8s
五、相关命令
1、exportfs
如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:
# exportfs [-aruv]
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 在export的时候,将详细的信息输出到屏幕上。
具体例子:
# exportfs -au 卸载所有共享目录
# exportfs -rv 重新共享所有目录并输出详细信息
2、nfsstat
查看NFS的运行状态,对于调整NFS的运行有很大帮助。
3、rpcinfo
查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些。
4、showmount
-a 显示已经于客户端连接上的目录信息
-e IP或者hostname 显示此IP地址分享出来的目录
5、netstat
可以查看出nfs服务开启的端口,其中nfs 开启的是2049,portmap 开启的是111,其余则是rpc开启的。
最后注意两点,虽然通过权限设置可以让普通用户访问,但是挂载的时候默认情况下只有root可以去挂载,普通用户可以执行sudo。
NFS server 关机的时候一点要确保NFS服务关闭,没有客户端处于连接状态!通过showmount -a 可以查看,如果有的话用kill killall pkill 来结束,(-9 强制结束)