linux-挂载

通俗解释

理解参考 1

作者:灵剑
链接:https://www.zhihu.com/question/266907637/answer/315386532
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

linux下面所有的文件、目录、设备都有一个路径,这个路径永远以/开头,用/分隔,如果一个路径是另一个路径的前缀,则这两个路径有逻辑上的父子关系。但是并不是所有逻辑上的父子关系都必须要是同一个设备,决定不同路径对应到哪个设备的机制就叫做mount(挂载)。通过mount,可以设置当前的路径与设备的对应关系。
每个设备会设置一个挂载点,挂载点是一个空目录。一般来说必须有一个设备挂载在/这个根路径下面,叫做rootfs。其他挂载点可以是/tmp,/boot,/dev等等,通过在rootfs上面创建一个空目录然后用mount命令就可以将设备挂载到这个目录上。挂载之后,这个目录下的子路径,就会映射到被挂载的设备里面。当访问一个路径时,会选择一个能最大匹配当前路径前缀的挂载点。比如说,有/var的挂载点,也有/var/run的挂载点的情况下,访问/var/run/test.pid,就会匹配到/var/run挂载点设备下面的/test.pid。
同一个设备可以有多个挂载点,同一个挂载点同时只能加载一个设备。访问非挂载点的路径的时候,按照前面所说,其实是访问最接近的一个挂载点,如果没有其他挂载点那么就是rootfs上的目录或者文件了。实际上并不只有linux支持挂载点,Windows也是一样支持的。去控制面板/管理工具/计算机管理 里面,挑一个磁盘(比如D盘),然后给它分一个新的挂载点试试,比如C:\data

理解参考 2

下面这个解释非常容易懂 !!!

Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。

因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。

右边是设备 , 左边是我们的 linux 文件路径

img

那么挂载之后

img

例子

[root@ecs-6c92-0001 ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda2      ext3       36G   27G  7.4G  78% /
devtmpfs       devtmpfs  7.8G     0  7.8G   0% /dev
tmpfs          tmpfs     7.8G     0  7.8G   0% /dev/shm
tmpfs          tmpfs     7.8G  786M  7.0G  10% /run
tmpfs          tmpfs     7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/vdb1      ext3      493G   47G  421G  10% /data
tmpfs          tmpfs     1.6G     0  1.6G   0% /run/user/0
overlay        overlay    36G   27G  7.4G  78% /var/lib/docker/overlay2

可以看到有3个重要的东西 ,分别是 Filesystem , Type 以及 Mounted on

名词

Linux磁盘文件系统命名

章节内容来自 : https://zhuanlan.zhihu.com/p/577081624 ,非原创

接下来主要介绍磁盘文件系统。目前Ext4(Extended File sytem,扩展文件系统)是广泛使用的一种磁盘文件系统格式。是在Ext3基础上发展起来的,对有效性保护、数据完整性、数据访问速度、向下兼容性等方面做了改进,其特点是日志文件系统:可将整个磁盘的写入动作完整地记录在磁盘的某个区域上,以便在必要时回溯追踪。

磁盘是一种计算机的外部存储器设备,由一个或多个覆盖有磁性材料的铝制或玻璃制的碟片组成,用来存储用户的信息,这种信息可以反复地被读取和改写,主要分为以下几类:

  • IDE磁盘:价格低廉,兼容性强,性价比高,但是数据传输慢,不支持热插拔等
  • SCSI磁盘:传输速率高,读写性能好,运行稳定,可连接多个设备,支持热插拔,占用CPU低,但是价格相对较贵,一般用于工作站或服务器上
  • SATA磁盘:结构简单、支持热插拔
    Linux中硬盘以及分区等设备均表示为文件,其命名规则如下:
    IDE磁盘的文件名为:/dev/hdxx
    SCSI/SATA/USB磁盘文件名为:/dev/sdxx

img

[root@b80d844c-0013-4bd3-be90-24d2406370c1 ~]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0   40G  0 disk 
├─vda1 253:1    0    4G  0 part 
└─vda2 253:2    0   36G  0 part /
vdb    253:16   0  100G  0 disk 
└─vdb1 253:17   0  100G  0 part /appdata
vdc    253:32   0  100G  0 disk 
└─vdc1 253:33   0  100G  0 part 
vdd    253:48   0   40G  0 disk 
├─vdd1 253:49   0    4G  0 part [SWAP]
└─vdd2 253:50   0   36G  0 part 

例如上面使用 lsblk命令 (list block ) 查看磁盘和分区情况 , 可以看到 vda这个磁盘分为2个分区 ,分别是 vda1vda2 , 并且vda2 挂载在/跟目录下 ;

下面是一些具体的命名实例:

/dev/hda      #表示第一个IDE硬盘
/dev/hda1     #表示第一块IDE硬盘的第一个主分区
/dev/hda2     #表示第一块IDE硬盘的扩展分区(或第二个主分区)
/dev/hda5     #表示第一块IDE硬盘的第一个逻辑分区
/dev/hda8     #表示第一块IDE硬盘的第四个逻辑分区
/dev/hdb      #表示第二个IDE硬盘
/dev/sda      #表示第一个SCSI硬盘
/dev/sda1     #表示第一个SCSI硬盘的第一个主分区
/dev/sdd3     #表示第四个SCSI硬盘的第三个主分区

为了便于管理和使用,通常会对磁盘进行分区:

  • 主分区:必须要存在的分区,最多能创建4个,最少1个,编号只能是1~4,可以直接格式化,然后安装系统,直接存放文件
  • 扩展分区:会占用主分区位置,即主分区+扩展分区之和最多4个。相当于独立的磁盘,有独立的分区表,但不能独立的存放数据
  • 逻辑分区:扩展分区不能直接存放数据,必须经过再次分割,成为逻辑分区后才能存放数据。一个扩展分区中的逻辑分区可以有任意多个,编号只能从5开始

这一点和 window 的一样

下图中的分区方案为:2个主分区 + 1个扩展分区,其中扩展分区又分割出了2个逻辑分区

img

type

常见的几种类型 :

  • devtmpfs : 一个由内核填充的自动化设备节点

  • tmpfs : 驻留在内存和/或交换分区中的临时文件系统

  • ext3 : 代表“ 扩展(extended)”,“3” 表示这是此文件系统的第 3 代

知识点

几个重要的点 :

1. 一个目录下只能挂载一个盘的分区 ,再次挂载将会被覆盖 ,移除后将恢复

例如/home这个目录下已经挂载了 /dev/vda2 这个文件系统了 , 那么 /home 就不能再挂载 /dev/vda1 了 ,要是继续挂载 ,那么 /dev/vda1 的内容将会

深入 Linux 文件系统

这里看这一篇文章 : https://zhuanlan.zhihu.com/p/436292700

这张图太重要了!! 可以看到 文件系统 (Ext4 等) 是对磁盘空间的逻辑抽象 , 而上一层是 VFS (虚拟文件系统)

img

上面是总概图 , 下面是更加细分一点 , 看到 **Direct IO **了吗 , 之前理解 零拷贝 不知道位于操作系统的什么位置 , 这张图就很清晰地画出了位置. !!

img

实践操作

这是之前自己写的文章, 可以看一下 :
linux-命令-挂载

参考资料

深入

posted @ 2023-09-07 16:55  float123  阅读(1495)  评论(0编辑  收藏  举报