无忧启动论坛

 找回密码
 注册
搜索
WEPE笔记本电脑手机维修小包 IT发烧友的必备工具最纯净的「微PE装机优盘」UEPON大师作品卡瑞飞系统和装机二合一超级U盘
无忧启动论坛唯一网址:bbs.wuyou.net系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
查看: 4412|回复: 80

最简单的 Linux 文件系统是哪个?

  [复制链接]
发表于 2019-3-5 10:43:27 | 显示全部楼层 |阅读模式
Linux 的文件系统有一大堆,每个文件系统都有自己的优点。但是,我认为 “简单就是美”。我开这个帖子,希望通过探讨学到知识。

大家最熟悉的文件系统,莫过于微软的 FAT 了。也许它不能算作“最”简单,但也算比较简单了。它的几个部分非常单纯:

保留空间(含有引导扇区)
FAT 表
FAT 表的备份
根目录表
数据区


FAT 文件系统用了几十年,没啥问题。只是文件长度限制为 4G 以内,才逐渐显示出瓶颈。遗憾的是,FAT 文件系统的目录项,没有权限设置相关字段,无法直接用作 Linux 的主文件系统,只能作为辅助的文件系统(mount 之后仅仅存放普通数据文件)。

由于 Linux 的文件系统太多,而一个人精力有限,很难逐个学习了解,所以,我希望有兴趣者,能一起讨论,互相帮助,少走弯路。

今天先贴一篇 blog 文章,作为学习的开端:


从零开始编写一个简单的Linux文件系统

作者:shuxiaogd
来源:CSDN
原文:https://blog.csdn.net/shuxiaogd/article/details/48829671
版权声明:本文为博主原创文章,转载请附上博文链接!


最近想研究一下 Linux 文件系统,最好的开始当然是自己写一个简单的文件系统,并能够 mount 上。

这方面的工作其实已经有很多人做过了,比如 IBM Linux 技术中心的教程:


Linux FileSystems in 21 Days( A step by step introduction to writing a Linux Filesystem)


点此下载源代码 samplefs

发表于 2019-3-5 12:27:30 | 显示全部楼层
插眼
回复

使用道具 举报

发表于 2019-3-5 13:08:43 | 显示全部楼层
不管底层是什么文件系统,上层的vfs文件系统基本绕不过去吧,能学懂vfs,其他文件系统也就知道怎么学了

上层文件系统可以认为是一个<文件路径,vfs-inode>的映射,底层文件系统则是<vfs-inode,real-inode>的映射,找到文件系统里自己实现的inode基本就可以读文件了。

个人的linux文件系统学习时用的方法,仅供参考

点评

不是泛泛地学习,而是提出一个问题:如何让它“简单”。比如说,一个像微软 FAT 那样简单的文件系统,又能满足桌面 Linux 的使用,这样就 OK。 当然了,“简单”之后,肯定会损失某些东西,比如损失速度、性能,  详情 回复 发表于 2019-3-5 14:53
回复

使用道具 举报

 楼主| 发表于 2019-3-5 14:42:28 | 显示全部楼层
ext2/3/4的inode结构说明
https://www.cnblogs.com/liuxuzzz/p/5348545.html

上述 blog 对比了 ext2/3 和 ext4 的 inode 结构,在文章结尾,给出了相关链接。值得一看。
回复

使用道具 举报

 楼主| 发表于 2019-3-5 14:53:33 | 显示全部楼层
2013olly 发表于 2019-3-5 13:08
不管底层是什么文件系统,上层的vfs文件系统基本绕不过去吧,能学懂vfs,其他文件系统也就知道怎么学了

...

不是泛泛地学习,而是提出一个问题:如何让它“简单”。比如说,一个像微软 FAT 那样简单的文件系统,又能满足桌面 Linux 的使用,这样就 OK。

当然了,“简单”之后,肯定会损失某些东西,比如损失速度、性能,或者损失存储效率,等等。

但既然选择“简单”,就比较注重“简单”,而能够接受在其他方面的不足。

这不是技术,而是哲学。

点评

那么,假如在fat基础上添加一两个字段,用来存放权限,软链接等内容,其他基本不怎么改,这是否算一个简单的文件系统? 如果真的实现了这样一个文件系统,文件系统和linux的接口部分估计不会太简单了,因为需要满  详情 回复 发表于 2019-3-6 10:52
回复

