NFS服务器

news2024/9/22 11:24:24

文章目录

  • NFS服务器
    • NFS的由来与功能
      • 什么是NFS(Network File System)
      • 什么是RPC(Remote Procedure Call)
      • NFS启动的RPC daemons
    • NFS Server 端的配置
      • 所需要的软件
      • NFS的软件结构
        • /etc/exports配置文件的语法与参数
      • 启动NFS
        • RPC服务的注册状况怎么查看(rpcinfo)
      • NFS的连接查看
        • showmount
        • exportfs
  • 手动搭建一个NFS服务器
    • NFS服务器配置
    • NFS客户端配置
  • 客户端可处理的挂载参数与开机挂载
    • NFS特殊的挂载参数
    • 使NFS开机即挂载
  • 无法挂载的原因分析
  • 总结

NFS服务器

NFS为Network File System 的简称,它的目的就算想让不同的机器、不同的操作系统可以彼此共享数据文件。

NFS的由来与功能

NFS这个通过网络共享文件的服务在搭建的时候是很简单的,不过,它最大的问题在于"权限"。因为在客户端与服务器端必须具备相同的账号才能够访问某些目录或文件。

另外,NFS的启动需要通过所谓的远程调用(RPC),也就是说,我们并不是只要启动NFS就可以了,还需要启动RPC这个服务才可以。

什么是NFS(Network File System)

NFS就是 Network File System 的缩写,意思就是网络文件系统,最初是由 Sun 这家公司发展出来的,他最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。所以,也可以简单地将它看做是一个文件服务器。这个NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中看来,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利。

image-20230617101749234

如上图,当NFS服务器配置好共享出来的 /home/sharefile 这个目录后,其他的NFS客户端就可以将这个目录挂载到自己的文件系统的某个挂载点(挂载点可以自定义)上。例如上图 NFS Client1 与 NFS Client2 挂载的目录就不相同。我只要在NFS Client 1 系统中进入 /home/data/sharefile 内,就可以看到NFS 服务器系统内的 /home/sharefile 目录下的所有数据了 (只要权限足够)。这个/home/data/sharefile 就好像NFS Client 1自己机器里面的一个分区,只要权限足够,就可以使用他。

NFS是一种用来共享文件的服务,它需要在服务器上开启一个特定的端口,一般是2049端口。但是因为文件系统很复杂,有时候NFS还需要启动其他的端口来传输数据,这些端口的号码是不确定的,可能是小于1024的任意一个端口。为了让客户端知道服务器端使用的是哪个端口,NFS会使用远程过程调用(RPC)协议来辅助。

什么是RPC(Remote Procedure Call)

NFS支持的功能相当多,而不同的功能都会使用不同程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口并不固定,而是随机取用一些未被使用的小于1024的端口用于传输。但如此一来会产生客户端连接服务器的同题,因此客户端需要知道服务器端的相关端口才能够连接。

RPC最主要的功能就是指定每个NFS功能所对应的 port number ,并且通知给客户端,让客户端可以连接到正确的端口上去。那RPC又是如何知道每个NFS的端口呢?这是因为当服务器在启动NFS时会随机选取数个端口,并主动向RPC注册,因此RPC可以知道每个端口对应的NFS功能。然后RPC又是固定使用port 111来监听客户端的需求,并向客户端响应正确的端口,因此使NFS的启动更为快捷了

启动NFS之前,RPC就要先启动了,否则NFS会无法向RPC注册,另外,RPC若重新启动,原来注册的数据会不见,因此RPC重新启动后,它管理的所有服务都需要重新启动以重新向RPC注册

image-20230617140326325

如上图所示,客户端有NFS文件访问需求时,它会如何向服务器端请求数据呢?

(1)客户端会向服务器端的RPC(port 111)发出NFS文件访问功能的查询要求

(2)服务器端找到对应的已注册的NFS daemon 端口后,会通知给客户端

