Linux系统运维-服务

NFS会经常用到,用于在网络上共享存储。

我举个例子给伙伴们简单说下NFS共享存储的用法。比如:假如有三台机器A, B, C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到A, B, C. 但是使用NFS只需要放到A上,然后A共享给B和C即可。访问的时候,B和C是通过网络的方式去访问A上的那个目录的。 

配置NFS服务 

CentOS上使用NFS服务,需要安装两个包(nfs-utils和rpcbind), 不过当使用yum安装nfs-utils时会把rpcbind一起安装上:

[root@mytest ~]# cat /etc/redhat-release

CentOS Linux release 7.9.2009 (Core) 

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

首先是修改配置文件,默认该文件为空,现在编辑配置文件:

[root@mytest ~]# cat /etc/exports

/nfstest/ 192.168.174.0/24(rw,sync,all_squash,anonuid=501,anongid=501) 

这个配置文件就这样简单一行。共分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个IP也可以是一个IP段)第三部分就是小括号里面的,为一些权限选项。关于第三部分,我给伙伴们简单介绍一下: 

rw :读写;

ro :只读;

sync :同步模式,内存中数据时时写入磁盘;

async :不同步,把内存中数据定期写入磁盘中;

no_root_squash :加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;

root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;

all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;

anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。

介绍了上面的相关的权限选项后,再来分析一下阿铭刚刚配置的那个/etc/exports文件。其中要共享的目录为/home,信任的主机为192.168.174.0/24这个网段,权限为读写,同步,限定所有使用者,并且限定的uid和gid都为501。 

如上编辑好配置文件后,启动NFS服务:

注意:在启动nfs服务之前,需要先启动rpcbind服务,之前CentOS老版本中并不是rpcbind, 而是叫做portmap.

[root@mytest ~]# systemctl status rpcbind.service

● rpcbind.service - RPC bind service

   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)

   Active: active (running) since Tue 2022-12-13 18:22:42 CST; 1 months 26 days ago

 Main PID: 746 (rpcbind)

   CGroup: /system.slice/rpcbind.service

           └─746 /sbin/rpcbind -w

 

Dec 13 18:22:42 localhost.localdomain systemd[1]: Starting RPC bind service...

Dec 13 18:22:42 localhost.localdomain systemd[1]: Started RPC bind service.

[root@mytest ~]# systemctl status nfs

● nfs-server.service - NFS server and services

   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)

   Active: inactive (dead)

[root@mytest ~]# systemctl start nfs

[root@mytest ~]# systemctl status nfs

● nfs-server.service - NFS server and services

   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)

   Active: active (exited) since Wed 2023-02-08 10:38:33 CST; 1s ago

  Process: 7901 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)

  Process: 7885 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)

  Process: 7881 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)

 Main PID: 7885 (code=exited, status=0/SUCCESS)

   CGroup: /system.slice/nfs-server.service

 

Feb 08 10:38:33 mytest systemd[1]: Starting NFS server and services...

Feb 08 10:38:33 mytest systemd[1]: Started NFS server and services. 

客户端上挂载nfs

客户端在挂载NFS之前,我们需要先看一看服务端都共享了哪些目录,这需要使用showmount命令,但是这个命令是nfs-utils这个包所带的,所以同样需要安装nfs-utils:

