1. 程式人生 > >UBI檔案系統應用中檔案被壓縮的問題探究

UBI檔案系統應用中檔案被壓縮的問題探究

前提條件,環境是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