OpenWrt使用的文件系统主要是squashfs和jffs2,以及"连接"他们的mini_fo。
squashfs是一种只读的压缩文件系统,它的压缩率基本和gzip差不多。另外,也有使用LZMA作为压缩程序的squashfs项目,压缩率会更大一点。
jffs2是一种日志类型的文件系统,专为NorFlash设计。日志的意思是,新的写入信息总是现在现有内容的后面。这样带来两个显而易见的好处,一是做到了负载平衡(在整片Flash上循环的写入和擦除),二是做到了掉电保持(写入新的数据不需要擦除原来数据,而只是维护一个表来保持系统可以找到新写入的数据)。
mini_fo是一个很有意思的特殊文件系统,它由ELDK开发,也就是U-boot的开发小组。mini_fo的有意思之处就是使squashfs文件系统可写!其实,就是将修改后的文件保存在jffs2的分区上,维护一个表使系统可以找到最新的修改。
OpenWrt这样做的目的就是,得到一个体积很小的文件系统(需要压缩),然后它必须可写。
有了以上的理解之后,我发现新出现的UBIFS似乎更合适以上的目的。UBIFS的主要优点有:
- 开源,并已经被纳入linux的主代码树,这意味着它的稳定性足可以使用到商业产品上。
- 可量测性,意思就是说它的主要操作都是有能够知道确切时间的。形象化的好处就是挂载速度之类的提高了。
- 支持 (回写),意思是异步写入(多个写缓冲)这样就提高了写入速度。也可以变成同步写入(类似jffs2)但是写入性能会对比jffs2有所下降。
- 动态压缩(on-the-flight compression),意思是读取时解压,写入时压缩。有Zlib和LZO 两种压缩方式选择,LZO 压缩率会小一点,但是压缩/解压的速度相同。
- 校验,使用CRS-32,当然也可以不使用。
- 预读(),读的时候多读一些数据。
- 等等
估计,OpenWrt也会在适当的时候使用UBIFS,前提是内核版本支持UBIFS,至少2.6.27以上。
这篇转载自:
阅读(4969) | 评论(0) | 转发(1) |