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

UBI文件系统应用中文件被压缩的问题探究

2016-09-23 16:41 351 查看
前提条件,环境是powerpc主控,linux系统(ubi文件系统)。

在项目中用到了nand flash,在对nand flash在进行读、写、擦除测试的过程中出现一个很怪异的现象,写入的是一个4M的二进制文件,nand flash的可用空间有1.5G。突然有一次意识到,本来应该只能写不到400次,但是实际情况是,在剩余空间为128M的情况下,文件写入达1300次。

经过多次实验(实验包括):

1——怀疑是文件中存在大量0xff,使得存储时文件存储时被压缩,于是将做自己造一个文件,没有0xff,结果4M的文件,写入达6000次;

2——用tftp将文件写入,用df -h查看已用空间和可用空间,tftp一个4M的文件到flash,刚写入的时候已用空间是4.1M,经过sync之后已用空间变成了400Kb,惊呆了;

。。。

经过各种实验,推断出将文件写入的时候被压缩了。又做了这样一个实验:

3——一个普通的二进制文件,压缩率很高,但是一个照片,用UltraEdit打开也是二进制文件,但是对它几乎没有什么压缩力度。于是,将做实验的文件换成了一个高清图片,2.16M,显示tftp进去,sync,df -h,已用为2.1M,然后将测试nand的文件换成该图片,写入次数为六百多次。完全可以证明,原来看似很诡异的现象确实和文件压缩相关。

再之后,在系统的启动代码中找到了关于文件压缩的信息:

UBIFS: default file-system created
UBIFS: mounted UBI device 0, volume 0, name "application"
UBIFS: file system size:   1776975872 bytes (1735328 KiB, 1694 MiB, 3416 LEBs)
UBIFS: journal size:       33292288 bytes (32512 KiB, 31 MiB, 64 LEBs)
UBIFS: media format:       w4/r0 (latest is w4/r0)
UBIFS: default compressor: lzo
UBIFS: reserved for root:  4952683 bytes (4836 KiB)


其中,default compressor: lzo表明默认的压缩方法是lzo,而百度一下可知lzo是一种致力于解压速度的数据压缩算法。

最后,在一篇关于ubi文件系统的文章中找到理论解释,此处给出文章链接:

http://www.360doc.com/content/12/0305/19/1317564_192019619.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息