暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

linux命令:使用 Samba 或 NFS 实现文件共享

原创 time 2022-10-31
579

使用 Samba 或 NFS 实现文件共享
本章讲解了如下内容:
¾ Samba 文件共享服务;
¾ NFS(网络文件系统);
¾ autofs 自动挂载服务。
本章首先通过比较文件传输和文件共享这两种资源交换方式来引入 Samba 服务的理
论知识,并介绍 SMB 协议与 Samba 服务程序的起源和发展过程。然后通过实验的方式
部署文件共享服务来深入了解 Samba 服务中相关参数的作用,并在实验最后分别使用
Windows 系统和 Linux 系统访问共享的文件资源,确保读者彻底掌握文件共享服务的配
置方法
本章还讲解了如何配置网络文件系统(Network File System,NFS)服务来简化 Linux 系
统之间的文件共享工作,以及通过部署 NFS 服务在多台 Linux 系统之间挂载并使用资源。在
管理设备挂载信息时,使用 autofs 服务不仅可以正常满足设备挂载的使用需求,还能进一步
提高服务器硬件资源和网络带宽的利用率。
刘遄老师相信,当各位读者认真学习完本章内容之后,一定会深刻理解在 Linux 系统之
间共享文件资源以及在 Linux 系统与 Windows 系统之间共享文件资源的工作机制,并彻底掌
握相应的配置方法。
12.1 Samba 文件共享服务
上一章讲解的 FTP 文件传输服务确实可以让主机之间的文件传输变得简单方便,但是
FTP 协议的本质是传输文件,而非共享文件,因此要想通过客户端直接在服务器上修改文件
内容还是一件比较麻烦的事情。
1987 年,微软公司和英特尔公司共同制定了 SMB(Server Messages Block,服务器消息
块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间
共享文件变得越来越简单。到了 1991 年,当时还在读大学的 Tridgwell 为了解决 Linux 系统
与 Windows 系统之间的文件共享问题,基于 SMB 协议开发出了 SMBServer 服务程序。这是
一款开源的文件共享软件,经过简单配置就能够实现 Linux 系统与 Windows 系统之间的文件
共享工作。当时,Tridgwell 想把这款软件的名字 SMBServer 注册成为商标,但却被商标局以
SMB 是没有意义的字符而拒绝了申请。后来 Tridgwell 不断翻看词典,突然看到一个拉丁舞
第 12 章
使用 Samba 或 NFS 实现文件共享
234
蹈的名字—Samba,而且这个热情洋溢的舞蹈名字中又恰好包含了“SMB”,于是 Samba 服
务程序的名字由此诞生(见图 12-1)。Samba 服务程序现在已经成为在 Linux 系统与 Windows
系统之间共享文件的最佳选择。
图 12-1 Samba 服务程序的 logo
Samba 服务程序的配置方法与之前讲解的很多服务的配置方法类似,首先需要先通过
Yum 软件仓库来安装 Samba 服务程序(Samba 服务程序的名字也恰巧是软件包的名字):
[root@linuxprobe ~ ]# yum install samba
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
Installing:
samba x86_64 4.1.1-31.el7 rhel 527 k
Transaction Summary
===============================================================================
Install 1 Package
Total download size: 527 k
Installed size: 1.5 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : samba-4.1.1-31.el7.x86_64 1/1
Verifying : samba-4.1.1-31.el7.x86_64 1/1
Installed:
samba.x86_64 0:4.1.1-31.el7
Complete!
安装完毕后打开 Samba 服务程序的主配置文件,发现竟然有 320 行之多!有没有被吓到?
但仔细一看就会发现,其实大多数都是以井号(#)开头的注释信息行。有刘遄老师在,肯定
是不会让大家去“死啃”这些内容的。
[root@linuxprobe ~]# cat /etc/samba/smb.conf
# This is the main Samba configuration file. For detailed information about the
# options listed here, refer to the smb.conf(5) manual page. Samba has a huge
# number of configurable options, most of which are not shown in this example.
#
# The Official Samba 3.2.x HOWTO and Reference Guide contains step-by-step
# guides for installing, configuring, and using Samba:
# http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
#
# The Samba-3 by Example guide has working examples for smb.conf. This guide is
# generated daily: http://www.samba.org/samba/docs/Samba-Guide.pdf
12.1 Samba 文件共享服务
235
#
# In this file, lines starting with a semicolon (;) or a hash (#) are
# comments and are ignored. This file uses hashes to denote commentary and
# semicolons for parts of the file you may wish to configure.
#
# Note: Run the "testparm" command after modifying this file to check for basic
# syntax errors.
#
………………省略部分输出信息………………
由于在 Samba 服务程序的主配置文件中,注释信息行实在太多,不便于分析里面的
重要参数,因此先把主配置文件改个名字,然后使用 cat 命令读入主配置文件,再在 grep
命令后面添加-v 参数(反向选择),分别去掉所有以井号(#)和分号(;)开头的注释信
息行,对于剩余的空白行可以使用^$参数来表示并进行反选过滤,最后把过滤后的可用参
数信息通过重定向符覆盖写入到原始文件名称中。执行过滤后剩下的 Samba 服务程序的
参数并不复杂,为了更方便读者查阅参数的功能,表 12-1 罗列了这些参数以及相应的注
释说明。
表 12-1 Samba 服务程序中的参数以及作用
[global] 参数 作用
workgroup = MYGROUP #工作组名称
server string = Samba Server
Version %v
#服务器介绍信息,参数%v 为显示 SMB 版本号
log file = /var/log/samba/log.%m
#定义日志文件的存放位置与名称,参数%m 为
来访的主机名
max log size = 50 #定义日志文件的最大容量为 50KB
security = user #安全验证的方式,总共有 4 种
#share:来访主机无需验证口令;比较方便,但安全性很差
#user:需验证来访主机提供的口令后才可以访问;提升了安全性
#server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)
#domain:使用域控制器进行身份验证
passdb backend = tdbsam #定义用户后台的类型,共有 3 种
#smbpasswd:使用 smbpasswd 命令为系统用户设置 Samba 服务程序的密码
#tdbsam:创建数据库文件并使用 pdbedit 命令建立 Samba 服务程序的用户
#ldapsam:基于 LDAP 服务进行账户验证
load printers = yes #设置在 Samba 服务启动时是否共享打印机设备
cups options = raw #打印机的选项
[homes] #共享参数
comment = Home Directories #描述信息
browseable = no #指定共享信息是否在“网上邻居”中可见
writable = yes
#定义是否可以执行写入操作,与“read only”
相反
[printers] #打印机共享参数
第 12 章
使用 Samba 或 NFS 实现文件共享
236
[root@linuxprobe ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
[root@linuxprobe ~]# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";
" | grep -v "^$" > /etc/samba/smb.conf
[root@linuxprobe ~]# cat /etc/samba/smb.conf
12.1.1 配置共享资源
Samba 服务程序的主配置文件与前面学习过的 Apache 服务很相似,包括全局配置参数和
区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资
源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。创建共享资源的
方法很简单,只要将表 12-2 中的参数写入到 Samba 服务程序的主配置文件中,然后重启该服
务即可。
表 12-2 用于设置 Samba 服务程序的参数以及作用
参数 作用
[database] 共享名称为 database
comment = Do not arbitrarily modify the database file 警告用户不要随意修改数据库
path = /home/database 共享目录为/home/database
public = no 关闭“所有人可见”
writable = yes 允许写入操作
第1步:创建用于访问共享资源的账户信息。在 RHEL 7 系统中,Samba 服务程序默认
使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问
共享资源,而且验证过程也十分简单。不过,只有建立账户信息数据库之后,才能使用用户
口令认证模式。另外,Samba 服务程序的数据库要求账户必须在当前系统中已经存在,否则
日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。
pdbedit 命令用于管理 SMB 服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。
在第一次把账户信息写入到数据库时需要使用-a 参数,以后在执行修改密码、删除账户等操
作时就不再需要该参数了。pdbedit 命令中使用的参数以及作用如表 12-3 所示。
表 12-3 用于 pdbedit 命令的参数以及作用
参数 作用
-a 用户名 建立 Samba 账户
-x 用户名 删除 Samba 账户
-L 列出账户列表
-Lv 列出账户详细信息的列表
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
[root@linuxprobe ~]# pdbedit -a -u linuxprobe
new password:此处输入该账户在 Samba 服务数据库中的密码
retype new password:再次输入密码进行确认
12.1 Samba 文件共享服务
237
Unix username: linuxprobe
NT username:
Account Flags:
User SID: S-1-5-21-507407404-3243012849-3065158664-1000
Primary Group SID: S-1-5-21-507407404-3243012849-3065158664-513
Full Name: linuxprobe
Home Directory: \\localhost\linuxprobe
HomeDir Drive:
Logon Script:
Profile Path: \\localhost\linuxprobe\profile
Domain: LOCALHOST
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 10:06:39 EST
Kickoff time: Wed, 06 Feb 2036 10:06:39 EST
Password last set: Mon, 13 Mar 2017 04:22:25 EDT
Password can change: Mon, 13 Mar 2017 04:22:25 EDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
第2步:创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,
而且由于/home 目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的 SELinux 安全
上下文所带来的限制。在前面对 Samba 服务程序配置文件中的注释信息进行过滤时,这些过
滤的信息中就有关于 SELinux 安全上下文策略的说明,我们只需按照过滤信息中有关 SELinux
安全上下文策略中的说明中给的值进行修改即可。修改完毕后执行 restorecon 命令,让应用于
目录的新 SELinux 安全上下文立即生效。
[root@linuxprobe ~]# mkdir /home/database
[root@linuxprobe ~]# chown -Rf linuxprobe:linuxprobe /home/database
[root@linuxprobe ~]# semanage fcontext -a -t samba_share_t /home/database
[root@linuxprobe ~]# restorecon -Rv /home/database
restorecon reset /home/database context unconfined_u:object_r:home_root_t:s0->
unconfined_u:object_r:samba_share_t:s0
第3步:设置 SELinux 服务与策略,使其允许通过 Samba 服务程序访问普通用户家目录。
执行 getsebool 命令,筛选出所有与 Samba 服务程序相关的 SELinux 域策略,根据策略的名称
(和经验)选择出正确的策略条目进行开启即可:
[root@linuxprobe ~]# 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_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
第 12 章
使用 Samba 或 NFS 实现文件共享
238
virt_sandbox_use_samba --> off
virt_use_samba --> off
[root@linuxprobe ~]# setsebool -P samba_enable_home_dirs on
第4步:在 Samba 服务程序的主配置文件中,根据表 12-2 所提到的格式写入共享信息。
在原始的配置文件中,[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打
印机设备。这两项如果在今后的工作中不需要,可以像刘遄老师一样手动删除,这没有任何
问题。
[root@linuxprobe ~]# vim /etc/samba/smb.conf
1 [global]
2 workgroup = MYGROUP
3 server string = Samba Server Version %v
4 log file = /var/log/samba/log.%m
5 max log size = 50
6 security = user
7 passdb backend = tdbsam
8 load printers = yes
9 cups options = raw
10 [database]
11 comment = Do not arbitrarily modify the database file
12 path = /home/database
13 public = no
14 writable = yes
第5步:Samba 服务程序的配置工作基本完毕。接下来重启 smb 服务(Samba 服务程序
在 Linux 系统中的名字为 smb)并清空 iptables 防火墙,然后就可以检验配置效果了。
[root@linuxprobe ~]# systemctl restart smb
[root@linuxprobe ~]# systemctl enable smb
ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.
target.wants/smb.service'
[root@linuxprobe ~]# iptables -F
[root@linuxprobe ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
12.1.2 Windows 访问文件共享服务
无论 Samba 共享服务是部署 Windows 系统上还是部署在 Linux 系统上,通过 Windows
系统进行访问时,其步骤和方法都是一样的。下面假设 Samba 共享服务部署在 Linux 系统上,
并通过 Windows 系统来访问 Samba 服务。Samba 共享服务器和 Windows 客户端的 IP 地址可
以根据表 12-4 来设置。
表 12-4 Samba 服务器和 Windows 客户端使用的操作系统以及 IP 地址
主机名称 操作系统 IP 地址
Samba 共享服务器 RHEL 7 192.168.10.10
Windows 客户端 Windows 7 192.168.10.30
要在 Windows 系统中访问共享资源,只需在 Windows 的“运行”命令框中输入两个反斜
杠,然后再加服务器的 IP 地址即可,如图 12-2 所示。
12.1 Samba 文件共享服务
239
图 12-2 在 Windows 系统中访问共享资源
如果已经清空了 Linux 系统上 iptables 防火墙的默认策略(即执行 iptables -F 命令),现
在就应该能看到 Samba 共享服务的登录界面了。刘遄老师在这里先使用 linuxprobe 账户的系
统本地密码尝试登录,结果出现了如图 12-3 所示的报错信息。由此可以验证,在 RHEL 7 系
统中,Samba 服务程序使用的果然是独立的账户信息数据库。所以,即便在 Linux 系统中有
一个 linuxprobe 账户,Samba 服务程序使用的账户信息数据库中也有一个同名的 linuxprobe
账户,大家也一定要弄清楚它们各自所对应的密码。
图 12-3 访问 Samba 共享服务时,提示出错
正确输入 linuxprobe 账户名以及使用 pdbedit 命令设置的密码后,就可以登录到共享界
面中了,如图 12-4 所示。此时,我们可以尝试执行查看、写入、更名、删除文件等操作。
第 12 章
使用 Samba 或 NFS 实现文件共享
240
图 12-4 成功访问 Samba 共享服务
由于 Windows 系统的缓存原因,有可能您在第二次登录时提供了正确的账户和密码,依
然会报错,这时只需要重新启动一下 Windows 客户端就没问题了(如果 Windows 系统依然报
错,请检查上述步骤是否有做错的地方)。
12.1.3 Linux 访问文件共享服务
上面的实验操作可能会让各位读者误以为 Samba 服务程序只是为了解决 Linux 系统和
Windows 系统的资源共享问题而设计的。其实,Samba 服务程序还可以实现 Linux 系统之间
的文件共享。请各位读者按照表 12-5 来设置 Samba 服务程序所在主机(即 Samba 共享服务
器)和 Linux 客户端使用的 IP 地址,然后在客户端安装支持文件共享服务的软件包(cifs-utils)。
表 12-5 Samba 共享服务器和 Linux 客户端各自使用的操作系统以及 IP 地址
主机名称 操作系统 IP 地址
Samba 共享服务器 RHEL7 操作系统 192.168.10.10
Linux 客户端 RHEL7 操作系统 192.168.10.20
[root@linuxprobe ~]# yum install cifs-utils
Loaded plugins: langpacks, product-id, subscription-manager
rhel | 4.1 kB 00:00
Resolving Dependencies
--> Running transaction check
---> Package cifs-utils.x86_64 0:6.2-6.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
Package Arch Version Repository Size
===============================================================================
Installing:
12.1 Samba 文件共享服务
241
cifs-utils x86_64 6.2-6.el7 rhel 83 k
Transaction Summary
===============================================================================
Install 1 Package
Total download size: 83 k
Installed size: 174 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : cifs-utils-6.2-6.el7.x86_64 1/1
Verifying : cifs-utils-6.2-6.el7.x86_64 1/1
Installed:
cifs-utils.x86_64 0:6.2-6.el7
Complete!
在 Linux 客户端,按照 Samba 服务的用户名、密码、共享域的顺序将相关信息写入到一
个认证文件中。为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅 root 管
理员才能够读写:
[root@linuxprobe ~]# vim auth.smb
username=smbuser
password=redhat
domain=MYGROUP
[root@linuxprobe ~]# chmod 600 auth.smb
现在,在 Linux 客户端上创建一个用于挂载 Samba 服务共享资源的目录,并把挂载信息
写入到/etc/fstab 文件中,以确保共享挂载信息在服务器重启后依然生效:
[root@linuxprobe ~]# mkdir /database
[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# 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/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper /rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
//192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0
[root@linuxprobe ~]# mount -a
Linux 客户端成功地挂载了 Samba 服务的共享资源。进入到挂载目录/database 后就可以
看到 Windows 系统访问 Samba 服务程序时留下来的文件了(即文件 Memo.txt)。当然,我们
也可以对该文件进行读写操作并保存。
[root@linuxprobe ~]# cat /database/Memo.txt
i can edit it .
第 12 章
使用 Samba 或 NFS 实现文件共享
242
12.2 NFS(网络文件系统)
如果大家觉得 Samba 服务程序的配置太麻烦,而且恰巧需要共享文件的主机都是 Linux
系统,刘遄老师非常推荐大家在客户端部署 NFS 服务来共享文件。NFS(网络文件系统)服
务可以将远程 Linux 系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机
(Linux 客户端)基于 TCP/IP 协议,像使用本地主机上的资源那样读写远程 Linux 系统上的共
享文件。
由于 RHEL 7 系统中默认已经安装了 NFS 服务,外加 NFS 服务的配置步骤也很简单,因
此刘遄老师在授课时会将 NFS 戏谑为 Need For Speed。接下来,我们准备配置 NFS 服务。首
先请使用 Yum 软件仓库检查自己的 RHEL 7 系统中是否已经安装了 NFS 软件包:
[root@linuxprobe ~]# yum install nfs-utils
Loaded plugins: langpacks, product-id, subscription-manager
(1/2): rhel7/group_gz | 134 kB 00:00
(2/2): rhel7/primary_db | 3.4 MB 00:00
Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version
Nothing to do
第1步:为了检验 NFS 服务配置的效果,我们需要使用两台 Linux 主机(一台充当 NFS
服务器,一台充当 NFS 客户端),并按照表 12-6 来设置它们所使用的 IP 地址。
表 12-6 两台 Linux 主机所使用的操作系统以及 IP 地址
主机名称 操作系统 IP 地址
NFS 服务器 RHEL 7 192.168.10.10
NFS 客户端 RHEL 7 192.168.10.20
另外,不要忘记清空 NFS 服务器上面 iptables 防火墙的默认策略,以免默认的防火墙策
略禁止正常的 NFS 共享服务。
[root@linuxprobe ~]# iptables -F
[root@linuxprobe ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
第2步:在 NFS 服务器上建立用于 NFS 文件共享的目录,并设置足够的权限确保其他
人也有写入权限。
[root@linuxprobe ~]# mkdir /nfsfile
[root@linuxprobe ~]# chmod -Rf 777 /nfsfile
[root@linuxprobe ~]# echo "welcome to linuxprobe.com" > /nfsfile/readme
第3步:NFS 服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们
可以按照“共享目录的路径 允许访问的 NFS 客户端(共享权限参数)”的格式,定义要共享
的目录与相应的权限。
例如,如果想要把/nfsfile 目录共享给 192.168.10.0/24 网段内的所有主机,让这些主机都
拥有读写权限,在将数据写入到 NFS 服务器的硬盘中后才会结束操作,最大限度保证数据不
12.2 NFS(网络文件系统)
243
丢失,以及把来访客户端 root 管理员映射为本地的匿名用户等,则可以按照下面命令中的格
式,将表 12-7 中的参数写到 NFS 服务程序的配置文件中。
表 12-7 用于配置 NFS 服务程序配置文件的参数
参数 作用
ro 只读
rw 读写
root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户
no_root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员
all_squash 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async
优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢
失数据
请注意,NFS 客户端地址与权限之间没有空格。
[root@linuxprobe ~]# vim /etc/exports
/nfsfile 192.168.10.*(rw,sync,root_squash)
第4步:启动和启用 NFS 服务程序。由于在使用 NFS 服务进行文件共享之前,需要使
用 RPC(Remote Procedure Call,远程过程调用)服务将 NFS 服务器的 IP 地址和端口号等信
息发送给客户端。因此,在启动 NFS 服务之前,还需要顺带重启并启用 rpcbind 服务程序,
并将这两个服务一并加入开机启动项中。
[root@linuxprobe ~]# systemctl restart rpcbind
[root@linuxprobe ~]# systemctl enable rpcbind
[root@linuxprobe ~]# systemctl start nfs-server
[root@linuxprobe ~]# systemctl enable nfs-server
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.
target.wants/nfs-server.service'
NFS 客户端的配置步骤也十分简单。先使用 showmount 命令(以及必要的参数,见表 12-8)
查询 NFS 服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。
表 12-8 showmount 命令中可用的参数以及作用
参数 作用
-e 显示 NFS 服务器的共享列表
-a 显示本机挂载的文件资源的情况
-v 显示版本号
[root@linuxprobe ~]# showmount -e 192.168.10.10
Export list for 192.168.10.10:
/nfsfile 192.168.10.*
然后在 NFS 客户端创建一个挂载目录。使用 mount 命令并结合-t 参数,指定要挂载的文
件系统的类型,并在命令后面写上服务器的 IP 地址、服务器上的共享目录以及要挂载到本地
系统(即客户端)的目录。
第 12 章
使用 Samba 或 NFS 实现文件共享
244
[root@linuxprobe ~]# mkdir /nfsfile
[root@linuxprobe ~]# mount -t nfs 192.168.10.10:/nfsfile /nfsfile
挂载成功后就应该能够顺利地看到在执行前面的操作时写入的文件内容了。如果希望
NFS 文件共享服务能一直有效,则需要将其写入到 fstab 文件中:
[root@linuxprobe ~]# cat /nfsfile/readme
welcome to linuxprobe.com
[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# 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/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper /rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
192.168.10.10:/nfsfile /nfsfile nfs defaults 0 0
12.3 autofs 自动挂载服务
无论是 Samba 服务还是 NFS 服务,都要把挂载信息写入到/etc/fstab 中,这样远程共享资
源就会自动随服务器开机而进行挂载。虽然这很方便,但是如果挂载的远程资源太多,则会
给网络带宽和服务器的硬件资源带来很大负载。如果在资源挂载后长期不使用,也会造成服
务器硬件资源的浪费。可能会有读者说,“可以在每次使用之前执行 mount 命令进行手动挂
载”。这是一个不错的选择,但是每次都需要先挂载再使用,您不觉得麻烦吗?
autofs 自动挂载服务可以帮我们解决这一问题。与 mount 命令不同,autofs 服务程序是一
种 Linux 系统守护进程,当检测到用户视图访问一个尚未挂载的文件系统时,将自动挂载该
文件系统。换句话说,我们将挂载信息填入/etc/fstab 文件后,系统在每次开机时都自动将其挂载,
而 autofs 服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和
服务器的硬件资源。
[root@linuxprobe ~]# yum install autofs
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use
subscription-manager to register.
rhel | 4.1 kB 00:00
Resolving Dependencies
--> Running transaction check
---> Package autofs.x86_64 1:5.0.7-40.el7 will be installed
--> Processing Dependency: libhesiod.so.0()(64bit) for package: 1:autofs-5.0.7-
40.el7.x86_64
--> Running transaction check
---> Package hesiod.x86_64 0:3.2.1-3.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
12.3 autofs 自动挂载服务
245
===============================================================================
Package Arch Version Repository Size
===============================================================================
Installing:
autofs x86_64 1:5.0.7-40.el7 rhel 550 k
Installing for dependencies:
hesiod x86_64 3.2.1-3.el7 rhel 30 k
Transaction Summary
===============================================================================
Install 1 Package (+1 Dependent package)
Total download size: 579 k
Installed size: 3.6 M
Is this ok [y/d/N]: y
Downloading packages:
-------------------------------------------------------------------------------
Total 9.4 MB/s | 579 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : hesiod-3.2.1-3.el7.x86_64 1/2
Installing : 1:autofs-5.0.7-40.el7.x86_64 2/2
Verifying : hesiod-3.2.1-3.el7.x86_64 1/2
Verifying : 1:autofs-5.0.7-40.el7.x86_64 2/2
Installed:
autofs.x86_64 1:5.0.7-40.el7
Dependency Installed:
hesiod.x86_64 0:3.2.1-3.el7
Complete!
处于生产环境中的 Linux 服务器,一般会同时管理许多设备的挂载操作。如果把这些设
备挂载信息都写入到 autofs 服务的主配置文件中,无疑会让主配置文件臃肿不堪,不利于服
务执行效率,也不利于日后修改里面的配置内容,因此在 autofs 服务程序的主配置文件中需
要按照“挂载目录 子配置文件”的格式进行填写。挂载目录是设备挂载位置的上一级目录。
例如,光盘设备一般挂载到/media/cdrom 目录中,那么挂载目录写成/media 即可。对应的子
配置文件则是对这个挂载目录内的挂载设备信息作进一步的说明。子配置文件需要用户自行
定义,文件名字没有严格要求,但后缀必须以.misc 结束。具体的配置参数如第 7 行的加粗字
所示。
[root@linuxprobe ~]# vim /etc/auto.master
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#
/media /etc/iso.misc
/misc /etc/auto.misc
#
# NOTE: mounts done from a hosts map will be mounted with the
# "nosuid" and "nodev" options unless the "suid" and "dev"
# options are explicitly given.
#
/net -hosts
第 12 章
使用 Samba 或 NFS 实现文件共享
246
#
# Include /etc/auto.master.d/*.autofs
#
+dir:/etc/auto.master.d
#
# Include central master map if it can be found using
# nsswitch sources.
#
# Note that if there are entries for /net or /misc (as
# above) in the included master map any keys that are the
# same will not be seen as the first read key seen takes
# precedence.
#
+auto.master
在子配置文件中,应按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。
例如,要把光盘设备挂载到/media/iso 目录中,可将挂载目录写为 iso,而-ftype 为文件系统格式参
数,iso9660 为光盘设备格式,ro、nosuid 及 nodev 为光盘设备具体的权限参数,/dev/cdrom 则是
定义要挂载的设备名称。配置完成后再顺手将 autofs 服务程序启动并加入到系统启动项中:
[root@linuxprobe ~]# vim /etc/iso.misc
iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
[root@linuxprobe ~]# systemctl start autofs
[root@linuxprobe ~]# systemctl enable autofs
ln -s '/usr/lib/systemd/system/autofs.service' '/etc/systemd/system/multi-user.
target.wants/autofs.service'
接下来将发生一件非常有趣的事情。我们先查看当前的光盘设备挂载情况,确认光盘设备没
有被挂载上,而且/media 目录中根本就没有 iso 子目录。但是,我们却可以使用 cd 命令切换到这
个 iso 子目录中,而且光盘设备会被立即自动挂载上。我们也就能顺利查看光盘内的内容了。
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
[root@linuxprobe ~]# cd /media
[root@linuxprobe media]# ls
[root@linuxprobe media]# cd iso
[root@linuxprobe iso]# ls -l
total 812
dr-xr-xr-x. 4 root root 2048 May 7 2017 addons
dr-xr-xr-x. 3 root root 2048 May 7 2017 EFI
-r--r--r--. 1 root root 8266 Apr 4 2017 EULA
-r--r--r--. 1 root root 18092 Mar 6 2012 GPL
dr-xr-xr-x. 3 root root 2048 May 7 2017 images
dr-xr-xr-x. 2 root root 2048 May 7 2017 isolinux
dr-xr-xr-x. 2 root root 2048 May 7 2017 LiveOS
-r--r--r--. 1 root root 108 May 7 2017 media.repo
dr-xr-xr-x. 2 root root 774144 May 7 2017 Packages
dr-xr-xr-x. 24 root root 6144 May 7 2017 release-notes
复习题
247
dr-xr-xr-x. 2 root root 4096 May 7 2017 repodata
-r--r--r--. 1 root root 3375 Apr 1 2017 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root 3211 Apr 1 2017 RPM-GPG-KEY-redhat-release
-r--r--r--. 1 root root 1568 May 7 2017 TRANS.TBL
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/cdrom 3.5G 3.5G 0 100% /media/iso
/dev/sda1 497M 119M 379M 24% /boot 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论