NFS即Nerwork File System(网络文件系统)的缩写,NFS最大的作用是可以通过网络让不同的机器、不同的平台彼此之间能够共享资源。
如上图所示,我们将NFS服务器设置一个共享目录/home/public,有权访问NFS服务器的NFS客户端就可以将共享目录挂在到自己文件系统的某个挂载点上。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h。
NFS服务器和客户端进行网络通讯之前,必须知道对方的对应的端口号才能进行数据传输,这就需要用到RPC(Remote Procedure Call)服务,即远程过程调用服务。
NFS支持的功能有很多,启动不同的功能会启用不同的程序,同时会使用一些端口(小于1024)来传输数据,因此NFS的功能所对应的端口号并不固定。(ps:因为功能程序的启动时间和顺序是不固定的,端口号也是随机分配的,所以NFS服务的功能所对应的端口号也是不固定的。)RPC就是用来统一管理NFS服务器端口的。
命令 | 解释 |
---|---|
uname -a | 查看内核/操作系统/CPU信息 |
head -n 1 /etc/issue | 查看操作系统版本 |
cat /proc/cpuinfo | 查看CPU信息 |
hostname | 查看计算机名 |
lspci -tv | 列出所有PCI设备 |
lsusb -tv | 列出所有USB设备 |
lsmod | 列出加载的内核模块 |
env | 查看环境变量资源 |
free -m | 查看内存使用量和交换区使用量 |
df -h | 查看各分区使用情况 |
du -sh <目录名> | 查看指定目录的大小 |
grep MemTotal /proc/meminfo | 查看内存总量 |
grep MemFree /proc/meminfo | 查看空闲内存量 |
uptime | 查看系统运行时间、用户数、负载 |
cat /proc/loadavg | 查看系统负载磁盘和分区 |
mount | column -t |
fdisk -l | 查看所有分区 |
swapon -s | 查看所有交换分区 |
hdparm -i /dev/hda | 查看磁盘参数(仅适用于IDE设备) |
dmesg | grep IDE |
ifconfig | 查看所有网络接口的属性 |
iptables -L | 查看防火墙设置 |
route -n | 查看路由表 |
netstat -lntp | 查看所有监听端口 |
netstat -antp | 查看所有已经建立的连接 |
netstat -s | 查看网络统计信息进程 |
ps -ef | 查看所有进程 |
top | 实时显示进程状态用户 |
w | 查看活动用户 |
id <用户名> | 查看指定用户信息 |
last | 查看用户登录日志 |
cut -d: -f1 /etc/passwd | 查看系统所有用户 |
cut -d: -f1 /etc/group | 查看系统所有组 |
crontab -l | 查看当前用户的计划任务服务 |
chkconfig –list | 列出所有系统服务 |
chkconfig –list | grep on |
rpm -qa | 查看所有安装的软件包 |
一共需要安装两款软件,分别是支持RPC服务的rpcbind和支持NFS服务的nfs-server。
NFS的服务都是通过RPC来具体实现的,所以要正常使用NFS服务,需要启动== rpcbind==来实现端口的映射工作。执行如下命令,安装并启动rpcbind:
sudo apt-get install rpcbind
nfs-kernel-server是提供nfs服务器的软件,提供文件系统的完整功能。这里要提醒一下,NFS服务器会直接使用到内核的模块,所以内核必须要支持 NFS 才行。如果操作系统的版本是自行编译的内核的话,需要注意编译NFS的内核支持。安装命令:
sudo apt-get install nfs-kernel-server
NFS服务器的主要配置文件就是:/etc/exports。不过这个配置文件不一定会存在,可能需要使用 vim 主动新建这个文件。
/etc/exports文件由以下两个选项构成:
[共享目录] [主机名或IP(权限参数,权限参数)]
每一行最前面是要分享出来的目录,目录可以依照不同的权限分享给不同的主机。若权限参数不止一个时,则以逗号 (,) 分开;且主机名与小括号是连在一起的。其中权限参数是可选的,当不指定权限参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay 当主机名或IP地址为空时,则代表共享给任意客户机提供服务。
参数 | 解释 |
---|---|
rw | 设置输出目录具有读写权限 |
ro | 设置输出目录只有读权限 |
参数 | 解释 |
---|---|
all_squash | squash翻译为压制,即将所有的远程访问用户(包括root)及其所属组的权限都压制到匿名用户或用户组(nfsnobody) |
no_all_squash | 与all_squash取反(默认设置) |
root_squash | root用户压制(释权),当登录NFS主机使用共享目录的使用者是root时,其权限将被转换成为匿名使用者,通常它的UID与GID都会变成nobody身份 |
no_root_squash | 如果登录NFS主机使用共享目录的使用者是root,那么对于这个共享的目录来说,它具有root的权限(默认设置) |
anonuid=xxx | 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx) |
anongid=xxx | 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx) |
参数 | 解释 |
---|---|
secure | 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置) |
insecure | 允许客户端从大于1024的tcp/ip端口连接服务器 |
sync | 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性 |
async | 将数据先保存在内存缓冲区中,必要时才写入磁盘 |
wdelay | 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置) |
no_wdelay | 若有写操作则立即执行,应与sync配合使用 |
subtree | 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置) |
no_subtree | 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率 |
配置完/etc/exports后,就可以启动NFS服务器了。
为了使NFS服务器能正常工作,需要启动rpcbind和nfs-kernel-server两个服务,并且rpcbind一定要先于nfs-kernel-server启动。
sudo service rpcbind start
sudo service nfs-kernel-server start
有时RPC服务的服务不叫rpcbind,叫portmap,启动不成功时可以换一下程序名试试。
若要开机自启动nfs服务,可以通过sysv-rc-conf配置自启动服务。
sudo sysv-rc-conf --level 35 rpcbind on
sudo sysv-rc-conf --level 35 nfs-kernel-server on
首先在客户端上建立一个挂载点:
sudo mkdir /mnt/nfs
然后将ip地址为192.168.12的NFS服务器的共享目录/tmp/mnt/nfs挂载到客户端的/mnt/nfs上:
sudo mount -t /mnt/nfs 192.168.12:/tmp/mnt/nfs
接着你就可以在客户端上访问服务器上的文件了。
参考链接:https://www.cnblogs.com/me80/p/7464125.html
参考链接:https://www.linuxidc.com/Linux/2018-03/151384.html