diff --git "a/zh-cn/device-dev/kernel/figure/Cow\346\234\272\345\210\266\347\244\272\346\204\217\345\233\276.png" "b/zh-cn/device-dev/kernel/figure/Cow\346\234\272\345\210\266\347\244\272\346\204\217\345\233\276.png" deleted file mode 100644 index bee6020f58b7127c24d0adc1da77fe1761b386de..0000000000000000000000000000000000000000 Binary files "a/zh-cn/device-dev/kernel/figure/Cow\346\234\272\345\210\266\347\244\272\346\204\217\345\233\276.png" and /dev/null differ diff --git a/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001124307264.png b/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001124307264.png deleted file mode 100644 index 01180a70fc53c97a5ae96a66785a5e24f7f2316d..0000000000000000000000000000000000000000 Binary files a/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001124307264.png and /dev/null differ diff --git a/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132085260.png b/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132085260.png deleted file mode 100644 index 4bc250489d5cfba6848f63abd9a1ea12502fd9df..0000000000000000000000000000000000000000 Binary files a/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132085260.png and /dev/null differ diff --git "a/zh-cn/device-dev/kernel/figure/\345\205\203\346\225\260\346\215\256\345\255\230\345\202\250\347\244\272\346\204\217\345\233\276.png" "b/zh-cn/device-dev/kernel/figure/\345\205\203\346\225\260\346\215\256\345\255\230\345\202\250\347\244\272\346\204\217\345\233\276.png" deleted file mode 100644 index 8566e16dbc675362366f07cf9497c2d9073d6f56..0000000000000000000000000000000000000000 Binary files "a/zh-cn/device-dev/kernel/figure/\345\205\203\346\225\260\346\215\256\345\255\230\345\202\250\347\244\272\346\204\217\345\233\276.png" and /dev/null differ diff --git "a/zh-cn/device-dev/kernel/figure/\346\227\245\345\277\227\346\226\271\345\274\217\347\244\272\346\204\217\345\233\276.png" "b/zh-cn/device-dev/kernel/figure/\346\227\245\345\277\227\346\226\271\345\274\217\347\244\272\346\204\217\345\233\276.png" deleted file mode 100644 index caf4127a296227a121ef155f9354d1f3ef3837dd..0000000000000000000000000000000000000000 Binary files "a/zh-cn/device-dev/kernel/figure/\346\227\245\345\277\227\346\226\271\345\274\217\347\244\272\346\204\217\345\233\276.png" and /dev/null differ diff --git a/zh-cn/device-dev/kernel/kernel-lite-mini-extend-file-lit-basic.md b/zh-cn/device-dev/kernel/kernel-lite-mini-extend-file-lit-basic.md index 17423ee5c40ff14e3d771ae1459055e49c1b52f8..0879f12e74a5d9a6b529ecddda75231a6eb2e743 100644 --- a/zh-cn/device-dev/kernel/kernel-lite-mini-extend-file-lit-basic.md +++ b/zh-cn/device-dev/kernel/kernel-lite-mini-extend-file-lit-basic.md @@ -1,72 +1,4 @@ # 基本概念 +LittleFS是一个小型的的Flash文件系统,它结合日志结构(log-structured)文件系统和COW(copy-on-write)文件系统的思想,以日志结构存储元数据,以COW结构存储数据。这种特殊的存储方式,使LittleFS具有强大的掉电恢复能力(power-loss resilience)。分配COW数据块时LittleFS采用了名为统计损耗均衡的动态损耗均衡算法,使Flash设备的寿命得到有效保障。同时LittleFS针对资源紧缺的小型设备进行设计,具有极其有限的ROM和RAM占用,并且所有RAM的使用都通过一个可配置的固定大小缓冲区进行分配,不会随文件系统的扩大占据更多的系统资源。 -- [运行机制](#section10284121317365) - - [日志方式](#section13804114513361) - - [Cow机制](#section172771130193610) - - [LittleFS掉电保护](#section42941021173614) - - -LittleFS主要用在微控制器和Flash上,是一种嵌入式文件系统,具有掉电恢复、擦写均衡、节省ROM/RAM空间等特点。 - -## 运行机制 - -最经典的掉电保护方法有两种,一种是使用日志,一种是通过COW方式。LittleFS结合了两种方法,并优化了两种方案的缺点,提供了一套掉电保护策略 - -### 日志方式 - -**图 1** 日志方式示意图 -![](figure/日志方式示意图.png "日志方式示意图") - -具体步骤为: - -1. 写入数据之前,先在日志区存储开始标志,记录要写入的数据位置和大小; -2. 待写入的数据写入日志区; -3. 待写入的数据写入数据区; -4. 写入完成之后,在日志区记录结束标志。 - -模拟掉电场景: - -1. 步骤1完成,步骤2没有完成;重启之后,保持原来的数据,日志无效; -2. 步骤1,2完成了,步骤3没有完成,尝试把步骤2的数据写入到数据区; -3. 步骤1,2,3完成了,步骤4没有完成,同样尝试把步骤2的数据写入到数据区; - -### Cow机制 - -**图 2** Cow机制示意图 -![](figure/Cow机制示意图.png "Cow机制示意图") - -具体步骤为: - -1. 想更新节点F的数据,先申请一个新的节点,把F的旧数据拷贝过去,然后更新新的数据; -2. 把父节点的指针指向新的节点,去掉旧节点的指针。 - -模拟掉电场景: - -步骤1完成了,步骤2没有完成,则使用旧的数据,新的节点变成孤儿节点。 - -### LittleFS掉电保护 - -LittleFS结合了日志方式和COW机制两种方式进行掉电保护,并且优化了两种方案。 - -文件系统有三要素,超级块,inode,以及数据,对应LittleFS来说,它把超级块以及inode通过日志的方式存储,两种采用统一的存储结构,后文称两者为元数据;普通数据则采用cow的方式存储,采用czt逆序链表的方式。 - -![](figure/zh-cn_image_0000001124307264.png) - -**元数据的存储** - -元数据(对应root,dir)采用双block的方式存储,互为备份,每个block都有一个revision序号,值越大,表示block的数据越新,每个block默认可以存储最多0xff个文件的数据,如果超过这个值,则需要compact(压缩)。 - -Compact是干什么呢? 即当数据的大小大于某个值的时候,把数据整合,剔除同一个id的旧的数据,然后写入到备份block里面。如图所示: - -**图 3** 元数据存储示意图 -![](figure/元数据存储示意图.png "元数据存储示意图") - -**普通数据的存储** - -LittleFS的数据采用链表的方式逆向管理。 - -![](figure/zh-cn_image_0000001132085260.png) - -1. 采用逆向的指针,这样常规的追加数据,不需要额外的开销来重新建立所有的索引; -2. 每个偶数block有多个指针,指向更远的数据,这样可以在检索的时候加快速度。 - +当在一个资源非常紧缺的小型设备上,寻找一个具有掉电恢复能力并支持损耗均衡的Flash文件系统时,LittleFS可能是最好的选择。