您的位置:首页 > 运维架构

OpenWrt使用的文件系统理解与分析

2011-07-29 18:24 309 查看
http://greatsnows.yo2.cn/articles/%E5%8E%9F%E5%88%9Bopenwrt%E4%BD%BF%E7%94%A8%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%90%86%E8%A7%A3%E4%B8%8E%E5%88%86%E6%9E%90.html

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的主代码树,这意味着它的稳定性足可以使用到商业产品上。

可量测性,意思就是说它的主要操作都是有能够知道确切时间的。形象化的好处就是挂载速度之类的提高了。

支持Write-back (回写),意思是异步写入(多个写缓冲)这样就提高了写入速度。也可以变成同步写入(类似jffs2)但是写入性能会对比jffs2有所下降。

动态压缩(on-the-flight
compression),意思是读取时解压,写入时压缩。有Zlib和LZO 两种压缩方式选择,LZO 压缩率会小一点,但是压缩/解压的速度相同。

校验,使用CRS-32,当然也可以不使用。

预读(Read-ahead),读的时候多读一些数据。

等等

估计,OpenWrt也会在适当的时候使用UBIFS,前提是内核版本支持UBIFS,至少2.6.27以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: