第12章 使用Samba或NFS实现文件共享
第12章 使用Samba或NFS实现文件共享
章节简述:
1.
比较文件传输 vs 文件共享 ,
2.
介绍SMB协议与Samba服务程序的起源和发展过程,
部署Samba服务,
分别使用Windows系统和Linux系统访问共享的文件资源。
3.
NFS(Network File System)网络文件系统服务,
部署NFS服务
在多台Linux系统之间挂载并使用资源。
4.
autofs服务,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。
本章目录结构
- 12.1 SAMBA文件共享服务
- [12.1.1 配置共享资源]
- [12.1.2 Windows挂载共享]
- [12.1.3 Linux挂载共享]
- 12.2 NFS网络文件系统
- 12.3 AutoFs自动挂载服务
12.1 SAMBA文件共享服务
FTP文件传输服务让主机之间的文件传输变得简单方便,
但是FTP协议的本质是传输文件,而非共享文件,
共享文件可以通过客户端直接在服务器上修改文件内容。
1987年,微软公司和英特尔公司共同制定了SMB协议(Server Messages Block,服务器消息块协议),目标实现共享局域网内的文件、打印机资源。
1991年,在读大学的Tridgwell 基于SMB协议开发了SMBServer服务程序。后来被命名为samba(一个拉丁舞名字)。如今,samba服务测序成为了在Linux和windows系统之间共享文件的最佳选择
Samba服务程序的配置方法
首先 通过软件仓库来安装Samba服务程序。
再安装客户端程序samba-client软件包,用于测试共享目录:
[root@102 ~]# yum install -y samba samba-client
安装完毕后打开Samba服务程序的主配置文件,参数37行。
- 其中第17~22行代表共享每位登录用户的家目录内容。
虽然在某些情况下这可以更方便地共享文件,但这个默认操作着实有些危险,建议不要共享,将其删除掉。 - 第24~29行是用SMB协议共享本地的打印机设备,方便局域网内的用户远程使用打印机设备。
当前我们没有打印机设备,因此建议也将其删除掉,不共享。 - 最后的第31~37行依然为共享打印机设备的参数,同样建议予以删除。
[root@102 ~]# vim /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[homes] # 删除 homes 段落
comment = Home Directories # delete
valid users = %S, %D%w%S # delete
browseable = No # delete
read only = No # delete
inherit acls = Yes # delete
# delete
[printers] # 删除 printers 段落
comment = All Printers # delete
path = /var/tmp # delete
printable = Yes # delete
create mask = 0600 # delete
browseable = No # delete
# delete
[print$] # 删除 printer 段落
comment = Printer Drivers # delete
path = /var/lib/samba/drivers # delete
write list = @printadmin root # delete
force group = @printadmin # delete
create mask = 0664 # delete
directory mask = 0775 # delete
在对Samba服务的主配置文件进行删减操作之后,最后的有效配置参数只剩下了8行。
所剩不多的参数中,还能继续删除不需要的参数。
例如,
第5~8行参数中所提到的cups的全称为Common UNIX Printing System(通用UNIX打印系统),
是用于打印机或打印服务器的,可以删除。
[root@panda ~]# cat /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups # delete
printcap name = cups # delete
load printers = yes # delete
cups options = raw # delete
精简后的samba配置文件,只有3行全局配置参数
[root@102 ~]# cat /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
Tips
删除掉不需要的代码是常规操作。
通过关闭非必要的功能,使其具有更好的性能、运维时更快地找到所需的代码。
与100行代码相比,从10行代码中找到一个参数要容易很多。
所以只要对参数有正确的认识,那么就可以大胆地操作!
为了避免在工作中使用到了打印机服务而不知如何配置,
刚刚完成Samba服务安装后,/etc/samba/smb.conf文件中参数详细注释如下表。
表12-1 Samba服务程序中的参数以及作用
| 行数 | 参数 | 作用 |
|---|---|---|
| 1 | # See smb.conf.example for a more detailed config file or | 注释信息 |
| 2 | # read the smb.conf manpage. | |
| 3 | # Run 'testparm' to verify the config is correct after | |
| 4 | # you modified it. | |
| 5 | [global] | 全局参数 |
| 6 | workgroup = SAMBA | 工作组名称 |
| 7 | ||
| 8 | security = user | 安全验证的方式,总共有4种 |
| 9 | ||
| 10 | passdb backend = tdbsam | 定义用户后台的类型,总共有3种 |
| 11 | ||
| 12 | printing = cups | 打印服务协议 |
| 13 | printcap name = cups | 打印服务名称 |
| 14 | load printers = yes | 是否加载打印机 |
| 15 | cups options = raw | 打印机的选项 |
| 16 | ||
| 17 | [homes] | 共享名称 |
| 18 | comment = Home Directories | 描述信息 |
| 19 | valid users = %S, %D%w%S | 可用账户 |
| 20 | browseable = No | 指定共享信息是否在“网上邻居”中可见 |
| 21 | read only = No | 是否只读 |
| 22 | inherit acls = Yes | 是否继承访问控制列表 |
| 23 | ||
| 24 | [printers] | 共享名称 |
| 25 | comment = All Printers | 描述信息 |
| 26 | path = /var/tmp | 共享路径 |
| 27 | printable = Yes | 是否可打印 |
| 28 | create mask = 0600 | 文件权限 |
| 29 | browseable = No | 指定共享信息是否在“网上邻居”中可见 |
| 30 | ||
| 31 | [print$] | 共享名称 |
| 32 | comment = Printer Drivers | 描述信息 |
| 33 | path = /var/lib/samba/drivers | 共享路径 |
| 34 | write list = @printadmin root | 可写入文件的用户列表 |
| 35 | force group = @printadmin | 用户组列表 |
| 36 | create mask = 0664 | 文件权限 |
| 37 | directory mask = 0775 | 目录权限 |
在上面的代码中,security参数代表用户登录Samba服务时采用的安全验证方式。
总共有4种可用参数。
- share:代表 不需要密码验证,直接登陆。这相当于vsftpd服务的匿名公开访问模式,比较方便,但安全性很差。
- user:代表登录Samba服务时需要使用账号密码进行验证,通过后才能获取到文件。默认的验证方式。
- domain:代表通过域控制器进行身份验证,用来限制用户的来源域。
- server: 代表使用独立主机验证来访用户提供的密码。这相当于集中管理账号,不常用。
在最早期的RHEL系统中,Samba服务使用的是PAM(可插拔认证模块)来调用本地账号和密码信息,
在RHEL 5/6版本中用 smbpasswd命令 来设置独立的Samba服务账号和密码。
在RHEL 7/8版本中用 tdbsam数据库 进行验证。
tdbsam数据库专门用于保存Samba服务账号密码的数据库,用 pdbedit命令 操作。
操作实验

