如何理解mount

mount有两重含义:

  1. 代表一种动作,另外一个是
  2. linux中有个命令就叫mount.

下面一起来看一下,从我发现的一个问题出发:

 

我在系统的启动脚本中想添加一些能让weston正常启动所依赖的资源,比如一个叫做X11/xkb的目录,

然后发现,在启动weston之前总是无法成功的执行 mkdir -p /system/usr/share/X11/xkb,看到log才知道问题出在:

mkdir的时候,报错 readonly file system.

 

也就是说这个文件系统是只读的,我写mkdir写入新的目录是不被允许的。我的解决方案是:

执行 mount -o rw -o remount /system,然后再去mkdir -p /system/usr/share/X11/xkb 就可以了

(更详细的用法:https://www.runoob.com/linux/linux-comm-mount.html)

我们以mount命令为切入点来了解一些上面的做法:

首先执行mount, 我们可以看到以下信息:

rootfs on / type rootfs (ro, seclable)
devtmpfs on /dev type devtmpfs (rw, ...)
sysfs on /sys type sysfs
/dev/block/mmcblk0p13 on /system type ext4 (ro, seclabel)
/dev/block/mmcblk0p22 on /data type ext4 (ro, seclabel)
/dev/block/mmcblk0p23 on /blackbox type ext4 (ro, seclabel)
/sys/kernel/debug on /sys/kernel/debug/ debugfs
....

可以看到mount 是把设备device 和 目录directory 关联了起来,这个过程就是挂载。

linux下一切皆是文件,区别就是不同的目录下挂载的文件系统的类型可能是不同的;

比如说/ 是根文件系统的挂载点,/sys 是 sysfs的挂载点;

再比如说,/blackbox 就是普通的ext4 文件系统,它对应一个块设备/dev/block/mmcblk0p23,它的挂载点是/blackbox

如果没有挂载的操作,我们是没有办法访问到块设备的内容的。

 

这里可能有点绕,挂载一个存储设备比较好理解,挂载一个新的文件系统是怎么个回事?

 

我们不妨思考这样一个问题,一个存储设备的文件系统到底是什么,为什么需要文件系统?

一个是为了分层考虑,二个是文件系统可以看作文件的写入方和读取双方的协议,写入方按照一定的规则

写入数据,读取方按照同样的规则读出数据,这样就完成了数据的存与取。这也是为什么一个U盘或者存储卡

从硬件上看只是一个存储设备,但是其中的数据组织形式却是根据不同的文件系统有不同的形式,因此要能正确读取这些文件

需要操作系统支持对应的文件格式才可以。简言之,文件系统只是一种数据存储的协议,无需依赖硬件。这样就是可以比较好的

理解sysfs, devfs, tempfs了,这些文件系统就是在内存中,被相应的驱动有效的组织起来,然后挂载到特定的目录上,linux 通过

VFS接口去操作对应目录下的文件,然后VFS会调到特定的fs的read, write 接口,完成“文件”的读写操作,这个文件可以是一个

存储设备中文本文件,也可以是一个驱动的设备文件。

 

搞懂这一点,文件系统就不难理解了。当然,如果你问我ext4 和 根文件系统有什么区别,怎么做一个文件系统,这就是另外一个话题了。

 

posted on 2022-04-07 21:48  疾速瓜牛  阅读(575)  评论(0编辑  收藏  举报

导航