本文主要是介绍Linux入门真经-033文件系统的挂载与卸载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、手动挂载文件系统
我们已经知道,Linux使用的是倒状的树形结构,一切都源于根目录。
因此,根文件系统以外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;
如下图,当我们要使用sdb1上的空间时,我们可以在现有的文件层级目录中新建一个目录forsdb1。在挂载之前,forsdb1应该指向的是/所在分区的某一个物理空间。当sdb1挂载到forsdb1之后,forsdb1所指向的就改为sdb1分区上的某一段物理空间,因此,我们访问forsdb1的目录的时候,其实是在访问sdb1这个分区中的数据。linux通过这种机制来使用其他硬盘中的空间。
如果在挂载之前,forsdb1目录下面有数据,那么挂载之后这些数据将被暂时隐藏起来。(因为原本forsdb1指向的是这些数据,挂载之后指向了另一个分区,相当于通往这些数据的入口不见了)。因此,建议作为挂载点的目录,在挂载之前不要存放其他数据。但是将分区卸载后,forsdb1会指回原本的数据。
作为挂载点的目录:
(1) 应该事先存在,如果事先不存在,应该手动创建;
(2) 应该是未被或不会被其它进程使用到的目录;
(3) 挂载点下原有的文件将会被隐藏;
挂载方法:mount命令
mount [-nrw] [-tvfstype] [-o options] device dir
命令选项:
-r:readonly,只读挂载;
-w:read and write, 读写挂载;
-n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;
-t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;
-L LABEL:挂载时以卷标的方式指明设备;
-o options:挂载选项
sync/async:同步/异步操作;
atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
remount:重新挂载;
acl:支持使用facl功能;
# mount -o acl device dir
ro:只读
rw:读写
dev/nodev:此设备上是否允许创建设备文件;
exec/noexec:是否允许运行此设备上的程序文件;
auto/noauto:
是否自动挂载
user/nouser:是否允许普通用户挂载此文件系统;
suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;
如果以上都不指定,默认的选项是:suid,dev, exec, auto, nouser, async, and relatime.
举例:
将/dev/sdb1挂载到/opt目录下。
[root@localhost ~]# mount /dev/sdb1 /opt
可以使用df -h查看挂载情况
[root@localhost opt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 1.1G 16G 6% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 9.4G 33M 9.3G 1% /opt
[root@localhost opt]#
可以发现sdb1已经mounted on /opt这个目录上了。此后,我们在opt目录及其子目录上新增的文件,使用的都是sdb1的空间
挂载光盘:
[root@localhost opt]# mount /dev/sr0 /mnt/
mount: /dev/sr0 is write-protected,mounting read-only
[root@localhost opt]# cd /mnt/
[root@localhost mnt]# ls
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[root@localhost mnt]#
umount:卸载分区或挂载点
umount 分区/挂载点
注意:正在被进程访问到的挂载点无法被卸载;
查看哪些进程在使用该挂载点:(lsof和fuser最小安装不自带,现在了解即可,以后学会yum或者rpm之后再来装这两个命令)
lsof MOUNT_POINT
或者
fuser -v MOUNT_POINT
终止所有正在访问某挂载点的进程:
fuser -km MOUNT_POINT
2、开机自动挂载文件系统
之前多次强调过:我们使用命令执行之后,通常会立即生效,但是相关配置只是在内存中启用,重启之后还是会时效。要永久地更改配置一般要修改配置文件,修改配置文件不会立即生效,但是重启进程或重启服务器之后则会生效。
因此,只用mount命令进行挂载,重启之后是无法实现自动挂载的。
自动挂载需要修改/etc/fstab文件(不陌生吧,之前举例经常拿这个文件玩~)。
[root@localhost mnt]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 2418:32:49 2018
#
# Accessible filesystems, by reference, aremaintained 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=d36d93ea-2551-4c6a-a3c9-df98d458b5bc/boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@localhost mnt]#
这个文件的格式是这样的:
一行里有6个字段,中间用空格或者tab分隔:
(1) 要挂载的设备:
可以用设备文件表示,也可以是LABEL、UUID(cenots7目前默认使用此方式)
(2) 挂载点
swap类型的设备的挂载点为swap;
(3) 文件系统类型;
(4) 挂载选项
defaults:使用默认挂载选项;
如果要同时指明多个挂载选项,彼此间以逗号分隔;
如:defaults,acl,noatime,noexec
(5) 转储频率(备份频率)
0:从不备份;
1:每天备份;
2:每隔一天备份;
(6) 自检次序
0:不自检;
1:首先自检,通常只能是根文件系统可用1;
2:次级自检
3:2之后自检
……
不同设备可以使用同一个自检次序
使用mount -a可以挂载此文件中支持挂载的所有文件。
我们来修改fstab使得sdb1能够开机自动挂载:
[root@localhost~]# vi /etc/fstab
在fstab里增加这一行:
/dev/sdb1 /opt xfs defaults 0 0
修改后的fatab文件:
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 2418:32:49 2018
#
# Accessible filesystems, by reference, aremaintained 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=d36d93ea-2551-4c6a-a3c9-df98d458b5bc/boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /optxfs defaults0 0
[root@localhost ~]#
重启后再用df -h命令查看,会发现实现了自动挂载。
下节对文件系统相关知识和常用命令进行补充。
关注本公众号获取每日更新
这篇关于Linux入门真经-033文件系统的挂载与卸载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!