[dEw] 简单文件系统设计笔记
来源:互联网 发布:iphone制作视频软件 编辑:程序博客网 时间:2024/05/22 05:47
QDFS - Quick & Dirty File System
注意:此设计仅供测试
此文件系统只是一个最小化实现,没有作出任何优化或者安全性优化。在之后此文档将继续更新以优化或改善安全性。
你可以在 dist/hosttools/edhd
中找到磁盘镜像编辑可执行文件.
可执行文件构建平台为 openSUSE 42.1 x86_64. 如果需要自行编译文件,源码可在 src/hosttools/edhd.c
处找到. 请用host模式编译!
概念
+--------------------+| 主硬盘引导记录 |+--------------------+| 记录区块 | -> 不使用分区 +--------------------+| 数据区块 |\____________________/记录格式0 15 19 23 27 31 (Byte)+---------------+------+----+----------+---------+|名字 |偏移量 |大小|文件属性 |时间戳 |+---------------+------+----+----------+---------+|<---- 016 ---->|<-04->|<04>|<-- 04 -->|<-- 4 -->| (Byte)文件属性结构0 7 11 14 15+----------+-----+----+--------+|权限 |所有 |类型|扩展标志位|+----------+-----+-------------+|<-- 08 -->|<-4->|<---- 4 ---->| (bit)权限0 7+----------+|rwx|rwx|rw| 分别属于:所有者、所有组、其他人(其他人总无执行权限)+----------+
struct record{ char name[16]; uint32_t offset; uint32_t size; uint32_t attribute; uint32_t timestamp;};
记录区块的大小不固定。为了之后的读写操作方便,建议预先留1024个条目(包括
空记录和扩展记录),或者预留5%剩余磁盘空间。
首条记录为空记录。空记录用于记录记录区块的属性,其名称必须为 #REC_TBL
,
其偏移量必须为 0
, 其大小即为记录区块大小,其权限必须为 11011011(0xDB)
,
其时间戳必须为 0
.
文件操作之前,必须先检查空记录的权限。当发生异常时(如记录互相冲突或记录
互相重叠),程序必须放弃文件操作,空记录权限会被置为 10010010(0x92)
. 硬
盘进入只读模式,直到用户运行磁盘检查程序修复冲突。
当记录区块空间用尽时,使最后一条记录指向硬盘中的一个文件作为记录区块。最后
一条记录即为扩展记录。扩展记录的权限应该设为 11111111(0xFF)
, 类型为 3
.
出于性能考虑应尽量避免使用扩展记录。如果操作系统中实现了磁盘清理工具,应该
在磁盘清理时扩充记录表并合并扩展记录内容。
文件的物理地址由此公式计算: 记录区块大小 + 偏移量 * 4字节
. 即每个文件都对齐到
4字节处。
文件的逻辑大小由 size
属性给出。当扩展位为 1
时,文件的逻辑大小为 size
属性
的4倍。此操作可能会导致实际文件大小小于逻辑文件大小。
文件夹的属性 type
为 1
. 其偏移量指向硬盘中一个4KB的文件,文件中存放在文件夹内
的文件的偏移量。
链接的属性 type
为 2
. 其偏移量指向链接对象,大小为 0
.
特殊文件的属性 type
为 3
. 此时其偏移量和大小将作为数据值使用。
当修改文件时,如果文件将覆盖到后一个文件,则将其转移到一个合适空间。合适的空间
满足条件 >= 新文件大小 * 1.1
.
Bugs
由于这个文件系统没有备份表或者其他的安全保护措施,这个设计会相当脏而且容易
损坏。如果希望测试这个文件系统,可以尝试用虚拟机(比如 qemu
).
- [dEw] 简单文件系统设计笔记
- ICE笔记(06):简单文件系统的设计、实现
- ICE笔记(06):简单文件系统的设计、实现
- 简单虚拟文件系统的设计与实现
- 简单文件系统
- Linux下共享文件系统文件传输的简单设计(转载)
- 为LINUX 设计一个简单的二级文件系统。
- 设计模式笔记---简单工厂
- 简单设计模式-《大话设计模式》笔记
- Linux内核设计与实现 学习笔记(3)虚拟文件系统
- Linxu笔记(10): 文件系统管理与简单命令
- 差分能量水印算法DEW
- 【设计模式】简单工厂模式学习笔记
- 大话设计模式笔记----简单工厂模式
- 设计模式笔记--简单工厂模式
- 设计模式学习笔记--简单工厂模式
- java设计模式笔记之简单工厂
- 设计模式笔记之简单工厂模式
- 《Head First设计模式》学习笔记之策略模式
- 一个人的旅行
- 关于最新手机号码验证的正则表达式(oc及swift)
- IOS学习 autoresizing 屏幕适配 父子视图
- 《Linux内核分析》第五课笔记
- [dEw] 简单文件系统设计笔记
- 在共享DLL中使用MFC 和在静态库中使用MFC区别
- 南阳题目72-Financial Management
- 2016.3.22
- c语言:顺序表的实现(二 ) 就地逆置,有序合并,大小调整。
- Android异步加载AsyncTask详解
- VS中警告等级的含义
- hdu1228A+B
- 设计模式,行为模式(观察者模式)