Mtd
Mtd的意思是Memory technology device,就是存储技术设备的意思,多指flash。
mtd device 代表着物理设备,这个物理设备上存在着许多物理块(nand),这些块大部分是好的,也有少数是坏块,所以mtd device 代表着所有的好块和坏块。对这些mtd device,内核提供了读写等操作。
Ubi
Ubi的意思是Unsorted Block Images ,是一种原始flash设备的卷管理系统。这个系统能在一个物理的flash设备上管理多个卷并且能在整个flash芯片上实现损耗均衡。
一个UBI卷就是一串连续的逻辑擦除块(LEBs)。每一个逻辑擦除块可以被映射到任何一个物理擦除块(PEB)上面。这个映射是由UBI管理,这种映射对用户是透明的,同时这种映射也是UBI实现全局的损耗均衡的基础。通过每一个物理擦除块记录的擦除计数,可以将数据从损耗严重的物理块转移到损耗较少的擦除块。
Ubifs
Ubifs的意思是 是一个新兴的应用于mtd上的日志型文件系统。可以有效的组织flash的坏块和peb的负载平衡,同时提供访问速度,减小内存消耗,具有日志的功能。是JFFS2的后续增强版。
UBIFS工作在UBI卷之上,不能在MTD设备之上运行
Ubi device 代表着物理介质上的逻辑设备。跟mtd device一样,也有读写等操作接口。可是这个设备在用户看来是没有坏块的,ubi device 负责了坏块的管理,并且对物理块进行了新的组织,但是在用户看来在ubi device中,却是进行了新的映射。这种映射目的在于负载的均衡。
下面是有关 Ubi 文件系统的一些详细信息:
-
Ubi 文件系统是为闪存设备而设计的。与传统的文件系统相比,Ubi 可以更好地处理闪存设备上的坏块,因为它可以将坏块转换为虚拟块,并将数据移动到其他可用块。
-
Ubi 文件系统采用了与 JFFS2(另一种常见的闪存文件系统)不同的日志型结构。与 JFFS2 一样,Ubi 将数据写入闪存设备的空闲块中,但它还会将元数据写入闪存设备的另一个区域。
-
Ubi 文件系统可以跨多个闪存设备进行分区,并支持多个 Ubi 卷。这使得 Ubi 可以更好地处理大型闪存设备和数据集。
-
Ubi 文件系统支持动态卷大小调整,这意味着可以根据需要增加或减小卷的大小。
-
Ubi 文件系统还具有数据加密和压缩的功能,以提高数据传输速度并增强数据安全性。
-
Ubi 文件系统还有一些工具可以帮助进行调试和性能优化,如
ubi-utils
、ubi_reader
和ubinize
等。 -
Ubi 文件系统由 Linux 内核支持,并在嵌入式系统和移动设备等领域得到广泛应用。
总之,Ubi 文件系统是一个用于闪存设备的高效、灵活和可靠的文件系统。它具有处理闪存设备上的坏块、跨多个设备分区、支持动态卷大小调整和数据加密等功能。
ubi常用工具
工具 | 作用 |
---|---|
ubinfo | 提供ubi设备和卷的信息 |
ubiformat | 格式化空的Flash设备,擦除Flash,保存擦除计数,写入UBI镜像到Flash |
ubiattach | 链接MTD设备到UBI并且创建相应的UBI设备 |
ubidetach | ubiattach相反的操作,将MTD设备从UBI设备上去掉连接 |
ubimkvol | 从UBI设备上创建UBI卷 |
ubirmvol | 从UBI设备上删除UBI卷 |
ubinfo:
ubinfo是一个用于查询UBI文件系统信息的工具。它可以显示UBI分区的大小、块数、可用块数、擦除块数等信息,帮助用户管理和维护设备的文件系统。
常用参数如下:
使用方法:
- 通过SSH或Telnet连接到设备,或者在设备的Linux系统上执行ubinfo命令;
- 在终端窗口中查看分区信息输出。
ubiformat
格式化MTD设备,把UBI镜像写入Flash
常用参数如下:
ubiattach
可以将UBI文件系统映射到闪存设备的某个物理块上上。
常用参数如下:
ubidetach
把MTD设备从UBI设备上去掉
常用参数如下:
ubimkvol
从UBI设备上创建UBI卷
常用参数如下:
ubirmvol
从UBI设备上删除UBI卷。
常用参数如下:
挂载ubi文件系统
一、Linux 系统中有关mtd和ubi的接口:
cat /proc/mtd
:可以看到当前系统的各个mtd情况,cat /proc/partitions
: 分区信息,有上面的类似cat /sys/class/ubi/ubi0/*
:当前系系统的ubi情况ls /dev/*
:查看设备节点
二、假设挂载磁盘是/dev/mtd10,300MiB,ubi节点是ubi0,(已有文件系统ubi0挂载在/dev/mtd9)
- 加载ubi驱动:
sudo modprobe ubi
#查看是否加载成功:执行 ls /dev/ubi_ctrl 如果有ubi_ctrl节点,就表示加载成功;
-
格式化,ubiformt命令将mtd10分区格式化:
ubiformat /dev/mtd10
-
创建ubi0节点,也就是绑定UBI到MTD分区:
ubiattach /dev/ubi_ctrl -m 10
#执行 ls /dev/ubi0 如果存在说明ubi attach 成功了;
# 参数” -m 10”表示使用 mtd10 分区,“ -b n”表示保留n个块用于坏块处理。
只有绑定了ubi 到 mtd 分区以后,才能在 /dev/ 下找到 ubi设备“ ubin(n=0、1、2······)”;
- 创建分区标识(ubi volume):
ubimkvol /dev/ubi0 -N rfs -s 280MiB(不能是300MiB,需要留些磁盘空间)
#参数“ /dev/ubi0”是上一步骤创建的ubi 设备。
#参数“ -N rfs”表示创建的卷名为“ rfs”。
#参数“ -s SIZE”表示创建的分区大小
-
挂载:
mount -t ubifs ubi0:rfs /mnt
-
查看创建好的ubi卷:
#1.执行 dmesg 查看内核输出的ubi信息
dmesg
#2.使用ubinfo工具
ubinfo /dev/ubi0 查看ubi信息
- 查看df:
df -h