[root@localhost ~]# ifconfig

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.174.132  netmask 255.255.255.0  broadcast 192.168.174.255

        inet6 fe80::20c:29ff:fe00:63a7  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:00:63:a7  txqueuelen 1000  (Ethernet)

        RX packets 24941  bytes 29590195 (28.2 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 10085  bytes 1002875 (979.3 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

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

 

看看服务器端都共享了哪些目录:

[root@localhost ~]# showmount -e 192.168.174.131

Export list for 192.168.174.131:

/nfstest 192.168.174.0/24

 

如上可以看到刚才我们在服务端配置的nfs共享信息。 showmount -e 加IP就可以查看NFS的共享情况,上例中,就可以看到192.168.174.131的共享目录为/nfstest,信任主机为192.168.174.0/24这个网段。

 

接下来在客户端上挂载服务端的nfs:

[root@localhost ~]# mount -t nfs 192.168.174.131:/nfstest/  /mnt/

 

[root@localhost ~]# df -h

Filesystem                Size  Used Avail Use% Mounted on

devtmpfs                  898M     0  898M   0% /dev

tmpfs                     910M     0  910M   0% /dev/shm

tmpfs                     910M   18M  893M   2% /run

tmpfs                     910M     0  910M   0% /sys/fs/cgroup

/dev/mapper/centos-root    17G  2.0G   16G  12% /

/dev/sda1                1014M  154M  861M  16% /boot

tmpfs                     182M     0  182M   0% /run/user/0

192.168.174.131:/nfstest   17G  3.4G   14G  20% /mnt

 

如上用 df -h 命令可以看到多出来一个/mnt分区,它就是NFS共享的目录了! 

 

另外还有一个常用的命令那就是exportfs,它的常用选项为[-aruv].

-a :全部挂载或者卸载;

-r :重新挂载;

-u :卸载某一个目录;

-v :显示共享的目录;

使用exportfs命令,当改变/etc/exports配置文件后,不用重启nfs服务直接用这个exportfs即可。我接下来做个测试:

[root@mytest ~]# cat /etc/exports

/nfstest/ 192.168.174.0/24(rw,sync,all_squash,anonuid=501,anongid=501)

/tmp/ 192.168.174.0/24(rw,sync,no_root_squash) 

然后服务端上执行命令:

[root@mytest ~]# exportfs -arv

exporting 192.168.174.0/24:/tmp

exporting 192.168.174.0/24:/nfstest 

在之前的命令中用到了mount命令来挂载nfs,其实mount这个nfs服务还是有些说法的。首先是用-t nfs 来指定挂载的类型为nfs。另外在使用nfs时,常用一个选项就是 -o nolock 了,即在挂载nfs服务时,不加锁。 在客户端上执行:

[root@localhost ~]# mkdir /test

[root@localhost ~]# mount -t nfs -o nolock 192.168.174.131:/tmp/ /test/

 

我们还可以把要挂载的nfs目录写到client上的/etc/fstab文件中,挂载时只需要执行 mount -a 即可。在 /etc/fstab里加一行:

[root@localhost ~]# cat /etc/fstab

 

#

# /etc/fstab

# Created by anaconda on Mon Dec 12 23:51:37 2022

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/centos-root /                       xfs     defaults        0 0

UUID=d9e01893-3922-4697-8d2a-2374089a1625 /boot                   xfs     defaults        0 0

/dev/mapper/centos-swap swap                    swap    defaults        0 0

192.168.174.131:/tmp/                      /test nfs       nolock        0 0

 

因为刚刚挂载过,所以先卸载:

[root@localhost ~]# umount /test

[root@localhost ~]# df -h

Filesystem                Size  Used Avail Use% Mounted on

devtmpfs                  898M     0  898M   0% /dev

tmpfs                     910M     0  910M   0% /dev/shm

tmpfs                     910M   18M  893M   2% /run

tmpfs                     910M     0  910M   0% /sys/fs/cgroup

/dev/mapper/centos-root    17G  2.0G   16G  12% /

/dev/sda1                1014M  154M  861M  16% /boot

tmpfs                     182M     0  182M   0% /run/user/0

192.168.174.131:/nfstest   17G  3.4G   14G  20% /mnt

 

然后执行:

[root@localhost ~]# mount -a

[root@localhost ~]# df -h

Filesystem                Size  Used Avail Use% Mounted on

devtmpfs                  898M     0  898M   0% /dev

tmpfs                     910M     0  910M   0% /dev/shm

tmpfs                     910M   18M  893M   2% /run

tmpfs                     910M     0  910M   0% /sys/fs/cgroup

/dev/mapper/centos-root    17G  2.0G   16G  12% /

/dev/sda1                1014M  154M  861M  16% /boot

tmpfs                     182M     0  182M   0% /run/user/0

192.168.174.131:/nfstest   17G  3.4G   14G  20% /mnt

192.168.174.131:/tmp       17G  3.4G   14G  20% /test 

如上这样也可以挂载上,而且以后开机会自动挂载上!
posted on 2023-02-08 13:33  永远的大空翼  阅读(92)  评论(0编辑  收藏  举报