Ubifs产生背景:

无排序区块图像文件系统(Unsorted Block Image File System, UBIFS)是用于固态硬盘存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一。真正开始开发于2007年,并于2008年10月第一次加入稳定版本于Linux核心2.6.27版。

UBIFS最早在2006年由IBM与Nokia的工程师Thomas Gleixner,Artem Bityutskiy所设计,专门为了解决MTD(Memory Technology Device)设备所遇到的瓶颈。由于Nand Flash容量的暴涨,YAFFS等皆无法再去控制Nand Flash的空间。UBIFS通过子系统UBI处理与MTD device之间的动作。与JFFS2一样,UBIFS 建构于MTD device 之上,因而与一般的block device不兼容。JFFS2运行在MTD设备之上,而UBIFS则只能工作于UBI volume之上。也可以说,UBIFS涉及了三个子系统:

1.MTD Subsystem:

MTD 子系统, 提供对flash芯片的访问接口, MTD子系统提供了MTD device的概念,比如/dev/mtdx,MTD可以认为是raw flash。

2.UBI subsystem:

为flash device提供了wear-leveling和 volume management功能; UBI工作在MTD设备之上,提供了UBI volume;UBI是MTD设备的高层次表示,对上层屏蔽了一些MTD不得不处理的问题,比如wearing以及坏块管理。

3.UBIFS filesystem

UBIFS 文件系统,工作于UBI之上。

================================================================

mkfs.ubifs的用法

Usage: mkfs.ubifs [OPTIONS] target 
Make a UBIFS file system image from an existing directory tree 
Examples: 
Build file system from directory /opt/img, writting the result in the ubifs.img file 
        mkfs.ubifs -m 512 -e 128KiB -c 100 -r /opt/img ubifs.img 
The same, but writting directly to an UBI volume 
        mkfs.ubifs -r /opt/img /dev/ubi0_0 
Creating an empty UBIFS filesystem on an UBI volume 
        mkfs.ubifs /dev/ubi0_0

Options: 
-r, -d, --root=DIR               build file system from directory DIR 
-m, --min-io-size=SIZE       minimum I/O unit size,最小输入输出大小 
-e, --leb-size=SIZE        logical erase block size逻辑可擦出块大小 
-c, --max-leb-cnt=COUNT    maximum logical erase block count最大逻辑可擦出块数目 
-o, --output=FILE        output to FILE输出文件名 
-j, --jrn-size=SIZE      journal size 
-R, --reserved=SIZE      how much space should be reserved for the super-user 
-x, --compr=TYPE        compression type - "lzo", "favor_lzo", "zlib" or 
                                  "none" (default: "lzo") 
-X, --favor-percent       may only be used with favor LZO compression and defines 
                                how many percent better zlib should compress to make 
                                mkfs.ubifs use zlib instead of LZO (default 20%)

-f, --fanout=NUM         fanout NUM (default: 8) 
-F, --space-fixup         file-system free space has to be fixed up on first moun
                          (requires kernel version 3.0 or greater) 
-k, --keyhash=TYPE       key hash type - "r5" or "test" (default: "r5") 
-p, --orph-lebs=COUNT     count of erase blocks for orphans (default: 1) 
-D, --devtable=FILE       use device table FILE 
-U, --squash-uids         squash owners making all files owned by root 
-l, --log-lebs=COUNT     count of erase blocks for the log (used only for debugging) 
-v, --verbose             verbose operation 
-V, --version             display version information 
-g, --debug=LEVEL         display debug information (0 - none, 1 - statistics, 2 - files, 3 - more details) 
-h, --help               display this help text

例: 
mkfs.ubifs -x lzo -m 2KiB -e 124KiB -c 720 -o system_ubifs.img -d $path_to_system 
压缩格式为lzo 
-m最小输入输出大小为2KiB(2048bytes),一般为页大小 
-e逻辑可擦除块大小为124KiB=(每块的页数-2)*页大小=(64-2)*2KiB=124KiB 
-c最多逻辑可擦除块数目为720(720*128KiB=90MiB),这个可根据ubi volume来设置,实际上是设置此卷的最大容量。

========================================================================================

ubinize的用法

Usage: ubinize [-o filename] [-p <bytes>] [-m <bytes>] [-s <bytes>] [-O <num>] [-e 
<num>][-x  <num>]  [-Q  <num>]  [-v]  [-h]  [-V]  [--output=<filename>] 
[--peb-size=<bytes>]  [--min-io-size=<bytes>]  [--sub-page-size=<bytes>] 
[--vid-hdr-offset=<num>]  [--erase-counter=<num>]  [--ubi-ver=<num>] 
[--image-seq=<num>] [--verbose] [--help] [--version] ini-file 
Example: ubinize -o ubi.img -p 16KiB -m 512 -s 256 cfg.ini - create UBI image 
         'ubi.img' as described by configuration file 'cfg.ini'

-o, --output=<file name>     output file name 
-p, --peb-size=<bytes>       size of the physical eraseblock of the flash 
                             this UBI image is created for in bytes, 
                              kilobytes (KiB), or megabytes (MiB) 
                              (mandatory parameter)物理可擦出块大小 
