45 mount 文件系统

news2024/11/15 7:54:26

前言

在 linux 中常见的文件系统 有很多, 如下 

基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 
内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 
闪存文件系统, ubifs, jffs2, yaffs  

文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用关心 底层文件系统的具体实现, 用户只用操作 open/read/write/ioctl/close 的相关 系统调用, 这一层系统调用 会操作 vfs 来处理响应的业务 

vfs 会有上面各种文件系统对应的 读写 相关服务, 进而 将操作下沉到 具体的文件系统 

我们这里 着重来关注一下 文件系统的挂载 

 

 

系统自身的文件系统挂载

在启动的过程中需要挂载如下文件系统 

mnt_init - sysfs_init
mnt_init - init_rootfs
mnt_init - init_ramfs
vfs_caches_init - bdev_cache_init
start_kernel - proc_root_init
start_kernel - cpuset_init
start_kernel - cgroup_init
start_kernel - cgroup_init - cgroup2
kernel_init - shmem_init
kernel_init - driver_init - devtmpfs_init
kernel_init - do_init_calls - debugfs_init
kernel_init - do_init_calls - tracefs_init
kernel_init - do_init_calls - securityfs_init
kernel_init - do_init_calls - sock_init
kernel_init - do_init_calls - bpf_init
kernel_init - do_init_calls - pipepfs_init
kernel_init - do_init_calls - init_hugetlbfs_fs
kernel_init - do_init_calls - init_devpts_fs
kernel_init - do_init_calls - ext4_init_fs - register_as_ext3
kernel_init - do_init_calls - ext4_init_fs - register_as_ext2
kernel_init - do_init_calls - ext4_init_fs
kernel_init - do_init_calls - init_squashfs_fs
kernel_init - do_init_calls - init_vfat_fs
kernel_init - do_init_calls - init_ecrypt_fs
kernel_init - do_init_calls - fuse_fs_init
kernel_init - do_init_calls - fuse_ctl_init
kernel_init - do_init_calls - init_pstore_fs
kernel_init - do_init_calls - init_mqueue_fs

 

 

基于 tmpfs 来调试

主要是调试 mount 这个系统调用, 我们使用比较简单一点的 tmpfs 来进行调试, 测试 

主要是有几个流程, 创建super_block, 初始化super_block, 真实的挂载操作 

(initramfs) mkdir /memFs
(initramfs) mount -t tmpfs -osize=64m tmpfs /memFs

 

 

创建 super_block 

为 super_block 分配空间, 初始化各个链表, 各种基础属性, 锁 

注册 super_block 到 全局链表 

dd74cac3feb9455ca10a22a6bb27090d.png

 

 

初始化 super_block 

主要是基于 各个 fsType 传入的 fill_super 来进行初始化 super_block 

初始化 maxBytes, blockSize, blockSizeBits, magic, s_op[文件系统给的各类操作], root 节点的 inode, 创建 root 对应的 dentry, 并和 super_block 关联起来 

aa7ad2ea2e7e47ef834cfe5b46690e08.png

 

 

挂载 mount节点 到 mount树

如下 这里还是在初始化 mount, vfsmount 

记录 mount_root, mount_super_block, mount_point 等等, 返回给 上层的是 vfs_mount 

42e562e588f54bd78da1142b47dac632.png

 

将 mount 挂载到 mount 树, 挂载路径为 "/memFs" 

58d1d1fc5ff64b34abed61b1f7a3f929.png

 

这里就是在 namespace.mount_hashtable 中注册 rootfs 的 "/memFs" 挂载到了 "tmpfs" 的 "/" 上面, 访问 rootfs 的 "/memFs" 需要转换为 访问 tmpfs 的 "/" 

e3d6a5ec517f477eabc7ff1faca675e7.png

 

除此之外 还有记录其他的元数据什么的 

29df5a543f8047e78fecb727faa25ea8.png

 

 

挂载信息的使用

在根据 path 进行 lookup 的时候, 会查询 mount_hashtable, 查看给定的 路径 是否挂载了其他文件系统, 如果有转换为 给定的文件系统的 "/" 

如下地方就是在 切换 path 

ee4ac9731bb44ae1994431a8a62afffb.png

 

更详细可以参考 proc 文件系统 中 "根据 path 获取到 inode 的过程" 

 

 

 

 

 

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

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

相关文章

1.php开发-个人博客项目文章功能显示数据库操作数据接收

(2022-day12) #知识点 1-php入门,语法,提交 2-mysql 3-HTMLcss ​ 演示案例 博客-文章阅读功能初步实现 实现功能: 前端文章导航,点入内容显示,更改ID显示不同内容 实现步骤&#xff1…

04 MyBatisPlus之逻辑删除+锁+防全表更新/删除+代码生成插件

1 逻辑删除 1. 1 什么是逻辑删除 , 以及逻辑删除和物理删除的区别? 逻辑删除,可以方便地实现对数据库记录的逻辑删除而不是物理删除。逻辑删除是指通过更改记录的状态或添加标记字段来模拟删除操作,从而保留了删除前的数据,便于后续的数据…

P1059 [NOIP2006 普及组] 明明的随机数————C++、Python

目录 [NOIP2006 普及组] 明明的随机数题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 解题思路Code——CCode——Python运行结果 [NOIP2006 普及组] 明明的随机数 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性&#xff0…

uniapp的IOS证书(.p12)和描述文件(.mobileprovision)申请 2024年最新教程

文章目录 准备环境登录 iOS Dev Center 下面我们从头开始学习一下如何申请开发证书、发布证书及相对应的描述文件。首先需要申请苹果 App ID (App的唯一标识)生成证书请求文件申请开发(Development)证书和描述文件申请开发(Development)证书添加调试设备…

