参考:https://zhuanlan.zhihu.com/p/106459445
https://blog.csdn.net/qq_39521554/article/details/79501714
文件系统
持久化的数据是存储在外部磁盘上的,如果没有文件系统,访问这些数据需要直接读写磁盘的sector
,而文件系统存在的意义,就是能更有效的组织、管理和使用磁盘中的数据。
文件系统的组成
要管理,先划分,因为磁盘上的数据要和内存交互,而内存通常是以4KB为单位,所以从逻辑上,把磁盘按照4KB划分比较方便。
被划分的blocks中除了存储文件自身的数据(user data
)外,还需要存储文件的访问权限、大小、创建时间等控制信息(meta data
),meta data
存储的数据结构就是inode
。inode
是“index node
”的简称,早期的Unix
系统中,这些nodes
是通过数组组织起来的,因此要依靠index
来索引数据中的inode
。
同内存分配一样,当有了新的数据产生时,需要选择一个空闲的block
来存放数据,还需要一个空闲的inode
。最简单的办法就是使用bitmap
,包括记录inode
使用情况的bitmap
(如图中I),和记录data block
的bitmap
(如图中D)。还剩下一个block
留给superblock
(如图中S),这个superblock
包含了一个文件系统所有的控制信息,比如系统中有多少个inodes
和data blocks
、inode的信息起始于哪个block
,可能还有一个区别不同文件系统类型的magic number
。
挂载
文件系统生成后,还不能直接使用,需要借助mount
操作,将这个文件系统加入到Linux
的管理,这样用户才能看到并访问。
linux下面所有的文件、目录、设备都有一个路径,这个路径永远以/开头,用/分隔,如果一个路径是另一个路径的前缀,则这两个路径有逻辑上的父子关系。
但是并不是所有逻辑上的父子关系都必须要是同一个设备,决定不同路径对应到哪个设备的机制就叫做mount(挂载)。通过mount,可以设置当前的路径与设备的对应关系。
作者:灵剑
链接:https://www.zhihu.com/question/266907637/answer/315386532
来源:知乎
每个设备会设置一个挂载点,挂载点是一个空目录。一般来说必须有一个设备挂载在/这个根路径下面,叫做rootfs
。其他挂载点可以是/tmp
,/boot
,/dev
等等,通过在rootfs
上面创建一个空目录然后用mount
命令就可以将设备挂载到这个目录上。挂载之后,这个目录下的子路径,就会映射到被挂载的设备里面。
其他
1.使用了 mount /dev/sdb1 ~/Share/
,把新硬盘的区sdb1
挂载到工作目录的~/Share/
文件夹下,之后访问这个~/Share/
文件夹就相当于访问这个硬盘2的sdb1分区了。对/Share/的任何操作,都相当于对sdb1
里文件的操作。所以Linux
下,mount
挂载的作用,就是将一个设备(通常是存储设备)挂接到一个已存在的目录上。访问这个目录就是访问该存储设备。
2.挂载就是把设备放在一个目录下,让系统知道怎么管理这个设备里的文件,了解这个存储设备的可读写特性之类的过程。
3.我们不是有/dev/sdb1
吗,直接对它操作不就行了?这不是它的目录吗?
这不是它的目录。虽然/dev
是个目录,但/dev/sdb1
不是目录。可以发现ls /dev/sdb1
无法执行。/dev/sdb1
,是一个类似指针的东西,指向这个分区的原始数据块。mount
前,系统并不知道这个数据块哪部分数据代表文件,如何对它们操作。