-m, --min-io-size=<bytes>    minimum input/output unit size of the flash 
                             in bytes 
-s, --sub-page-size=<bytes>  minimum input/output unit used for UBI 
                             headers, e.g. sub-page size in case of NAND 
                             flash (equivalent to the minimum input/output 
                             unit size by default)子页大小

-O, --vid-hdr-offset=<num>   offset if the VID header from start of the 
                              physical eraseblock (default is the next 
                             minimum I/O unit or sub-page after the EC 
                             header)VID头部偏移量,默认是512 
-e, --erase-counter=<num>    the erase counter value to put to EC headers (default is 0) 
-x, --ubi-ver=<num>           UBI version number to put to EC headers  (default is 1) 
-Q, --image-seq=<num>        32-bit UBI image sequence number to use 
                             (by default a random number is picked) 
-v, --verbose                 be verbose 
-h, --help                   print help message 
-V, --version                 print program version

例: 
ubinize –o ubi.img -m 2KiB -p 128KiB -s 2048 $system_cfg_file –v 
-m最小输入输出大小为2KiB(2048bytes),一般为页大小 
-p物理可擦出块大小为128KiB=每块的页数*页大小=64*2KiB=128KiB 
-s用于UBI头部信息的最小输入输出单元,一般与最小输入输出单元(-m参数)大小一样。 
ubinize需要指定一个配置文件$system_cfg_file,内容如下: 
[rootfs-volume]  
mode=ubi  
image=system_ubifs.img  
vol_id=0  
vol_size=90MiB  
vol_type=dynamic 
vol_name=system

======================================================================

配置文件说明 
INI-file format. 
The input configuration ini-file describes all the volumes which have to 
be included to the output UBI image. Each volume is described in its own 
section which may be named arbitrarily. The section consists on 
"key=value" pairs, for example: 
 
[jffs2-volume] 
mode=ubi 
image=../jffs2.img         mkfs.ubi生成的源镜像 
vol_id=1                   卷序号 
vol_size=30MiB         卷大小 
vol_type=dynamic           动态卷 
vol_name=jffs2_volume      卷名 
vol_flags=autoresize      
vol_alignment=1

This example configuration file tells the utility to create an UBI image with one volume with ID 1, volume size 30MiB, the volume is dynamic, has name "jffs2_volume", "autoresize" volume flag, and alignment 1. The "image=../jffs2.img" line tells the utility to take the contents of the volume from the "../jffs2.img" file. The size of the image file has to be less or equivalent to the volume size (30MiB). The "mode=ubi" line is mandatory and just tells that the section describes an UBI volume - other section modes may be added in the future. 
Notes:

* size in vol_size might be specified kilobytes (KiB), megabytes (MiB),  gigabytes (GiB) or bytes (no modifier); 
  * if "vol_size" key is absent, the volume size is assumed to be equivalent to the size of the image file (defined by "image" key); 
  * if the "image" is absent, the volume is assumed to be empty;

* volume alignment must not be greater than the logical eraseblock size; 
  * one ini file may contain arbitrary number of sections, the utility will put all the volumes which are described by these section to the           output UBI image file.

有了mkfs.ubifs和ubinize两个工具后,就可以制作UBIFS镜像了,具体步骤如下:

1. 使用mkfs.ubifs命令将某个文件夹制作为UBIFS镜像,具体命令为:

  1. mkfs.ubifs -r/tmp/rootfs-m 2048 -e 126976-c 992 -o ubifs.img

以上命令的含义为将/tmp/rootfs文件夹制作为UBIFS文件系统镜像,输出的镜像名为ubifs.img,-m参数指定了最小的I/O操作的大小,也就是NAND FLASH一个page的大小,-e参数指定了逻辑擦除快的大小,-c指定了最大的逻辑块号。

通过此命令制作的出的UBIFS文件系统镜像可在u-boot下使用ubi write命令烧写到NAND FLASH上。

2. 使用ubinize命令可将使用mkfs.ubifs命令制作的UBIFS文件系统镜像转换成可直接在FLASH上烧写的格式(带有UBI文件系统镜像卷标):

  1. ubinize -o ubi.img-m 2048 -p 128KiB-s 512 -O 2048 ubinize.cfg

ubinize.cfg为一些配置参数:

  1. [ubifs]
  2. mode=ubi
  3. image=ubifs.img
  4. vol_id=0
  5. vol_size=100MiB
  6. vol_type=dynamic
  7. vol_alignment=1
  8. vol_name=rootfs
  9. vol_flags=autoresize

通过此命令生成的ubi.img可直接使用NAND FLASH的烧写命令烧写到FLASH上。

-----------------------------------UBI文件系统挂载----------------------------------------------

ubiattach - 链接MTD设备(MTD设备描述原始Flash设备)到UBI并且创建相应的UBI设备;

(1)ubiattach:将指定的mtd分区关联到ubi上

用法:./ubiattach /dev/ubi_ctrl -m 1 -d 1, 将mtd1关连ubi_1