12.1.1 配置共享资源
Samba服务程序的主配置文件与前面学习过的Apache服务很相似,包括全局配置参数和区域配置参数。
全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。
区域配置参数则用于设置单独的共享资源,且仅对该资源有效。
第1步:创建用于访问共享资源的账户信息。
在RHEL 7/8系统中,Samba服务程序默认使用的是用户密码认证模式(user)。
这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且认证过程也十分简单。
不过,只有建立账户信息数据库之后,才能使用用户密码认证模式。
另外,Samba服务程序的数据库要求账户必须在当前系统中已经存在,
否则创建文件时将导致文件的权限属性和长期约定俗成的规范背离,由此引发错误。
pdbedit命令用于管理Samba服务程序的账户信息数据库,格式为“pdbedit [选项] 账户名称”。
在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。
pdbedit命令中使用的参数以及作用如表12-3所示。
表12-3 用于pdbedit命令的参数以及作用
| 参数 | 作用 |
|---|---|
| -a 用户名 | 建立Samba用户 |
| -x 用户名 | 删除Samba用户 |
| -L | 列出用户列表 |
| -Lv | 列出用户详细信息的列表 |
pdbedit 命令用于管理Samba服务的帐户信息数据库,格式为:"pdbedit [选项] 帐户"
第一次把用户信息写入到数据库时需要使用-a参数,以后修改用户密码、删除用户等等操作就不再需要了。
[root@102~]# useradd panda #增加OS操作系统用户帐号。
[root@102 ~]# pdbedit -a -u panda #增加用于smb程序的帐号,并设置密码。
new password: #此处输入该账户在Samba服务数据库中的密码,例如:smbpass123
retype new password: #再次输入密码进行确认
Unix username: panda
NT username:
...
[root@102 samba]# pdbedit -L #查询samba用户帐号。
panda:1001:
修改samba用户密码 (非必要步骤,参考):
[root@102 samba]# smbpasswd panda
New SMB password:
Retype new SMB password:
第2步:创建用于共享资源的文件目录。
考虑:
(1)文件、文件夹读写权限
(2)应用于目录/home/database的SELinux安全上下文所带来的限制。
在Samba的帮助手册中显示,正确的文件上下文值应该是samba_share_t,
修改完毕后执行restorecon命令,让应用于目录的新SELinux安全上下文生效。
[root@102 ~]# mkdir /home/database
[root@102 ~]# chown -Rf panda:panda /home/database
[root@102 ~]# semanage fcontext -a -t samba_share_t /home/database
[root@102 ~]# restorecon -Rv /home/database
[root@102 samba]# ll -Zd /home/database/
drwxr-xr-x. panda panda unconfined_u:object_r:samba_share_t:s0 /home/database/
第3步:设置SELinux策略,
使Samba服务程序可以访问普通用户家目录。
执行getsebool命令,筛选出所有与Samba服务程序相关的SELinux域策略,
根据策略的名称(和经验)选择出正确的策略条目进行开启:
[root@102 ~]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_load_libgfapi --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
tmpreaper_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off
[root@panda ~]# setsebool -P samba_enable_home_dirs on
第4步:在Samba服务程序的主配置文件中,根据表12-2所提到的格式写入共享信息。
[root@102 ~]# vim /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
[database]
comment = Do not arbitrarily modify the file
path = /home/database
public = no
writable = yes
表12-2 用于设置Samba服务程序的局部参数以及作用
| 参数 | 作用 |
|---|---|
| [database] | 共享名称为database |
| comment = Do not arbitrarily modify the database file | 警告用户不要随意修改数据库 |
| path = /home/database | 共享目录为/home/database |
| public = no | 关闭“所有人可见” |
| writable = yes | 允许写入操作 |
第5步:重启服务与防火墙配置
Samba服务程序在Linux系统中的名字为smb,重启smb服务并加入到启动项中。
[root@102 ~]# systemctl restart smb
[root@102 ~]# systemctl enable smb
防火墙配置,将iptables防火墙清空,在firewalld防火墙配置中放开Samba服务。
[root@102 ~]# iptables -F
[root@102 ~]# iptables-save
[root@102 ~]# firewall-cmd --zone=public --permanent --add-service=samba
[root@102 ~]# firewall-cmd --reload
**第6步:验证
使用systemctl status smb命令查看服务器是否启动了Samba服务。
[root@102 ~]# systemctl status smb
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
Active: active (running) since sat 2023-06-17 05:28:22 EDT; 7min ago
...
使用smbclient命令来查看共享详情;
-U参数:指定用户名称(用哪位用户挂载了Samba服务,就用哪位用户的身份进行查看);
-L参数:列出共享清单。
在Samba服务器(本例 192.168.8.102)使用smbclient命令测试。
[root@102 ~]# smbclient -U panda -L 192.168.8.102
Enter SAMBA\panda's password: #此处输入该账户在Samba服务数据库中的密码,第一步设置的 smbpass123
Sharename Type Comment
--------- ---- -------
database Disk Do not arbitrarily modify the database file
#Sharename:database
#与/etc/samba/smb.conf 中段落名称相同。
IPC$ IPC IPC Service (Samba 4.9.1)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
在Samba在客户端(本例 192.168.8.104)使用smbclient命令测试。
[root@104 ~]# yum install -y samba-client
[root@104 ~]# smbclient -U panda -L 192.168.8.102
Enter SAMBA\panda's password:
Sharename Type Comment
--------- ---- -------
database Disk Do not arbitrarily modify the database file
IPC$ IPC IPC Service (Samba 4.10.16)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
12.1.2 Windows挂载共享
无论Samba共享服务部署位置的操作系统是Windows还是Linux,
通过Windows系统进行客户端访问时,其步骤都一样。
假设Samba共享服务部署在Linux系统上,并通过Windows系统来访问Samba服务。
实验中Samba共享服务器和Windows客户端的IP地址如下。
| 主机名称 | 操作系统 | IP地址 |
|---|---|---|
| Samba共享服务器 | RHEL 7/8 | 192.168.8.102 |
| Linux客户端 | RHEL 7/8 | 192.168.8.104 |
| Windows客户端 | Windows 10 | 192.168.8.105 |
在Windows系统中访问共享资源,单击Windows系统的“开始”按钮后输入两个反斜杠,然后再添加服务器的IP地址,如图12-2所示。

