CentOS挂载详解

接前文,CentOS下ext4、vfat文件系统创建、修改,以及swap分区管理

在Linux中,存储设备的使用一般分三步,分区,创建文件系统(格式化),挂载。

什么是挂载?个人理解,Linux通过倒树形的根文件系统来管理所有的文件,内核只能识别并管理根目录/所在的文件系统及其下的目录和文件。因此其他文件系统想要使用,都需要为其指定在现存目录下的访问入口。

将额外的文件系统,与现存的Linux能够识别的目录,建立起映射关系,实现将现存目录作为访问额外文件系统的入口的功能,这个过程称为挂载;用于访问额外文件系统的,现存文件系统中的指定目录,称为挂载点

挂载的逆过程,解除额外的文件系统与现存Linux能够识别的目录之间的映射关系,称为卸载


一,查询所有块设备信息

挂载需要两个参数,挂载的设备或文件系统,挂载点;
  1. 挂载点,是现有文件系统下的某个目录,是由我们自己指定的;
  2. 要挂载的设备或文件系统,其信息要如何获得?

1. 如果要挂载的是磁盘,可以尝试用fdisk -l命令配合dffree命令

为了更直观的比较,可以加上grep以过滤显示结果,例如:


CentOS挂载详解_第1张图片
fdisk配合df和free查看磁盘挂载情况

从结果中可以看到,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和文件系统的类型

blkid -o full

而list模式更便于我们阅读,此时会显示设备名称、文件系统类型、表现名称、挂载点(会显示挂载点或未挂载装填)和UUID。如下图,根据提示很容易可以看得出/dev/sdb1/dev/sr0处于未挂载状态。

blkid -o list

3. 使用lsblk命令

lsblk:list block devices,显示块设备信息
用法:
  lsblk [选项] [<设备> ...]
常用选项:
  -f, --fs:输出文件系统信息
  -m, --perms:输出权限信息
  -p, --paths:打印完整设备路径

例如,lsblk -fmp,不指定设备则显示所有块设备信息,很容易看到sbd1和sr0没有挂载点,说明他们处于未挂载状态。

CentOS挂载详解_第2张图片
显示效果


二,文件系统的挂载

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

    /dev/cdrom其实是个链接文件

  • 挂载U盘
      事先识别U盘的设备文件;

    CentOS挂载详解_第3张图片
    挂载U盘的过程演示,U盘为FAT32文件系统

  • 挂载本地的回环设备,例如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 /

CentOS挂载详解_第4张图片
结果如图所示

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)"

mount和grep结合使用一例

6. 使用fdisk -l命令
  该命令是分区命令,因此只能看到能够进行分区操作的设备信息(比如光盘就不会显示),同时无论分区有没有挂载都会显示。
  
上面的命令可以简单分为
  可以查看设备信息:blkidlsblkfdisk
  只能查看设备信息:findmntdfmount


四,文件系统的卸载

卸载使用命令umount,设备或挂载点任意指定其中之一即可:umount device|dir
  
  卸载时有可能会遇到挂载点正在被其他进程访问,无法卸载的情况:

挂载点被其他进程访问,无法卸载

  按照系统提示的2个命令查看:
     lsof /test
     fuser -v /test
CentOS挂载详解_第5张图片
查看挂载点正被哪些进程访问

解决办法有2个:
  
  1. 终止所有正在访问某挂载点的进程,比如使用命令fuser -km /test(这个命令有可能导致其他进程出问题,生产环境慎用),或者kill掉访问挂载点的进程,然后再卸载。
  2. 强制卸载:umount -l /testumount -l会等到挂载点空闲后再卸载,相对让人放心一些。

你可能感兴趣的:(CentOS挂载详解)