CentOS挂载详解

作者: 千幻流光 | 来源:发表于2019-08-21 20:55 被阅读1次

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

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

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

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

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


    一,查询所有块设备信息

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

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

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


    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没有挂载点,说明他们处于未挂载状态。

    显示效果

    二,文件系统的挂载

    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盘的设备文件;

      挂载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 /

    结果如图所示

    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命令
      该命令是分区命令,因此只能看到能够进行分区操作的设备信息(比如光盘就不会显示),同时无论分区有没有挂载都会显示。
      
    上面的命令可以简单分为
      可以查看\color{red}{未挂载}设备信息:blkidlsblkfdisk
      只能查看\color{red}{已挂载}设备信息:findmntdfmount


    四,文件系统的卸载

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

    挂载点被其他进程访问,无法卸载
      按照系统提示的2个命令查看:
        lsof /test
        fuser -v /test
    查看挂载点正被哪些进程访问

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

    相关文章

      网友评论

        本文标题:CentOS挂载详解

        本文链接:https://www.haomeiwen.com/subject/qkdzjctx.html