图12-2 在Windows系统中访问共享资源
现在应该就能看到Samba共享服务的登录界面了。
先使用panda账户的系统本地密码尝试登录,结果报错。
由此可以验证,
在RHEL 7/8系统中,Samba服务程序使用的是独立的账户信息数据库。
所以,即便在Linux系统中有一个panda账户,
Samba服务程序使用的是tdbsam数据库中对应操作系统用户_相同名称账户_的密码。
在正确输入Samba服务数据库中的panda账户名以及使用pdbedit命令设置的密码后,
就可以登录到Samba服务程序的共享界面中了,如图12-4所示。此时,可以尝试执行查看、写入、更名、删除文件等操作。
由于Windows系统的缓存原因,有可能您在第二次登录时提供了正确的账户和密码,依然会报错,这时只需要重新启动一下Windows客户端就没问题了。

图12-4 成功访问Samba共享服务
12.1.3 Linux挂载共享

Samba服务程序还可以实现Linux系统之间的文件共享、开机自动挂载。
本例按照表12-5来设置Samba服务程序所在主机(即Samba共享服务器)和Linux客户端使用的IP地址,然后在客户端安装支持文件共享服务的软件包(cifs-utils)。
表12-5 Samba共享服务器和Linux客户端各自使用的操作系统以及IP地址
| 主机名称 | 操作系统 | IP地址 |
|---|---|---|
| Samba共享服务器 | RHEL 7/8 | 192.168.8.102 |
| Linux客户端 | RHEL 7/8 | 192.168.8.104 |
| Windows客户端 | Windows 10 | 192.168.8.105 |
安装软件 cifs-utils
cifs-utils是一个用于Linux系统的CIFS(Common Internet File System)客户端工具包,
它允许在Linux系统上挂载Windows共享文件夹。
[root@104 ~]# yum install -y cifs-utils
在Linux客户端创建一个用于挂载Samba服务共享资源的目录。
这个目录可以与服务器上的共享名称同名,以便于日后查找。
mount命令中的-t参数用于指定协议类型,-o参数用于指定用户名和密码,最后追加上服务器IP地址、共享名称和本地挂载目录。
服务器IP地址后面的共享名称指的是配置文件中[database]的值,而不是服务器本地挂载的目录名称。
虽然这两个值可能一样。
[root@104 ~]# mkdir /database
[root@104 ~]# mount -t cifs -o username=panda,password=123456 //192.168.8.102/database /database
[root@104 ~]# df -h /database
Filesystem Size Used Avail Use% Mounted on
//192.168.8.102/database 17G 3.6G 14G 21% /database