(3)客户端了解正确的端口后,就可以直接与NFS daemon 连接

NFS启动的RPC daemons

NFS服务器正在启动的时候需要向RPC注册,所以NFS服务器也称为RPC Server之一。那么NFS服务器主要的任务是进行文件系统的共享,而文件系统的共享是与权限有关的。所以NFS服务器启动时至少需要两个daemons,一个管理客户端是否能够登录的问题,一个管理客户端能够取得的权限。如果还想管理quota的话,那么NFS还需要再加载其他的RPC程序。

以功能单纯的NFS服务器来说,需要启动以下daemon

  • rpc.nfsd

最主要的NFS服务提供程序。这个daemon 主要的功能就是管理客户端是否能够使用服务器文件系统挂载信息等,其中还包含判断这个登录用户的ID

  • rpc.mountd

这个daemon主要的功能,则是在于管理NFS的文件系统。当客户端顺利地通过rpc.nfsd登录服务器后,再它可以使用NFS服务器提供的文件之前,还会经过文件权限(就是-rwxrwxrwx与owner,group 那几个权限)的认证程序。它会去读NFS的配置文件 /etc/exports来比对客户端的权限,当通过这一关之后客户端就可以取得使用NFS文件的权限了。(这个daemon也是我们用来管理NFS共享目录的权限与安全设置的地方)

  • rpc.lockd(非必要)

这个daemon 可以用于管理文件的锁定(lock)方面。为何文件需要锁定呢?因为既然共享的NFS文件可以让客户端使用,那么当多各客户端同时尝试写入某个文件时,就可能对该文件造成一些问题。rpc.lockd则可以用来克服这些问题。但rpc.lockd必须要同时再客户端于服务器端都开启才行。此外,rpc.lockd也常与rpc.statd同时启动。

  • rpc.statd(非必要)

这个daemon 可以用来检查文件的一致性,于rpc.lockd有关。若发生因为客户端同时使用同一文件造成文件可能有所损毁时,rpc.statd 可以用来检测并尝试恢复该文件。与rpc.lockd一样,这个功能必须要在服务器端与客户端都启动才会生效。

NFS Server 端的配置

既然要使用NFS,就需要安装NFS所需要的软件。下面查询以下是否安装了所需要的软件

所需要的软件

  • RPC主程序:rpcbind

NFS其实可以视为一个RPC服务,而要启动任何一个RPC服务之前,都需要做好port的对应工作才行,这个工作其实就是rpcbind服务负责的。也就是说,在启动任何一个RPC服务之前,我们都需要启动rpcbind才行

  • NFS主程序:nfs-utils

就是提供rpc.nfsd及rpc.mountd 这两个NFS daemons 与其他相关文件与说明文件、可执行文件等的软件。这个是NFS服务所需要的主要软件

我们只需要执行一条命令即可安装两个软件

[root@localhost ~]# yum install -y nfs-utils

image-20230617200921270

查看是否安装了

[root@localhost ~]# rpm -qa |grep nfs
nfs-utils-1.3.0-0.68.el7.2.x86_64
[root@localhost ~]# rpm -qa |grep rpcbind
rpcbind-0.2.0-49.el7.x86_64

NFS的软件结构

  • 主要配置文件:/etc/exports

这个文件就是NFS的主要配置文件。

  • NFS文件系统维护命令:/usr/sbin/exportfs

