Linux 内核源码分析---挂载文件系统

news2024/9/21 20:30:56

挂载描述符

Linux 操作系统的一个文件系统,只有挂载到内存中目录树的一个目录下,进程才能够访问这个文件系统。
每次挂载文件系统,虚拟文件系统就会创建一个挂载描述符(mount 结构体)。
挂载描述符用来描述文件系统的一个挂载实例,同一个存储设备上的文件系统可以多次挂载,每次挂载到不同的目录下。
在这里插入图片描述
在这里插入图片描述

文件系统类型

因每种文件系统的超级块的格式不同,所每种文件系统需要向虚拟文件系统注册文件系统类型file_system_type,并且实现mount方法用来读取和解析超级块。
在这里插入图片描述

管理员权限可以执行命令:cat /proc/filesystems来查看已注册的文件系统类型。
在这里插入图片描述

挂载文件系统

虚拟文件系统在内存中把目录组织为一棵树,一个文件系统,只有挂载到内存中目录树的一个目录,进程才能访问这个文件系统

管理员权限可以执行命令:mount -t fstype [-0 options] device dir。把存储设备 device 上类型为 fstype 的文件系统挂载到目录 dir 下。
例如:执行命令“mount -t ext3 /dev/sda1 /a”,把 sata 硬盘 a 的第一个分区上的 ext3 文件系统挂载到目录 “/a

glibc库封装挂载文件系统的函数 mount,两个卸载文件系统的的函数 umount/umount2
在这里插入图片描述
source:设备名称;
target:目录名称;
filesystemtype:文件系统类型的名称;
flags:挂载标志位;
data:挂载选项。

将文件系统2挂载到目录"/a"下,目录a属于文件系统1,挂载描述符的数据结构如下
在这里插入图片描述
为了能够快速找到目录 a 下挂载的文件系统,把文件系统 2 的挂载描述符加入全局散列表 mount_hashtable,关键字是{父挂载描述符,挂载点},根据文件系统 1 的挂载描述符和目录 a 可以在散列表中找到文件系统 2 的挂载描述符。

mount、super_block、file_system_type三者关系图解
在这里插入图片描述
图片来自:https://cloud.tencent.com/developer/article/1857533

系统调用 mount

系统调用 mount 用来挂载文件系统:
在这里插入图片描述
kernel_type:挂载文件系统的类型;
kernel_dev:块设备名称;
flags:标志位(挂载标志);
dir_name:挂载点的路径(用户态路径);
options:选项信息。

主要做的工作为从用户态拷贝数据,然后执行 do_mount 来执行操作。

do_mount 挂载执行流程操作:
a.调用函数 user_path,根据目录名称找到挂载描述符和 dentry 实例;
b.调用函数 get_fs_type,根据文件系统类型的名称査找 file_sytem_type 实例;
c.调用函数 alloc_vfsmnt,分配挂载描述符;
d.调用文件系统类型的挂载方法,读取并且解析超级块;
e.把挂载描述符添加到超级块的挂载实例链表中;
f.把挂载描述符加入散列表;
9.把挂载描述符加入父亲的孩子的链表。

在这里插入图片描述

绑定挂载(bind mount) 用来把目录树的一课子树挂载到其它地方。执行绑定挂载命令:mount --bind olddir newdir
把目录 olddir 为根的子树挂载到目录 newold,以后从目录 newdir 和目录 olddir 可以看到相同的内容。

https://cloud.tencent.com/developer/article/1857535

https://cloud.tencent.com/developer/article/1857533

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS 多按钮根据半圆弧度排列

需求 多个按钮根据弧度&#xff0c;延边均匀排列。 实现 HTML 分两级&#xff1b;第一级&#xff0c;外层定义按钮的 compose-container 宽度&#xff1b;第二级&#xff0c;按钮集合&#xff0c;使用方法 styleBtn(index)&#xff0c;根据索引计算&#xff1b; <div c…

原理图与 PCB设计核心指南!

这篇文章献给从事电子信息行业的硬件工程师、射频工程和PCB工程师&#xff0c;若有不足之处&#xff0c;请多多包涵&#xff01; 原理图设计原理 原理图设计是电子设计的核心环节&#xff0c;它为后续的 PCB 设计、生产、调试等流程奠定了坚实基础。深入理解原理图设计的原理及…

【Hot100】LeetCode—124. 二叉树中的最大路径和

1- 思路 使用递归 dfs 实现① 递归思路&#xff1a;每次递归返回值为 &#xff0c; root.valMath.max(left,right) 从 左右孩子中挑选一个大的。② 递归公式&#xff1a;定义 sum&#xff0c;sum root.val left right 2- 实现 ⭐124. 二叉树中的最大路径和——题解思路 cl…

如何使用调查问卷获得需求

通过调查问卷进行需求调研是个效率非常高的方法&#xff0c;也是需求调研常用的方法。对于调研者&#xff0c;不必跑到工作现场&#xff0c;不必跟一个又一个用户一遍又一遍地沟通&#xff0c;只要编写调查问卷&#xff0c;让甲方对接人安排人回答&#xff0c;然后分析答卷就可…

基于区块链的合同存证应用开发

基于区块链的合同存证应用开发 任务一:环境准备 1.启动区块链网络 目录: /root/xuperchain/output/ 启动区块链网络 bash constrol.sh start2.创建钱包账户 目录: /root/xuperchain/output/ 创建tenant, landlord钱包账户,命令如下: bin/xchain-cli account newke…

基于 SpringBoot 的 会员制医疗预约服务管理信息系统