开机自动挂载
开机自动挂载Samba服务器提供的共享文件夹操作方法:
(1)按照Samba服务的用户名、密码、共享域的顺序将相关信息写入一个认证文件中,
(2)修改/etc/fstab文件和系统自动加载它。
(3)修改认证文件的权限,实现仅root管理员才能够读写:
[root@104 ~]# vim auth.smb
username=panda
password=smbpass123
domain=MYGROUP
[root@panda ~]# chmod 600 auth.smb
将挂载信息写入/etc/fstab文件中,以确保共享挂载信息在服务器重启后依然生效:
[root@104 ~]# vim /etc/fstab
...
//192.168.8.102/database /database cifs credentials=/root/auth.smb,defaults,_netdev 0 0
[root@panda ~]# mount -a
Linux客户端成功地挂载了Samba服务的共享资源。
进入到挂载目录/database后就可以读写删改。
12.2 NFS网络文件系统
如果觉得Samba服务程序的配置太麻烦,而且恰巧需要共享文件的主机都是Linux系统,
非常推荐通过部署NFS服务来共享文件。
NFS网络文件系统服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,
使本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。

由于RHEL 8系统中默认已经安装了NFS服务,外加NFS服务的配置步骤也很简单。
接下来,准备配置NFS服务。
首先检查RHEL 7/8系统中是否已经安装了NFS软件包:
[root@103 ~]# systemctl status nfs-server
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@103 ~]# rpm -qa nfs*
如果查询没有反馈,通过yum安装nfs-utils
[root@104 ~]# yum install -y nfs-utils
第1步:为了检验NFS服务配置的效果,
我们需要使用两台Linux主机(一台充当NFS服务器,一台充当NFS客户端),

