一个简单的文件系统(MinixFS)实现解析
1. Minix文件系统概要
Minix file system 是 Andrew S. Tanenbaum 在 1980 年代发明的文件系统, 并随着 Minix 操作系统一起于 1987 年发布。
Linus 编写 Linux 内核第一个版本的时候, 使用的也是 Minix FS, Linux 至今依然提供了对 Minix FS 的支持。Minix FS 结构简单, 易于理解。
2. Minix文件系统的组成
Minix 文件系统由 6 个部分组成:引导块、超级块、i 节点位图块、逻辑块位图块、i 节点块、数据区。对于一个普通的磁盘块设备来说,这 6 个部分的分布如下:

Minix 文件系统的最小分配单位是 zone, 可以把它叫做虚拟块, 一个虚拟块的大小是 1024 byte, 而磁盘的物理扇区大小常常是 512 byte。
引导块
占用一个数据块,用于操作系统启动时使用,我们可以忽略。
超级块
占用一个数据块,用于保存文件系统的信息,Minix 文件系统使用 minix_super_block 对象来保存文件系统的信息,其定义如下:
struct minix_super_block {__u16 s_ninodes; // inode个数__u16 s_nzones; // 数据块zone个数(v1版本)__u16 s_imap_blocks; // inode位图占用的数据块数量__u16 s_zmap_blocks; // 数据块位图占用的数据块数量__u16 s_firstdatazone; // 第一个数据块起始号__u16 s_log_zone_size; // 数据块大小, log2(zone/block)__u32 s_max_size; // 文件最大尺寸__u16 s_magic; // 魔数(用于识别minix文件系统及版本)__u16 s_state; // 文件系统状态__u32 s_zones; // 数据块列表的元素个数(v2版本)};
inode节点位图
占用若干个数据块,用于描述 inode表 中哪些成员已经被使用,每个位表示一个 inode 的使用情况。
逻辑块位图
用若干个数据块,用于描述 数据块列表 中哪些成员已经被使用,每个位表示一个逻辑块的使用情况。
i节点表
占用若干个数据块,由多个 minix_inode 对象组成,每个 minix_inode 对象表示一个文件或目录,其定义如下:
struct minix_inode {__u16 i_mode; // 文件类型及属性(rwx)__u16 i_uid; // 文件所属用户id__u32 i_size; // 文件大小,单位字节__u32 i_time; // 修改时间(自1970.1.1以来的秒数)__u8 i_gid; // 文件所属组id__u8 i_nlinks; // 链接数(有多少文件目录项指向该i节点)__u16 i_zone[9]; // 文件所占用的磁盘逻辑块号数组};
其中i_zone[9]定义如下:
-
zone[0] - zone[6]指向的虚拟块直接储存了文件的数据
-
zone[7]指向的虚拟块储存的是更多的虚拟块号码, 就是一个二级表
-
zone[8] 指向一个双重间接块

因此Minix FS 支持的最大文件大小为 (7 + 1024/2 + 1024/2*1024/2) * 1024 byte = 256 MB。
3. Minix磁盘布局
Minix整体布局如下图所示:

下面手动创建一个Minix磁盘,来具体的分析布局组成:
3.1 通过dd命令创建一个64k的二进制磁盘
# dd if=/dev/zero of=minix.disk bs=1k count=64 oflag=direct64+0 records in64+0 records out65536 bytes (66 kB, 64 KiB) copied, 0.195595 s, 335 kB/s
3.2 格式化为Minix文件系统
minix fs有三个版本,下面我们通过“-1”指定使用v1版本来格式化
# mkfs.minix -1 minix.disk32 inodes64 blocksFirstdatazone=5 (5)Zonesize=1024Maxsize=268966912
3.3 挂载文件系统,并创建几个测试文件
# mount minix.disk minix-root# cd minix-root# mkdir dir# echo "hello, world!" > dir/1.txt# echo "minix fs test" > 2.txt# echo "xyz" > 3.txt# tree minix-rootminix-root├── 2.txt├── 3.txt└── dir└── 1.txt1 directory, 3 files
3.4 通过hexdump查看二进制组成
# hexdump -C minix.disk
各部分含义如下:





相关文章:
一个简单的文件系统(MinixFS)实现解析
1. Minix文件系统概要 Minix file system 是 Andrew S. Tanenbaum 在 1980 年代发明的文件系统, 并随着 Minix 操作系统一起于 1987 年发布。 Linus 编写 Linux 内核第一个版本的时候, 使用的也是 Minix FS, Linux 至今依然提供了对 Minix FS 的支持。Minix FS 结构简单, 易于…...
地图投影-2亚当斯方形
说明 亚当斯方形 II 投影显示了一个方形的世界。它是 Oscar S. Adams 于 1925 年提出的两种投影之一。该投影为等角投影,但方形的四个角除外。在 Adams 最初的设计中,该投影将赤道和中央经线显示为方形的对角线。 此投影的一个有利属性是可以进行细分或…...
atcoder库中类欧(类欧几里得算法)floor_sum用法
https://atcoder.jp/contests/practice2/tasks/practice2_c 求 ∑ i 0 N − 1 f l o o r ( ( A i B ) / m ) \sum_{i 0}^{N - 1} floor((A \times i B) / m) ∑i0N−1floor((AiB)/m) 直接使用即可: ansfloor_sum(n, m, A, B); //注意顺序...
后端面试话术集锦第 十一 篇:mybatis面试话术
这是后端面试集锦第十一篇博文——mybatis面试话术❗❗❗ 1. 介绍下mybatis,说说它的优缺点是什么? Mybatis是一个半ORM(对象关系映射)的持久层框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程…...
SpringBoot运维实用篇、打包、运行、高级配置、多环境开发、日志
文章目录 SpringBoot运维实用篇YW-1.SpringBoot程序的打包与运行程序打包程序运行SpringBoot程序打包失败处理命令行启动常见问题及解决方案SpringBoot项目快速启动(Linux版) YW-2.配置高级YW-2-1.临时属性设置YW-2-2.配置文件分类YW-2-3.自定义配置文件…...
springdoc-openapi-ui 整合 knife,多模块分组,脚手架
pom文件: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…...
04-MySQL02
1、什么是索引下推? 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 需求: 查询users表中 "名字第一个字是张,年龄为10岁的所有记录"。 SELECT * FROM u…...
实现跨境电商测评和采退、LU卡、LU货最安全的系统方案
首先你要有一个稳定的测评环境系统,这个是做自养号退款、撸货、撸卡的基础。测评环境系统有很多,从早期的虚拟机,模拟机,云手机,VPS等等。这些系统方案先不说成本高,最重要的是成功率很低,所以一…...
软件生命周期及流程
软件生命周期: 软件生命周期(SDLC,Systems Development Life Cycle)是软件开始研制到最终被废弃不用所经历的各个阶段. 需求分析阶段--输出需求规格说明书(原型图) 测试介入的晚--回溯成本高 敏捷开发模型: 从1990年…...
nginx使用详解
文章目录 一、前言二、nginx使用详解2.1、nginx特点2.2 静态文件处理2.3 反向代理2.4 负载均衡2.5 高级用法2.5.1 正则表达式匹配2.5.2 重定向 三、总结 一、前言 本文将详细介绍nginx的各个功能使用,主要包括 二、nginx使用详解 2.1、nginx特点 高性能ÿ…...
YOLOV7 添加 CBAM 注意力机制
用于学习记录 文章目录 前言一、CBAM1.1 models/common.py1.2 models/yolo.py1.3 yolov7/cfg/training/CBAM.yaml2.4 CBAM 训练结果图 前言 一、CBAM CBAM: Convolutional Block Attention Module 1.1 models/common.py class ChannelAttention(nn.Module):def __init__(sel…...
【SpringSecurity】七、SpringSecurity集成thymeleaf
文章目录 1、thymeleaf2、依赖部分3、定义Controller4、创建静态页面5、WebSecurityConfigurerAdapter6、权限相关7、当用户没有某权限时,页面不展示该按钮 1、thymeleaf 查了下读音,leaf/li:f/,叶子,前面的单词发音和时间time一…...
Go语言中的数组、切片和映射解析
目录 数组数组的声明数组循环 切片切片声明切片元素循环 映射Map的声明及初始化Map的遍历 数组 数组存放的是固定长度、相同类型的数据,而且这些存放的元素是连续的。 数组的声明 例如声明一个整形数组: array : [3]int{1, 2, 3}在类型名前加 [] 中括…...
MySql学习笔记03——DQL(数据查询)基本命令
DQL 导入数据 首先使用use database进入数据库中,然后使用命令 source D:\mysql_learning\mysql_learning\document\bjpowernode.sql注意文件名不能有双引号,命令结尾没有分号。 SQL脚本 .sql文件是SQL脚本文件,它里面的内容都是SQL语句…...
操作系统的四大特性
一、并发性 指操作系统同时运行着多个程序,这些程序宏观上是同时运行的,但微观上其实是交替运行的 补充1:并发性区别于并行性 并发是指两个或多个事件在同一时间间隔内发生,事件宏观上是同时进行的,围观上市交替进行的…...
旅游攻略APP外包开发功能
旅游攻略APP是帮助旅行者计划和享受旅行的工具,下面列出了一些常见的旅游攻略APP功能,以及在上线这类应用时需要注意的问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 常见…...
Apollo在Java中的使用
本节主要讲解在普通的 Java 项目和 Spring Boot 中如何使用 Apollo。 普通 Java 项目中使用 加入 Apollo Client 的 Maven 依赖,代码如下所示。 <dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client<…...
Elasticsearch 全文搜索引擎 ---- IK分词器
原理:分词的原理:二叉树 首先讲一下为什么要出这个文章,前面我们讲过分词方法:中文分词搜索 pscws(感兴趣的同学可以去爬楼看一下),那为什么要讲IK分词?最主要的原因是&…...
Layer 2盛夏已至,StarkNet如何实现价值跃迁?
作者|Jason Jiang Layer 2概念在2023年夏天迎来爆发。Coinbase、ConsenSys等加密巨头纷纷下场,其部署的原生L2解决方案Base、Linea在过去两个月内相继完成主网上线;被誉为L2 四大天王之一的StarkNet也在夏天顺利完成“量子跃迁”升级&#x…...
KaiwuDB 受邀亮相 2023 中国国际“软博会”
8月31日,第二十五届中国国际软件博览会(以下简称“软博会”)在天津盛大开幕。KaiwuDB 受邀亮相展会,围绕“塑造软件新生态,赋能发展新变革”主题,重点展示自研分布式多模数据库及各大行业解决方案ÿ…...
ClawX:基于RAG的智能代码助手,实现项目级上下文感知编程
1. 项目概述:ClawX,一个面向开发者的智能代码助手最近在GitHub上看到一个挺有意思的项目,叫ClawX。乍一看这个名字,可能会联想到“爪子”或者“抓取”,但它的定位其实是一个AI驱动的代码助手。作为一个在开发一线摸爬滚…...
5分钟搭建Windows离线语音转文字系统:TMSpeech让你的会议记录零压力
5分钟搭建Windows离线语音转文字系统:TMSpeech让你的会议记录零压力 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 在数字化办公时代,实时语音转文字已成为提升工作效率的关键技术。TMSpeec…...
如何通过DLSS版本管理工具提升30%游戏性能:实战指南
如何通过DLSS版本管理工具提升30%游戏性能:实战指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款开源游戏性能优化工具,专门用于管理DLSS、FSR和XeSS动态库版本。你是否曾…...
Unity游戏接入TapTap登录,从后台配置到打包上线的完整避坑指南
Unity游戏接入TapTap登录的全流程避坑指南:从配置到上线的实战经验 在独立游戏开发领域,TapTap平台凭借其庞大的用户基础和便捷的登录系统,已成为许多开发者的首选接入方案。然而,从后台配置到最终打包上线的完整流程中࿰…...
避坑指南:Unity游戏在Linux上运行报错?OpenCV依赖和文件权限问题排查实录
Unity游戏Linux部署避坑指南:从权限修复到OpenCV依赖全解析 当你在Ubuntu上双击那个刚导出的Unity游戏.x86_64文件时,屏幕却弹出一行冰冷的错误信息——这种从云端跌入谷底的体验,每个跨平台开发者都经历过。不同于Windows的一键运行…...
使用mcp-maker快速构建AI工具调用服务器:从协议原理到工程实践
1. 项目概述与核心价值最近在折腾AI应用开发,特别是想给大语言模型(LLM)装上更强大的“手脚”,让它能直接操作我电脑上的各种软件和工具。这听起来很酷,对吧?但实际操作起来,你会发现一个核心痛…...
猫抓扩展完整指南:三步掌握浏览器视频嗅探与下载技巧
猫抓扩展完整指南:三步掌握浏览器视频嗅探与下载技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(Cat-Catch&#…...
为AI编程助手构建安全防线:Cursor自定义规则实战指南
1. 项目概述:为AI编程助手装上“安全护栏” 如果你和我一样,深度使用Cursor这类AI编程助手,那你一定体验过它带来的效率革命。它能帮你生成代码、重构函数、甚至解释复杂的逻辑,就像一个不知疲倦的编程伙伴。但硬币总有另一面——…...
如何3分钟搭建智能手机号定位系统:免费归属地查询终极指南
如何3分钟搭建智能手机号定位系统:免费归属地查询终极指南 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_…...
AI Agent产品经理的新思维:从功能设计到AI原生产品的方法论转型
AI Agent产品经理的新思维:从功能设计到AI原生产品的方法论转型 各位产品同行、AI从业者,大家好!我是连续3年深耕AI工具Agent产品、从C端信息流(今日头条/抖音生态)PM成功转型AI原生垂直工具PM的张小白——过去两年&am…...