开发技术 JavaMySQLSpringBoot 系统分析 需求分析 会员制医疗预约服务管理信息系统的作用&#xff0c;可以提高会员制医疗预约服务管理的工作人员的效率&#xff0c;协助他们对会员制医疗预约服务信息进行统一管理&#xff0c;为管理者提供信息储存和查询搜索系统。一个良好…

【LVS】部署DR模式集群

一、配置实验环境 每台主机的防火墙和SELinux都要关掉 systemctl stop firewalld setenforce 0 1、client(eth0为nat模式) 配置好网卡IP和网关IP&#xff0c;然后重启网卡 nmcli connection reload nmcli connection up eth0 [rootclient ~]# cat /etc/NetworkManager/syst…

AI赋能周界安防:智能视频分析技术构建无懈可击的安全防线

周界安全防范是保护机场、电站、油库、监狱、工业园区等关键设施免受非法入侵和破坏的重要措施。传统的周界安防手段主要依靠人员巡查和物理屏障&#xff0c;但这种方式不仅人力成本高&#xff0c;而且效率较低&#xff0c;难以满足日益复杂多变的安全需求。随着AI技术的引入&a…

3 个关键让你的 Matplotlib 图表高效发布

文章缩略图&#xff08;作者提供的图片&#xff09; 数据可视化比查看原始数字数据提供了更深刻的见解。 然而&#xff0c;创建吸引人的图表需要时间和精力。Matplotlib 是 Python 中数据可视化的事实标准库。它很简单&#xff0c;已经使用了几十年&#xff0c;而且你正在寻找…

数字IC验证基础知识

1. 形式验证 利用数学分析的方式&#xff0c;对设计的状态空间进行穷举分析的验证&#xff0c;数据静态验证&#xff0c;不需要灌注激励&#xff0c;对设计进行检查&#xff1b; 参考&#xff1a; Formal Verification (一) 形式验证的分类、发展、适用场景

在 Django 表单中传递自定义表单值到视图

在Django中&#xff0c;我们可以通过表单的初始化参数initial来传递自定义的初始值给表单字段。如果我们想要在视图中设置表单的初始值&#xff0c;可以在视图中创建表单的实例时&#xff0c;传递一个字典给initial参数。 1、问题背景 我们遇到了这样一个问题&#xff1a;在使…

安卓默认混淆规则文件的区别

在 Android 项目中&#xff0c;ProGuard 是一个优化和混淆代码的工具。proguard-android-optimize.txt 和 proguard-android.txt 是两个用于配置 ProGuard 的默认规则文件&#xff0c;如图下 它们有以下区别&#xff1a; proguard-android-optimize.txt: 优化&#xff1a;这个配…

基于Hadoop的北京市二手房价数据分析与可视化

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍总结每文 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 随着中国经济的快速发展和城市化进程的加速&#xff0c;房地产市场已成为国民经…

基于Java中的SSM框架实现在线网上书店系统项目【项目源码+论文说明】

基于Java中的SSM框架实现在线网上书店系统演示 摘要 本文介绍了利用JSP技术实现动态网上书店的发展概况、技术特点、应用原理和方法&#xff0c;充分突出了JSP技术的优越性。 本文简要论述了电子商务的优势、对社会的影响以及建立电子商务网站应注意的问题&#xff0c;并介绍了…

喜报|热烈祝贺超维WO—100室外轮式巡检机器人取得中国电力科学研究院产品检测合格证书

近日&#xff0c;超维WO—100室外轮式巡检机器人顺利通过中国电力科学研究院&#xff08;武汉高压研究所&#xff09;的资料审查、测试、及综合评估&#xff0c;并取得产品检测合格证书&#xff01; 中国电力科学研究院是中国最权威的实验室认可机构&#xff0c;其认证结果得到…

代码随想录——判断子序列(Leetcode 392)

题目链接 双指针 思路&#xff1a; 初始化两个指针 i 和 j&#xff0c;分别指向 s 和 t 的初始位置。每次贪心地匹配&#xff0c;匹配成功则 i 和 j 同时右移&#xff0c;匹配 s 的下一个位置&#xff0c;匹配失败则 j 右移&#xff0c;i 不变&#xff0c;尝试用 t 的下一个字…

《Techporters架构搭建》-Day04 基础架构

功能权限代码 从代码分层开始分层设计是什么&#xff1f;有什么好处&#xff1f;分层设计带来的好处项目分层的目的阿里分层建议DDD分层 代码编写实体类Mapper层结构设计 Service层结构设计 Controller层结构设计 规范及设计遵循Restful API遵循领域模型规约对象拷贝统一接口返…

H20 GPU算力评估分析

H20算力秘密: GPU算力评估 一、从H20谈起 NVIDIA国内热销H20显卡&#xff0c;TFLOPS达标&#xff0c;却声称能媲美A800/A100&#xff0c;究竟凭何底气&#xff1f;揭秘其背后的性能奥秘。 看下表&#xff1a; H20的FP16 TFLOPS为148&#xff0c;虽不及A800的312&#xff0c;但…

Pandas DataFrame 多条件索引

问题背景 在数据分析和处理中&#xff0c;经常需要根据特定条件过滤数据&#xff0c;以提取感兴趣的信息。Pandas DataFrame 提供了多种灵活的方式来索引数据&#xff0c;其中一种是使用多条件索引&#xff0c;它允许使用逻辑条件组合来选择满足所有条件的行。 解决方案 可以…

Web开发-CSS篇-上

CSS的发展历史 CSS&#xff08;层叠样式表&#xff09;最初由万维网联盟&#xff08;W3C&#xff09;于1996年发布。CSS1是最早的版本&#xff0c;它为网页设计提供了基本的样式功能&#xff0c;如字体、颜色和间距。随着互联网的发展&#xff0c;CSS也不断演进&#xff1a; C…