这个是维护NFS共享资源的命令,我们可以利用这个命令重新共享/etc/exports 更新的目录资源、将NFS Server 共享的目录卸载或重新共享等,这是NFS系统里面相当重要的一个命令

  • 共享资源的日志文件:/var/lib/nfs/*tab

在NFS服务器中,日志文件都放置到 /var/lib/nfs/ 目录中,在该目录下有两个比较重要的日志文件,一个etab,主要记录了NFS所共享出来的目录的完整权限设置值,另一个是xtab,则记录了曾经连接到此NFS服务器的相关客户端的数据。

  • 客户端查询服务器共享资源的命令:/usr/sbin/showmount

这是另一个重要的NFS命令。exportfs用在NFS Server 端,而showmount 则主要用在Client端。这个showmount可以用来查看NFS共享出来的目录资源。

/etc/exports配置文件的语法与参数

至于NFS服务器的搭建很简单,你只要编辑好主要配置文件/etc/exports 之后,先启动rpcbind(若已经启动了,就不要重新启动),然后再启动NFS,NFS就成功了。

[root@localhost ~]# vim /etc/exports
/tmp    192.168.200.0/24(ro)localhost(rw) *.ev.ncku.edu.tw(ro,sync)
[共享目录]  [第一台主机(权限)]  [可用主机名表示] [可用通配符表示]

每一行最前面是要共享出来的目录,是以目录为单位的,然后这个目录可以依照不同的权限共享给不同的主机。

例如上面的例子,要将 /tmp 分别共享给 3 个不同的主机或网络。记得主机后面以小括号"()“定义权限参数,若权限参数不止一个时,则以逗号”,“分开,并且主机名与小括号是连载一起的。在这个文件内也可以利用”#"来进行注释。

至于主机名的设置主要有以下几种方式:

  • 可以使用完整的IP或者是网络号,例如:192.168.100.10或192.168.100.0/24或192.168.100.0/255.255.255.0都可以
  • 可以使用主机名,但这个主机名必须要在/etc/hosts内,或可使用DNS找到该名称才行。反正重点是可找到IP就行。如果是主机名的话,那么可以支持通配符,例如"*“或”?"

/etc/exports配置文件的权限参数

  • rw:可读写方式共享

  • ro:只读方式共享

  • sync:表示同步方式共享,服务器将写操作同步到硬盘之后再返回成功信息给客户端,可靠性更高,但效率较低。

  • async:表示异步方式共享,服务器将写操作放入缓存之后就返回成功信息给客户端,效率更高,但可靠性较低。

  • no_root_squash:表示客户端以root身份访问时,也具有root权限

  • root_squash:表示客户端以root身份访问时,root权限被限制为匿名用户权限

  • all_squash:不论登录NFS的用户身份为何,它的身份都会被压缩成为匿名用户。

  • anonuid:anon指的是"anonymous"(匿名用户)前面关于*_squash提到的匿名用户的UID设置值,你可以自行设置这个UID的值。当然这个UID必须存在于/etc/passwd当中

  • anongid:anonuid指定是UID而anongid则是组的GID

还有其他参数请查看man exports

例题

让root保留root的权限

假如想将 /tmp 共享出去给大家使用,由于这个目录本来就是大家都可以读写的,因此想让所有的人都可以访问。此外,要让root写入的文件还具有root的权限,那应该如何设置配置文件?

[root@localhost ~]# vim /etc/exports
/tmp *(rw,no_root_squash)

同一目录针对不同范围开放不同权限

假如要将一个公共的目录/home/public开放,但是需要限定在局域网 192.168.200.0/24这个网络且加入csqgroup的用户才能够读写,其他来源的用户则只能读取

[root@localhost ~]# mkdir /home/public
[root@localhost ~]# setfacl -m g:csqgroup:rwx /home/public
[root@localhost ~]# vim /etc/exports
/home/public  192.168.200.0/24(rw)      *(ro)

仅给某个单一主机使用的目录设置

加入要将一个私人的目录/home/test开放给192.168.100.10 这个Client 端的机器来使用,该如何设置?假设具有完整的权限的用户是csq

[root@localhost ~]# mkdir /home/test
[root@localhost ~]# setfacl -m u:csq:rwx /home/test/
[root@localhost ~]# vim /etc/exports
/home/test 192.168.100.10(rw)

开放匿名访问的情况

假如要让 *.centos.csq 网络的主机,登录到NFS主机时,可以访问 /home/linux,但是在写入数据时,希望它们的UID与GID都变成45这个身份的用户,假设NFS服务器上的UID 45与GID 45的用户/组名为 nfsanon

[root@localhost ~]# groupadd -g 45 nfsanon
[root@localhost ~]# useradd -u 45 -g nfsanon nfsanon
[root@localhost ~]# mkdir /home/linux
[root@localhost ~]# setfacl -m u:nfsanon:rwx /home/linux/
[root@localhost ~]# vim /etc/exports
/home/linux  *.centos.csq(rw,all_squash,anonuid=45,anongid=45)

启动NFS

配置文件搞定后,就可以启动NFS了,启动NFS还需要rpcbind的协助

[root@localhost ~]# systemctl start  rpcbind.service
[root@localhost ~]# systemctl start nfs.service

启动之后,会出现一个port 111的 那就是rpcbind

接下来看看NFS到底开放了哪些端口

image-20230617233622866

NFS开启了很多port,不过最主要的端口是:

  • rpcbind启动的port在111,同时启动在UDP与TCP

  • NFS本身的服务启动在port 2049上

  • 其他rpc.* 服务启动的port 则是随机产生的,因此需向port 111注册

RPC服务的注册状况怎么查看(rpcinfo)

rpcinfo -p     [IP|hostname]
rpcinfo -t|-u   IP|hostname  程序名称
选项:
-p:针对某IP(未写则默认为本机)显示出所有的port与program的信息
-t:针对某主机的某个程序检查其TCP数据包所在的软件版本
-u:针对某主机的某支程序检查其UDP数据所在的软件版本

显示出目前这台主机的RPC状态

[root@localhost ~]# 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  60979  status
    100024    1   tcp  43043  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
.....
#   程序代号 NFS版本 数据包类型 端口  服务名称

针对nfs这个程序检查其他相关的软件版本信息(仅查看TCP数据包)

[root@localhost ~]# rpcinfo -t localhost nfs
program 100003 version 3 ready and waiting
program 100003 version 4 ready and waiting
# 可以发现提供NFS的版本共有二种,分别是2、3版

新的版本传输速度较快。如果rpcinfo无法输出,那就表示注册的数据有问题,需要重新启动rpcbind与nfs

NFS的连接查看

showmount

在NFS服务器配置妥当之后,我们可以在Server端先自我测试一下是否可以连接。具体做法就是利用showmount这个命令来查看

showmount [-ae] [hostname|IP]
选项:
-a:显示当前主机与客户端的NFS连接共享的状态
-e:显示某台主机的 /etc/exports 所共享的目录数据

1. 显示出刚刚我们所设置号的相关exports共享目录信息
[root@localhost ~]# showmount -e localhost
Export list for localhost:
/home/test 192.168.100.10

NFS关于目录权限设置的数据非常之多,/etc/exports 只是比较特别的权限参数而已,还有很多默认参数,可以查看/var/lib/nfs/etab

[root@localhost ~]# cat /var/lib/nfs/etab 
/home/test      192.168.100.10(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
# 可以看到除了 rw、sync、root_squash
# 其实还有 anonuid 及 anongid 等的设置。

exportfs

如果想要重新处理/etc/export文件,当重新设置完 /etc/exports 后需不需要重新启动NFS?不需要。如果重新启动NFS的话,要得再向RPC注册,很麻烦,这个时候通过exportfs这个命令帮忙

exportfs [-aruv]
选项:
-a:全部挂载(或卸载) /etc/exports 文件中的设置
-r:重新挂载 /etc/exports 里面的设置,此外,同步更新/etc/exports 及/var/lib/nfs/xtab内容
-u:卸载某一目录
-v:在export 的时候将共享的目录显示到屏幕上

重新挂载一次 /etc/exports 的设置

[root@localhost ~]# exportfs -arv
exporting 192.168.100.10:/home/test

将已经共享的NFS目录资源,全部都卸载

[root@localhost ~]# exportfs -auv
# 这时候再使用 showmount -e localhost 就看不到任何资源了

手动搭建一个NFS服务器

NFS服务器配置

  1. 检查并安装软件
[root@nfs-server ~]# rpm -qa |grep nfs-utils
nfs-utils-1.3.0-0.68.el7.2.x86_64
[root@nfs-server ~]# rpm -qa |grep rpcbind
rpcbind-0.2.0-49.el7.x86_64
# 如果没有查到就要安装   yum install -y nfs-utils
  1. 启动服务
[root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl enable rpcbind
[root@nfs-server ~]# systemctl start nfs
[root@nfs-server ~]# systemctl enable nfs
# 一般来说系统默认会启动rpcbind,不过以防自己忘记,所以启动一下
  1. 创建共享目录
[root@nfs-server ~]# mkdir /opt/linuxshare
[root@localhost ~]# vim /etc/exports
/opt/linuxshare  192.168.200.0/24(rw,sync,no_root_squash)
  1. 生效配置
[root@nfs-server ~]# exportfs -arv
exporting 192.168.200.0/24:/opt/linuxshare
  1. 查看服务端的共享目录及网段
[root@nfs-server ~]# showmount -e 192.168.200.10
Export list for 192.168.200.10:
/opt/linuxshare 192.168.200.0/24   # 这个就是我们等下要挂载的目录!
  1. firewall放行nfs
[root@nfs-server ~]# firewall-cmd --add-service=nfs --permanent
[root@nfs-server ~]# firewall-cmd --reload
[root@nfs-server ~]# firewall-cmd  --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client nfs ssh   # 默认是没有放行nfs规则的
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

NFS客户端配置

  1. 检查并安装软件
[root@nfs-client ~]# rpm -qa |grep nfs-utils
nfs-utils-1.3.0-0.68.el7.2.x86_64
[root@nfs-client ~]# rpm -qa |grep rpcbind
rpcbind-0.2.0-49.el7.x86_64
  1. 启动服务
[root@nfs-client ~]# systemctl start rpcbind
[root@nfs-client ~]# systemctl enable rpcbind
[root@nfs-client ~]# systemctl start nfs
[root@nfs-client ~]# systemctl enable nfs
# 如果没有查到就要安装   yum install -y nfs-utils
  1. 建立挂载点,并实际挂载
[root@nfs-client ~]# mkdir /opt/linuxshare
[root@nfs-client ~]# mount -t nfs 192.168.200.10:/opt/linuxshare/ /opt/linuxshare/nfs/
[root@nfs-client ~]# df -h
文件系统                        容量  已用  可用 已用% 挂载点
devtmpfs                        3.8G     0  3.8G    0% /dev
tmpfs                           3.9G     0  3.9G    0% /dev/shm
tmpfs                           3.9G   12M  3.8G    1% /run
tmpfs                           3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root          50G  1.5G   49G    3% /
/dev/mapper/centos-home          42G   33M   42G    1% /home
/dev/sda1                      1014M  151M  864M   15% /boot
tmpfs                           781M     0  781M    0% /run/user/0
192.168.200.10:/opt/linuxshare   50G  1.5G   49G    3% /opt/linuxshare/nfs

这样就可以将数据挂载进来,需要注意的是NFS文件的格式。以后你进入/opt/linuxshare/nfs/ 目录就相当于进入了 192.168.200.10 远程主机的 /opt/linuxshare 目录。

image-20230618122656930

  1. 取消挂载
[root@nfs-client ~]# umount /opt/linuxshare/nfs/
[root@nfs-client ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 3.8G     0  3.8G    0% /dev
tmpfs                    3.9G     0  3.9G    0% /dev/shm
tmpfs                    3.9G   12M  3.8G    1% /run
tmpfs                    3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  1.5G   49G    3% /
/dev/mapper/centos-home   42G   33M   42G    1% /home
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    781M     0  781M    0% /run/user/0
# 挂载点没有了

客户端可处理的挂载参数与开机挂载

客户端的挂载很简单,不过有个问题,如果你刚刚挂载到主机/opt/linuxshare/nfs 的文件系统中含有一个 script,而且这个script 的内容为 rm -rf /,文件权限为 555,如果你好奇执行了这个脚本,那就坏了,因为整个系统都会被删除

所以,NFS服务器需要保护之外,使用NFS文件系统也需要自我保护,那么如何自我保护?可以通过 mount 的命令参数实现

参数参数意义系统默认值
suid
nosuid
当挂载的分区上面有任何SUID的二进制脚本程序时,只要使用nosuid就能够取消SUID的功能suid
rw
ro
你可以指定该文件系统是只读或可读可写rw
dev
nodev
是否可以保留设备文件的特殊功能?一般来说只有dev这个目录才会有特殊的设备,可以选择nodevdev
exec
noexec
是否具有执行 二进制文件的权限?如果要保护文件系统,最好不要允许用户进行挂载与卸载nouser
user
nouser
是否允许用户进行文件的挂载与卸载操作?如果要保护文件系统,最好不要允许用户进行挂载与卸载。nouser
auto
noauto
这个auto指的是mount -a 时,会不会被挂载到项目。如果不需要这个分区随时被挂载,可以设置为noautoauto

一般来说,如果是NFS服务器所提供的只是类似 /home下面的文件,应该不需要可以执行、SUID设备文件,因此在挂载的时候,可以使用这样的命令

[root@nfs-client ~]# mount -t nfs -o nosuid,noexec,nodev,rw 192.168.200.10:/home/data/   /home/data/nfs/
[root@nfs-client ~]# mount |grep addr
192.168.200.10:/home/data on /home/data/nfs type nfs4 (rw,nosuid,nodev,noexec,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.200.20,local_lock=none,addr=192.168.200.10)

NFS特殊的挂载参数

除了mount参数之外,其实针对NFS,Linux还提供了不少额外参数

参数参数功能默认参数
fg
bg
当执行挂载时,该挂载的行为会在前台(fg)还是在后台(bg)执行?若在前台执行,则mount会持续尝试挂载,直到成功为止;若为后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的程序允许。如果网络连接不稳定,或是服务器常常需要开关机,那简易使用bg比较妥当fg
soft
hard
如果是hard情况,则当两者之间有任何一台主机脱机。则RPC会持续地呼叫,直到对方恢复连接为止。如果是soft的话,那RPC会在暂停后重复呼叫,非持续呼叫。同上,如果服务器开开关关建议使用softhard
intr当使用上面提到的hard方式挂载时,若加上intr这个参数,则当RPC持续呼叫时,该次的呼叫是可以被中断的

更多参数查看man nfs

[root@nfs-client nfs]# mount -t nfs -o nosuid,noexec,nodev,rw -o bg,soft  192.168.200.10:/home/data/ /home/data/nfs/

则当 192.168.200.10 这台服务器因为某些原因脱机时,NFS可以继续在后台重复呼叫,直到NFS服务器再度上线为止。这对于持续性操作还是有用的!

使NFS开机即挂载

修改 /etc/fstab 配置文件,加入 NFS 共享目录的挂载设置(文件系统类型为nfs)。
挂载参数建议添加_netdev(设备需要网络)

[root@nfs-client ~]# vi /etc/fstab
192.168.200.10:/home/data   /home/data/nfs      nfs    defaults,_netdev 0 0

image-20230618131708976

无法挂载的原因分析

  • 客户端的主机名或IP网段不被允许

  • 服务器或客户端某些服务器未启动

  • 被防火墙拦截

总结

  • Network File system(NFS)可以让主机之间通过网络共享彼此的文件与目录
  • NFS主要是通过RPC来继续文件共享的目的,所以Server与Client RPC一定要启动才行
  • NFS的配置文件是/etc/exports这个文件
  • NFS的权限可以查看 /var/lib/nfs/etab,至于日志文件可以参考/var/lib/nfs/xtab:该文件记录了当前NFS服务器上所有活动的文件系统挂载点和客户端的连接信息
  • NFS服务器与客户端的用户账号名称、UID最好要一致,避免权限错乱
  • NFS服务器在更改 /etc/exports 这个文件后,可以通过exportfs这个命令来重新挂载共享目录
  • 可以使用rpcinfo 来查看RPC 程序之间的关系
  • NFS服务器在配置的时候,就必须要考虑到Client 端登录的权限问题,很多时候无法写入或者无法共享,主要是Linux权限设置问题导致的
  • NFS客户端通过使用 showmount 、 mount、umount来使用NFS主机提供的共享目录
  • NFS可以挂载参数,如 bg、soft、nosuid、noexec、nodev等来达到保护自己文件系统的目标
  • 自动挂载fstab 挂载的时候建议添加_netdev(设备需要网络)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

认识服务器

1、查看操作系统的信息 CentOS 输入:cat /etc/os-release 字段含义解释NAME操作系统名称CentOS LinuxVERSION操作系统版本7 (Core)ID操作系统标识centosID_LIKE相关操作系统标识rhel fedoraVERSION_ID操作系统版本号7PRETTY_NAME可读性较好的操作系统名称CentOS L…

产品如何有效把控产品上线质量

很多人乍看这个标题,可能有些惊讶。产品上线质量不是由测试来主要负责的么,怎么产品也需要来把控这个事情? 诚然,从具体分工而言,产品的线上质量主要由测试来负责,产品按时按量完成由项目项目经理把控。但…

详谈数据中心网络中的四种虚拟化技术:VXLAN、NVGRE、STT和SPBM

概要 在现代的数据中心网络中,虚拟化技术被广泛应用以提供更高的可扩展性、灵活性和效率。数据中心网络虚拟化允许多个虚拟网络在共享的物理基础设施上运行,使得网络资源的管理更为简单和高效。本文将详细介绍数据中心网络中的四种不同类型的虚拟化技术&…

全网超全,接口测试用例设计——常见问题和风险,测试不背锅...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口测试用例设计…

【开源工具】使用Whisper提取视频、语音的字幕

这里写目录标题 一、语音转字幕操作步骤1、下载安装包Assets\WhisperDesktop.zip[^2]2、加载模型2.1 下载模型2.1.1 进入Hugging Face[^3]的仓库2.1.2 选择需要下载的模型2.1.3 配置模型路径 3、语音转字幕4、实时语言转录功能 二、相关简介[^1]特点开发人员指南构建说明其他注…

【MySql】表的内连接和外连接

文章目录 内连接外连接左外连接右外连接 OJ题目 本篇博客主要介绍的内容是表的连接,在MySql中表的连接分为内连接和外连接,下面,我们直接进入主题把 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前…

Ubuntu Win10 github.com访问很慢的解决办法

win10 请看这里: 解决国内 github.com 打不开的最最最准确方法_github打不开_杨大脸I的博客-CSDN博客 Ubuntu 请看这里: 看了上面的就应该知道, 需要两步骤:1、修改host文件;2、刷新DNS 1、修改host文件 Ubuntu修改hosts文件_ub…

PySpark集群环境安装(HA-Standalone模式)

PySpark是Python中的一个库, 由Spark官方提供. 专供用户使用Python语言操作Spark 1. 首先安装python环境 基于anaconda的虚拟环境方案,来安装python。因为anaconda可以虚拟出多个Python环境, 且各个环境相对独立,能够解决python版本的兼容性问题 1.1 …

Rust的特征对象

文章目录 Rust的特征对象前言在屏幕上绘制各种UI组件 Rust的特征对象 前言 特征对象不像泛型和impl trait这种零成本抽象,特征对象是在runtime时确定具体类型,有一定的性能开销。当我们需要函数参数是一类实现了特定trait的类型时,这时候就…

4个Camtasia2023隐藏新功能,99%的人都不知道!

在今年5月,全能录屏软件 Camtasia 迎来了2023新版,带来非常多新功能,让制作录屏视频的效果再上一层楼!所有购买过旧版 Camtasia 的老用户,都可以享受优惠升级。 Camtaisa 获取: http://souurl.cn/YWkrO7 更…

【Java高级语法】(六)内部类Inner Class:这可能是史上最全的关于内部类的学习资料~

Java高级语法详解之包装类 :one: 概念:two: 优缺点:three: 使用2.1 成员内部类2.2 局部内部类2.3 匿名内部类2.4 静态内部类2.5 小结:外部类访问四种内部类的特点2.6 小结:其他类访问四种内部类的特点 :four: 内部类与外部类的关系:five: 应用场景:six: …

云贝餐饮连锁独立版 v2.6.1+公众号+小程序端+抖音端端+全插件免授权版安装配置教程

云贝餐饮系统应该持续做好多年了,以前的版本都需要授权一直没使用,优选源码网整体测试下感觉从体验上还有逻辑设计上都非常不错,首页、会员中心支持DIY装修,配送支持多种平台对接,基本上餐饮行业需要的功能都能满足了。…

收件地址解析成 省+市+区+详细地址的形式

项目中的源代码在我的GitHub:https://github.com/weitw/address-analyzer 先看效果: 如上图,address数输入的地址,Address对象是解析后的地址。可以支持逆推上一级,且支持地址白话解析。 一、项目介绍 1、解析规则 …

13年测试老鸟,带你详探服务端的接口测试,测试内卷之路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 服务器的接口测试…

Tinywebserver项目运行(docker部署mysql)

. 运行项目运行时遇到的一些其他问题重启mysql容器时发现端口被占用 前言 Tinywebserver是github上一个十分优秀的开源项目,帮助初学者学习如何搭建一个服务器. 本文讲述如何在使用docker部署mysql容器的情况下跟该项目进行连接并将项目运行起来,而不是…

萌萌哒的八戒1

拿到了一个图片,根据图片下方的字符,结合远古时期这个提示,想到了古典密码里的猪圈密码 挨个输入得到when the pig want to eat,套上flag

PyTorch 深度学习 || 2. 全连接网络 | Ch2.3 PyTorch 全连接自编码网络的无监督学习

PyTorch 全连接自编码网络的无监督学习 文章目录 PyTorch 全连接自编码网络的无监督学习1. 数据去噪1.1 计算库和数据准备工作1.2 构建自编码网络1.3 调用主函数1.4 可视化 2. 数据的重建与降维2.1 计算模块和数据的准备2.2 自编码网络数据准备2.3 自编码网络的构建2.4 自编码网…

深入理解程序的结构

文章目录 前言一、程序的组成二、未初始化和初始化变量保存地址三、栈什么时候被创建四、内存映射段总结 前言 本篇文章我们来深入的理解一下理解程序的结构。 一、程序的组成 通常情况下,一个可执行程序由以下几个不同的段组成: 1.代码段 (Text Seg…

怎么针对微服务架构做单元测试?

Martin Fowler 是国际著名的软件专家,敏捷开发方法的创始人之一,现为 ThoughtWorks 公司的首席科学家。在面向对象分析设计、UML、模式、软件开发方法学、XP、重构等方面,都扮演着举足 什么是微服务? 微服务的由来 微服务的前身…

笑谈之传统行业的软件测试

最近进入一传统企业做O2O社区,在里面,项目管理一团混乱,上层对软件测试的理解更是匮乏。今天没有技术,仅是对这些现象的吐槽。当然我相信传统行业不都是这样,所以大家仅当笑谈。 产品经理写的需求文档永远是拿来作为做…