接前文,CentOS下ext4、vfat文件系统创建、修改,以及swap分区管理
在Linux中,存储设备的使用一般分三步,分区,创建文件系统(格式化),挂载。
什么是挂载?个人理解,Linux通过倒树形的根文件系统来管理所有的文件,内核只能识别并管理根目录/
所在的文件系统及其下的目录和文件。因此其他文件系统想要使用,都需要为其指定在现存目录下的访问入口。
将额外的文件系统,与现存的Linux能够识别的目录,建立起映射关系,实现将现存目录作为访问额外文件系统的入口的功能,这个过程称为挂载;用于访问额外文件系统的,现存文件系统中的指定目录,称为挂载点。
挂载的逆过程,解除额外的文件系统与现存Linux能够识别的目录之间的映射关系,称为卸载。
一,查询所有块设备信息
挂载需要两个参数,挂载的设备或文件系统,挂载点;
1. 挂载点,是现有文件系统下的某个目录,是由我们自己指定的;
2. 要挂载的设备或文件系统,其信息要如何获得?
1. 如果要挂载的是磁盘,可以尝试用fdisk -l
命令配合df
和free
命令
为了更直观的比较,可以加上grep以过滤显示结果,例如:
从结果中可以看到,swap分区只有sda3,并且大小和现有swap大小基本一样,可知swap分区已全部挂载。
已挂载磁盘只有sda1和sda2,sdb1没有挂载。
2. 使用blkid -o format
命令
blkid命令用于显示所有块设备属性,无论该设备有没有被挂载
blkid -o format
的format常用值有
full:显示设备名称、UUID和文件系统类型
value:显示UUID和文件系统类型(不是像full里那样的键值对,而是逐一打印UUID和TYPE的值)
list:以对用户较友好的格式输出块设备属性
device:输出设备名称其中,full显示的内容=device+value,list格式最常用,格式也更友好
在format的多个值中比较推荐list或full,full模式下会显示设备名称、UUID和文件系统的类型
而list模式更便于我们阅读,此时会显示设备名称、文件系统类型、表现名称、挂载点(会显示挂载点或未挂载装填)和UUID。如下图,根据提示很容易可以看得出/dev/sdb1
和/dev/sr0
处于未挂载状态。
3. 使用lsblk
命令
lsblk:list block devices,显示块设备信息
用法:
lsblk [选项] [<设备> ...]
常用选项:
-f, --fs:输出文件系统信息
-m, --perms:输出权限信息
-p, --paths:打印完整设备路径
例如,lsblk -fmp
,不指定设备则显示所有块设备信息,很容易看到sbd1和sr0没有挂载点,说明他们处于未挂载状态。
二,文件系统的挂载
1,挂载和卸载命令的参数:
挂载使用mount
命令,设备、挂载点 两者都需要指明
卸载使用umount
命令,设备、挂载点 两者只需要指明其一
2,一般挂载
命令格式:mount [-nrw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备或文件系统,可以通过以下方式指定
1)设备文件名称:例如/dev/sda5,默认使用这种方式
2)卷标:-L 'LabelName',例如 -L 'MYDATA'
3)UUID:-U UUID,即使设备名称或者卷标改了,也不影响识别
4)伪文件系统(暂不介绍):proc,sysfs,devtmpfs,configfs
dir:挂载点
1)事先存在,并建议使用空目录,
2)如果是长期挂载,尽量不要使用mnt和media目录
3)处于busy状态(例如正在被访问的目录)的设备无法被卸载
mount命令本身选项:
-r:readonly,只读挂载(整个分区只读);
-w:read and write, 读写挂载;
-n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab
文件中;
-n用于禁止此特性:挂载但不更新/etc/mtab
文件;
-t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;
-L LABEL:挂载时以卷标的方式指明设备;
mount -L LABEL dir
-U UUID:挂载时以UUID的方式指明设备;
mount -U UUID dir
-o options:挂载选项,多用于定义挂载时文件系统的特性
sync/async:同步/异步操作;
atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
remount:重新挂载;
acl:支持使用facl功能;
# mount -o acl device dir
# tune2fs -o acl device
# mount -o remount,acl device dir
#重新挂载并增加acl特性
ro:只读,-o ro 等效于 -r
rw:读写,-o rw 等效于 -w
dev/nodev:此设备上是否允许创建设备文件;
exec/noexec:是否允许运行此设备上的程序文件;
auto/noauto:是否支持自动挂载,即是否支持mount -a
,如果是noauto
,那么即使在fstab
中加入记录,启动时也不会自动挂载该设备;
user/nouser:是否允许普通用户挂载此文件系统;
suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;
defaults:使用默认挂载特性: rw, suid, dev, exec, auto, nouser, async, relatime(默认特性和CentOS版本及内核版本有关)
特别的,如果指定的特性与defaults的默认特性冲突,以额外指定的特性为准,例如mount -o defaults,noauto device dir
,默认特性是auto
,额外指定noauto
,device实际表现的挂载特性是noauto
。
mount的特殊用法:
将一个目录绑定至另一个目录上,实现两个不同路径访问同一个目录:
mount --bind 源目录 目标目录
3,挂载可移动设备或回环设备
-
挂载光盘:
mount -r /dev/cdrom mount_point
光盘设备文件一般名称是/dev/cdrom
,/dev/dvd
,其实都是链接文件,例如我的虚拟机上/dev/cdrom
就指向/dev/sr0
-
挂载U盘:
事先识别U盘的设备文件;
挂载本地的回环设备,例如iso镜像或img镜像文件:
# mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
注意/PATH/TO/SOME_LOOP_FILE替换为镜像文件的路径和文件名,MOUNT_POINT替换为挂载点路径
4,设置开机后自动挂载
修改配置文件/etc/fstab
,该文件中每一行定义一个要挂载的文件系统及相关属性,每一行的内容分为6个字段:
(1) 要挂载的设备,可以是以下内容:
设备文件的名称,如/dev/sda1
设备的LABEL
设备的UUID,CentOS 7中较多使用此种方式
伪文件系统:如sysfs, proc, tmpfs等
(2) 挂载点路径
如果是swap类型的设备,挂载点就是swap
;
(3) 文件系统类型,如ext4,xfs,btrfs,vfat等等;
(4) 挂载选项,也就是mount -o
命令的那些选项:
defaults:使用默认挂载选项;
如果要同时指明多个挂载选项,彼此间以逗号分隔,如:defaults,acl,noatime,noexec
(5) 转储频率,已经很少使用:
0:从不备份;
1:每天备份;
2:每隔一天备份;
(6) 自检次序:
0:不自检;
1:首先自检,通常只能是根文件系统可用1;
2:次级自检;
自动挂载和
mount -a
mount -a
命令将自动挂载/etc/fstab
文件中配置的设备,可以认为系统启动时会执行一次该命令以挂载已配置的设备。
但自动挂载有个条件——该设备的挂载选项中没有noauto
。换句话说,挂载选项中有noauto
的设备在执行mount -a
时不会被挂载。
三,查看已挂载的文件系统信息
1. 使用findmnt
命令
findmnt 命令将列出所有已挂载的文件系统或者搜索出某个文件系统,是查看文件系统时很常用的命令之一。findmnt 命令能够在 /etc/fstab
、/etc/mtab
或 /proc/self/mountinfo
这几个文件中进行搜索。
命令常用选项:
-l:表示采用列表形式输出结果,默认采用树形输出结果
--df 或 -D:以df类型输出结果,显示文件系统及设备空间使用情况
-t TYPE:只输出文件类型为TYPE的结果
参数:
findmnt可以指定设备或挂载点,输出相关结果,不带任何参数则输出所有结果,例如:
findmnt /dev/sda1
findmnt /
2. 使用blkid
命令
blkid -o list
,在第一部分已经简单介绍过该命令的用法,这里不再重复。
3. 使用lsblk
命令
lsblk -fp [device]
,第一部分也已经介绍过,这里不再重复。
4. 使用df
命令
常用df -hT
来查看已挂载设备的文件系统及其空间使用情况,-T
表示查看文件类型,-h
表示以方便识别的方式输出空间情况。
更多用法请看man手册。
5. 使用mount
命令
直接使用mount
命令,不带选项和参数,会输出所有已挂载的系统信息,里面可能有很多我们不需要的信息,常和grep一起使用以查看我们关注的内容。
如:mount | grep -E "(sd)|(sr)"
6. 使用fdisk -l
命令
该命令是分区命令,因此只能看到能够进行分区操作的设备信息(比如光盘就不会显示),同时无论分区有没有挂载都会显示。
上面的命令可以简单分为
可以查看设备信息:blkid
,lsblk
,fdisk
只能查看设备信息:findmnt
,df
,mount
四,文件系统的卸载
卸载使用命令umount
,设备或挂载点任意指定其中之一即可:umount device|dir
卸载时有可能会遇到挂载点正在被其他进程访问,无法卸载的情况:
按照系统提示的2个命令查看:
lsof /test
fuser -v /test
解决办法有2个:
1. 终止所有正在访问某挂载点的进程,比如使用命令fuser -km /test
(这个命令有可能导致其他进程出问题,生产环境慎用),或者kill掉访问挂载点的进程,然后再卸载。
2. 强制卸载:umount -l /test
,umount -l
会等到挂载点空闲后再卸载,相对让人放心一些。