免费200万Tokens 用科大讯飞API调用星火大模型服务

简介 自ChatGPT火了之后,国内的大模型发展如雨后春笋。其中的佼佼者之一就是科大讯飞研发的星火大模型,现在大模型已经更新到V3 版本,而且对开发者也是相当友好,注册就送200万tokens,讯飞1tokens 约等于 1.5 个中文汉字 或者 0.8 个英文单词…

spring data mongo 在事务中,无法自动创建collection

spring data mongo 在事务中,无法自动创建collection org.springframework.dao.DataIntegrityViolationException: Write operation error on server xxx:30001. Write error: WriteError{code=263, message=Cannot create namespace xxx.xxxin multi-document transaction.…

Visual Studio 设置编辑框(即代码编辑器)的背景颜色

在Visual Studio 中设置编辑框(即代码编辑器)的背景颜色,可以按照以下步骤进行: 打开Visual Studio。在菜单栏上找到并点击“工具”(Tools)选项。在下拉菜单中选择“选项”(Options)。在“选项”对话框中,导航至“环境…

【鸿蒙4.0】详解harmonyos开发语言ArkTS

文章目录 一.什么是ArkTS?1.ArkTS的背景2.了解js,ts,ArkTS的演变js(Javascript)Javascript的简介Javascript的特点 ts(Typescript)ArkTS 二. ArkTS的特点 一.什么是ArkTS? 1.ArkTS的背景 如官方文档所描述,ArkTS是基…

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin(二)

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin(二) 在 Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin-CSDN博客 基础上&…

esp32-cam 视频查看教程

一、环境配置 查看以前教程 环境配置 建议使用1.0.6 二、安装基于esp32 cam的代码 资料地址: https://pan.baidu.com/s/1Y9-rLLmAKPYzBDcrEyuGMw 提取码:2022 下载后打开文件下的程序 下载程序 三、获取视频url 在arduino 看不到串口打印的信息&a…

Android studio 简单登录APP设计

一、登录界面: 二、xml布局设计: <LinearLayoutandroid:id="@+id/linearLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:layout_editor_absoluteX="…

assignment1——KNN

KNN 整体思路 加载数据集CIFAR10并随机展示部分数据构建KNearestNeighbor分类器&#xff0c;计算测试集每张图片的每个像素点与训练集每张图片的每个像素点的距离。将图片转化为数组。在测试集使用compute_distances_one_loop&#xff0c;compute_distances_no_loops&#xf…

挑战杯参赛总结-时间序列预测

参赛任务&#xff1a; 目标&#xff1a;针对中国各个市区的不同年份二氧化碳排放量&#xff0c;预测未来年份的二氧化碳排放量。 不同与之前我学习过的波士顿房价预测机器学习-波士顿房价预测-CSDN博客 房价预测是通过学习与房价有关的很多特征&#xff0c;训练出一个模型来预…

UV胶水粘接尼龙聚酰胺类聚合物PA有哪些优势呢?

使用UV胶水&#xff08;紫外线固化胶水&#xff09;粘接尼龙聚酰胺类聚合物&#xff08;PA&#xff09;具有一些优势&#xff0c;这些优势包括&#xff1a; 1.快速固化&#xff1a; UV胶水是一种紫外线固化的胶水&#xff0c;它可以在短时间内迅速固化。这使得粘接过程非常快速…

02-编程猜谜游戏

本章通过演示如何在实际程序中使用 Rust&#xff0c;你将了解 let 、 match 、方法、关联函数、外部crate等基础知识。 本章将实现一个经典的初学者编程问题&#xff1a;猜谜游戏。 工作原理如下&#xff1a;程序将随机生成一个介于 1 和 100 之间的整数。然后&#xff0c;程序…

Pycharm详细安装 配置教程

继上次安装完Anaconda之后&#xff0c;现在更新最新版本的pycharm的安装和使用教程~~~ Anaconda&#xff1a;是一个开源的Python发行版本&#xff0c;其中包含了conda、Python等180多个科学包及其依赖项。【Anaconda和Pycharm详细安装 配置教程_anconda安装时clear the packag…

音频筑基:时延、帧长选取的考量

音频筑基&#xff1a;时延、帧长选取的考量 帧长与时延的关系帧长变化的影响参考资料 音频算法中&#xff0c;时延和音频帧长的选择通常是个需要平衡的参数&#xff0c;这里分析下背后的考量因素。 帧长与时延的关系 一般来说&#xff0c;帧长是音频算法端到端时延的子集&…

【Linux】Linux 系统编程——touch 命令

文章目录 1.命令概述2.命令格式3.常用选项4.相关描述5.参考示例 1.命令概述 在**Linux 中&#xff0c;每个文件都与时间戳相关联&#xff0c;每个文件都存储了上次访问时间、**上次修改时间和上次更改时间的信息。因此&#xff0c;每当我们创建新文件并访问或修改现有文件时&a…

设计模式篇章(4)——十一种行为型模式

这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务&#xff0c;这个与结构型模式有点像&#xff0c;结构型可以理解为静态的组合&#xff0c;例如将不同的组件拼起来成为一个更大的组件&#xff1b;而行为型更是一种动态或者具有某个…

【Python爬虫】项目案例讲解,一步步教你爬取淘宝商品数据!

前言 随着互联网时代的到来&#xff0c;人们更加倾向于互联网购物&#xff0c;某宝又是电商行业的巨头&#xff0c;在某宝平台中有很多商家数据&#xff0c;今天带大家使用pythonselenium工具获取这些公开的商家数据 环境介绍&#xff1a; python 3.6pycharmseleniumcsvtime…