使用道具 举报

 楼主| 发表于 2019-3-5 15:38:45 | 显示全部楼层
漫谈 Linux 标准的文件系统 (Ext2/Ext3/Ext4)
http://www.cnblogs.com/justmine/p/9128730.html

这篇文章讲了很多基本概念。比如:
inode(索引节点)
记录文件的权限、属性和数据所在块 block 的号码,每个文件都有且仅有一个的 inode,每个 inode 都有自己的编号,可以把 inode 简单地理解为文档索引。

    备注:在磁盘格式化后,inode 的大小和数量都已经固定了,大小均为128 Bytes(新的 Ext4 和 xfs 为 256 Bytes)。读取文件时,先读取 inode 里面记录的文件属性和权限,匹配正确后,才会读取文件内容(block)。在 Linux 系统中,实际使用 inode 来识别文件,而不是用文件名,类似于用户标识和昵称的设计。


回复

使用道具 举报

发表于 2019-3-5 22:39:48 | 显示全部楼层
如果作为文件系统学习的话,越小越好。

Menuet OS 1.4MB,不过这货不是Linux。Linux体系的话4MB?




  1. title MenuetOS
  2. find --set-root --ignore-floppies /M6413060.IMG
  3. map --mem /M6413060.IMG (fd0)
  4. map --hook
  5. chainloader (fd0)+1
  6. rootnoverify (fd0)
复制代码



M6413060.7z (804.76 KB, 下载次数: 32)

点评

去了解了一下这个系统....太可怕了,叹为观止  详情 回复 发表于 2019-4-3 13:34
当年玩过一个小系统,好像是1.4M,,还能驱动网卡,内置几个小游戏。不过忘记名字了。  详情 回复 发表于 2019-3-6 22:04
这玩意怎么这么厉害。。。  详情 回复 发表于 2019-3-5 23:46
回复

使用道具 举报

发表于 2019-3-5 22:54:09 | 显示全部楼层
多谢大神的分享,学习下。。。
回复

使用道具 举报

发表于 2019-3-5 23:46:33 | 显示全部楼层
slore 发表于 2019-3-5 22:39
如果作为文件系统学习的话,越小越好。

Menuet OS 1.4MB,不过这货不是Linux。Linux体系的话4MB?

这玩意怎么这么厉害。。。
回复

使用道具 举报

 楼主| 发表于 2019-3-6 09:09:32 | 显示全部楼层
今天贴点 exFAT 的资料。从 exFAT 卷的布局可以了解,总体布局与 FAT32 相似,但缺少“保留扇区”这样一个区域。FAT32 的保留扇区数不是定死的。现在的“主引导区”就相当于原来的“保留扇区”区域,但现在它是固定的,总共占用 24 个扇区,不多也不少。这一点,算是与以往 FAT 系列文件系统最大的差别了。


exFAT volume layout

Offset, sectors
Size, sectors
Block
Comments
Main Boot Region(主引导区,占用 12 扇区)
0
1
Boot Sector
引导扇区(1个)
1
8
Extended Boot Sectors
扩展的引导扇区(8个)
9
1
OEM Parameters
OEM 参数扇区(1个)
10
1
Reserved
保留扇区(1个)
11
1
Boot Checksum
校验和扇区(1个)
Backup Boot Region(备份引导区,占用 12 扇区)
12
1
Boot Sector

13
8
Extended Boot Sectors

21
1
OEM Parameters

22
1
Reserved

23
1
Boot Checksum

FAT Region(文件分配表区)
24
FatOffset - 24
FAT Alignment
Boot Sectors contain FatOffset
FatOffset
FatLength
First FAT
Boot Sectors contain FatOffset and FatLength
FatOffset + FatLength
FatLength
Second FAT
For TexFAT only
Data Region(数据区)
FatOffset + FatLength * NumberOfFats
ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats)
Cluster Heap Alignment
簇堆对齐
ClusterHeapOffset
ClusterCount * 2^SectorsPerClusterShift
Cluster Heap
簇堆起始扇区号
和占用扇区数
ClusterHeapOffset + ClusterCount * 2^SectorsPerClusterShift
VolumeLength – (ClusterHeapOffset + ClusterCount * 2^SectorsPerClusterShift)
Excess Space
尾部多余的空间

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2019-9-20 01:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表