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 文件路径
那么挂载之后
例子
[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
[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个分区 ,分别是 vda1
和 vda2
, 并且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个逻辑分区
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 (虚拟文件系统)
上面是总概图 , 下面是更加细分一点 , 看到 **Direct IO **了吗 , 之前理解 零拷贝 不知道位于操作系统的什么位置 , 这张图就很清晰地画出了位置. !!
实践操作
这是之前自己写的文章, 可以看一下 :
linux-命令-挂载
参考资料
深入
- [linux-内核文档-文件系统](Filesystems in the Linux kernel — The Linux Kernel documentation)
- Linux I/O 基本原理 - 知乎 (zhihu.com) (非常重要 , 值得一看 )
- 看完就明白/dev/sda、/dev/hda是什么了