并按照表12-6来设置它们所使用的IP地址。
表12-6 两台Linux主机所使用的操作系统以及IP地址
| 主机名称 | 操作系统 | IP地址 |
|---|---|---|
| NFS服务器 | RHEL 8 | 192.168.8.103 |
| NFS客户端 | RHEL 8 | 192.168.8.104 |
另外,不要忘记配置好防火墙,以免默认的防火墙策略禁止正常的NFS共享服务。
[root@103 ~]# iptables -F
[root@103 ~]# iptables-save &>/dev/null
[root@103 ~]# firewall-cmd --permanent --zone=public --add-service=nfs
[root@103 ~]# firewall-cmd --permanent --zone=public --add-service=rpc-bind
[root@103 ~]# firewall-cmd --permanent --zone=public --add-service=mountd
[root@103 ~]# firewall-cmd --reload
第2步:在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限_确保其他人也有写入权限。
[root@103 ~]# mkdir /nfsfile
[root@103 ~]# chmod -R 777 /nfsfile
[root@103 ~]# echo "welcome to panda.com" > /nfsfile/readme
第3步:修改服务程序NFS的配置文件为/etc/exports。
按照格式:“共享目录的路径 允许访问的NFS客户端(共享权限参数)”,定义要共享的目录与相应的权限。
例如,
如果想要把/nfsfile目录共享给192.168.8.0/24网段内的所有主机,
让这些主机都拥有读写权限,在将数据写入到NFS服务器的硬盘中后才会结束操作,
最大限度保证数据不丢失,
把来访客户端root管理员映射为本地的匿名用户等。
表12-7 用于配置NFS服务程序配置文件的参数
| 参数 | 作用 |
|---|---|
| ro | 只读 |
| rw | 读写 |
| sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
| async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
| root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 |
| no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 |
| all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 |
请注意,NFS客户端地址与权限之间没有空格。
[root@103 ~]# vim /etc/exports
/nfsfile 192.168.8.*(rw,sync,root_squash)
在NFS服务的配置文件中巧用通配符能够实现很多便捷功能,
就比如匹配IP地址就有三种方法:
- 第一种是直接写*号,代表任何主机都可以访问;
- 第二种则是实验中采用的192.168.10.*通配格式,代表来自192.168.10.0/24网段的主机;
- 第三种则是直接写对方的IP地址,如192.168.10.20,代表仅允许某个主机进行访问。
第4步:启动和启用NFS服务程序。
由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前,还需要重启rpcbind服务程序,并将这两个服务(rpcbind、nfs-server)一起加入开机启动项中。
[root@103 ~]# systemctl restart rpcbind
[root@103 ~]# systemctl enable rpcbind
[root@103 ~]# systemctl start nfs-server
[root@103 ~]# systemctl enable nfs-server
第5步:
NFS客户端的配置步骤:
换一台机器,扮演客户端角色,查询NFS服务器的远程共享信息,
使用showmount命令,
其输出格式为“共享的目录名称 允许使用客户端地址”。
表12-8 showmount命令中可用的参数以及作用
| 参数 | 作用 |
|---|---|
| -e | 显示NFS服务器的共享列表 |
| -a | 显示本机挂载的文件资源的情况NFS资源的情况 |
| -v | 显示版本号 |
[root@103 ~]# showmount -e 192.168.8.103
Export list for 192.168.8.103:
/nfsfile 192.168.10.*
[root@104 ~]# showmount -e 192.168.8.103
Export list for 192.168.8.103:
/nfsfile 192.168.10.*
在NFS客户端创建一个挂载目录。
使用mount命令并结合-t参数,指定要挂载的文件系统的类型,
并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地的目录。
[root@104 ~]# mkdir /nfsfile
[root@104 ~]# mount -t nfs 192.168.8.103:/nfsfile /nfsfile
[root@104 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
...
//192.168.8.102/database 17G 3.6G 14G 21% /database
192.168.8.103:/nfsfile 17G 3.6G 14G 21% /nfsfil
挂载成功后就应该能够顺利地看到在执行前面的操作时写入的文件内容了。
如果希望NFS文件共享服务开机自动挂载,将其写入到fstab文件中:
[root@panda ~]# cat /nfsfile/readme
welcome to panda.com
[root@panda ~]# vim /etc/fstab
...
//192.168.8.102/database /database cifs credentials=/root/auth.smb,defaults,_netdev 0 0
192.168.8.103:/nfsfile /nfsfile nfs defaults,_netdev 0 0

搭建带验证功能的NFS服务器
https://blog.csdn.net/zhongbeida_xue/article/details/81115305
12.3 AutoFs自动挂载服务
autofs服务程序是一种Linux系统守护进程,
当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。
将挂载信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,
而autofs服务程序则是在用户需要使用该文件系统时才去动态挂载,
从而节约了网络资源和服务器的硬件资源。
首先安装autofs服务程序:
[root@104 ~]# yum install -y autofs
在autofs服务程序的主配置文件填写格式:
“挂载目录 子配置文件”。
挂载目录是设备挂载位置的上一级目录。
例如,
光盘设备一般挂载到/media/cdrom目录中,那么挂载目录写成/media即可。
对应的子配置文件则是对这个挂载目录内的挂载设备信息作进一步的说明。
子配置文件需要用户自行定义,文件名字没有严格要求,后缀以.misc结束。
具体的配置参数如第7行的加粗字所示。
[root@104 ~]# cp /etc/auto.master /etc/auto.master-backup
[root@104 ~]# cat /etc/auto.master-backup | grep -v "#" > /etc/auto.master
[root@104 ~]# cat /etc/auto.master
/misc /etc/auto.misc
/net -hosts
+dir:/etc/auto.master.d
+auto.master
[root@104 ~]# vim /etc/auto.master
/media /etc/iso.misc #关注点:“挂载目录 子配置文件”格式
/misc /etc/auto.misc
/net -hosts
+dir:/etc/auto.master.d
+auto.master
在子配置文件中,应按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。
例如,
要把光盘设备挂载到/media/iso目录中,可将挂载目录写为iso,
-fstype=iso9660:文件系统格式参数 = 光盘设备格式,
ro、nosuid及nodev为光盘设备具体的权限参数,
/dev/cdrom:要挂载的设备名称。
配置完成后重启autofs服务程序、设置开机启动:
[root@104 ~]# touch /etc/iso.misc
[root@104 ~]# vim /etc/iso.misc
iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
[root@104 ~]# systemctl restart autofs
[root@104 ~]# systemctl enable autofs
验证
接下来将发生一件非常有趣的事情。
先查看当前的光盘设备挂载情况,
确认光盘设备没有被挂载上,而且/media目录中根本就没有iso子目录:
但是,
我们却可以使用cd命令切换到这个iso子目录中,
而且光盘设备会被立即自动挂载上,
然后也就能顺利查看光盘内的内容了。
[root@104 ~]# cd /media
[root@104 media]# ls #关注点,此时/media目录下没有iso文件夹
[root@104 media]# cd /media/iso #可以切换到/media/iso
[root@104 iso]# ls
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
是不是很有方便?!趁着刚学的知识还没忘,我们再对NFS服务动手试试吧。
首先把NFS共享目录卸载掉。
在autofs服务程序的主配置文件中会有一个“/misc /etc/auto.misc”参数,这个auto.misc相当于自动挂载的参考文件,它默认就已经存在,所以这里不需要进行任何操作:
[root@104 ~]# umount /nfsfile
[root@104 ~]# vim /etc/auto.master
/media /etc/iso.misc
/misc /etc/auto.misc #关注点:“挂载目录 子配置文件”格式
/net -hosts
+dir:/etc/auto.master.d
+auto.master
接下来编辑子配置文件/etc/auto.misc,
填写本地挂载的路径和NFS服务器的挂载信息:
[root@panda ~]# vim /etc/auto.misc
nfsfile 192.168.8.103:/nfsfile #关注点:本地挂载的路径和NFS服务器的挂载信息
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
重启autofs服务程序,当用户进入到/misc/nfsfile目录时,便会自动挂载共享信息:
[root@104 ~]# systemctl restart autofs
[root@104 ~]# cd /misc
[root@104 misc]# ls
[root@104 misc]# cd /misc/nfsfile
[root@104 nfsfile]# ls
file_from_104 folder_from_103 folder_from_104 readme
[root@104 nfsfile]# df -h /misc/nfsfile/
Filesystem Size Used Avail Use% Mounted on
192.168.8.103:/nfsfile 17G 3.6G 14G 21% /misc/nfsfile
autofs服务程序是一种Linux系统守护进程,
当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。
浙公网安备 33010602011771号