(2)ubidetach:解除mtd与ubi的关联

用法:./ubidetach /dev/ubi_ctrl -m 1

mount -a 是自动挂载 /etc/fstab 里面的东西。

Ubifs文件系统和mkfs.ubifs以及ubinize工具的用法相关推荐

  1. Linux基础知识--2.Linux的文件系统和bash的基础特性(1)

    Linux基础知识--linux的文件系统和bash的基础特性 一.Linux文件系统: Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux ...

  2. 一幅长文细学华为MRS大数据开发(二)——HDFS分布式文件系统和ZooKeeper

    文章目录 2 HDFS分布式文件系统和ZooKeeper 2.1 HDFS概述以及应用场景 HDFS概述 HDFS应用场景 HDFS不适合的场景 2.2 HDFS相关概念 计算机集群结构 基本系统架构 ...

  3. Mysql复习计划(一)- 字符集、文件系统和SQL执行流程

    Mysql复习计划(一)- 字符集.文件系统和SQL执行流程 前言 一. Mysql字符集 1.1 Mysql5.7和8.0的默认字符集 1.1.1 修改默认的字符集 1.1.2 修改已有库表的字符集 ...

  4. Linux和DOS文件系统的区别,对比Linux文件系统和DOS文件系统

    对比Linux文件系统和DOS文件系统 二 盖 氢拿 对比 文件系统和 娄 秦皇岛职业技术学院 文件系统 雨 河北 秦皇岛 [摘 ,. 共]件系统是操作系统用以表明磁盘或分区上的文件的一种方法以及数据 ...

  5. 谷歌技术“三宝”之一的Google文件系统和Kosmos 文件系统

    转:http://www.cppblog.com/jack-wang/archive/2010/02/26/108503.aspx 谷歌技术"三宝"之一的Google文件系统和Ko ...

  6. 小师妹学JavaIO之:文件系统和WatchService

    文章目录 简介 监控的痛点 WatchService和文件系统 WatchSerice的使用和实现本质 总结 简介 小师妹这次遇到了监控文件变化的问题,F师兄给小师妹介绍了JDK7 nio中引入的Wa ...

  7. ROS学习笔记2(ROS文件系统和ROS常用命令)

    文章目录 1 预备工作 2 ros包文件系统概览 3 文件系统工具 3.1 rospack 3.2 roscd 3.3 roscd log 3.4 rosls 3.5 tab代码补全 4 总结 1 预 ...

  8. 第3阶段——内核启动分析之prepare_namespace()如何挂载根文件系统和mtd分区介绍(6)...

    内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘.D盘等,而linux中每个应用程序是存放在根文件系统里面,那么挂载根文件系统在哪里,怎么实现 ...

  9. ext4 文件系统和XFS文件系统的对比

    ext4和XFS是Linux操作系统中常见的两种文件系统.它们都是现代的高性能文件系统,各自具有优缺点.以下是它们之间的比较: 性能:XFS在处理大文件和大目录时比ext4表现更好.而ext4在处理小 ...

最新文章

  1. AI 行业寒冬犹在:融资规模不足巅峰时期一半,上市潮将伴随倒闭潮
  2. Openlayers中实现地图上添加一条红色直线
  3. php mailer altbody,PHPMailer发送邮件中文乱码的解决办法
  4. 微信公众号每次调用接口正确或错误的返回码
  5. Android JNI Attempt to remove non-JNI local reference, dumping thread
  6. C#LeetCode刷题之#28-实现strStr()(Implement strStr())
  7. Linux基本操作和知识
  8. shmget出现Invalid argument错误
  9. 学习Leader选举算法
  10. 【ceph】vdbench的使用教程——裸盘测试和文件系统测试vdbanch
  11. Android手机开发总结
  12. 计算机无法识别机械硬盘,机械硬盘无法识别【面对办法】
  13. 性能优化-图片压缩格式的选择(ETC和ASTC)
  14. python之dataframe写excel合并单元格_python之DataFrame实现excel合并单元格
  15. 3D游戏编程与设计-井字棋
  16. android开发集成flash,Android开发之Adobe flash操作工具类
  17. 存储卡 android文件夹,安卓系统下SD卡文件夹功能介绍
  18. 微信 android兼容性问题怎么解决方案,微信7.0版本与EMUI系统兼容性问题,华为官方是这样回复的...
  19. mmap()、munmap()的用法、例子
  20. 对YAML :: LoadFile的未定义引用

热门文章

  1. UA MATH564 概率论 多元随机变量的变换 理论与应用2
  2. 统计学习II.7 广义线性模型1 指数分布族
  3. UA MATH567 高维统计II 随机向量6 亚高斯随机向量的应用: 半正定规划
  4. 首次使用Cesium加载3D数据不成功
  5. MFC最小程序(不使用应用程序向导)
  6. GIS叠加分析功能学习
  7. .net 插件式开发学习总结
  8. POJ 2356 (抽屉原理)
  9. [Swift]LeetCode324. 摆动排序 II | Wiggle Sort II
  10. etcd集群搭建(高可用)