1.硬件层面
外部存储设备分为块设备、闪存和 NVDIMM(非易失内存模组)设备 3 类。
(1)其中块设备主要有以下两种:
A.机械硬盘:嵌入式设备基本不使用
B.闪存块设备:
常见的有固态硬盘 splid State Drives,SSD),以及在手机和平板电脑上使用的嵌入式多媒体存储卡 (embedded Multi Media Card,eMMc)和通用闪存存储(Universal Flash Storage,UFS)。
闪存(Flash Memory)的主要特点如下:
在写入数据之前需要擦除一个擦除块,因为向闪存写数据只能把一个位从 1 变成 0,不能从 0 变成 1,擦除的目的是把擦除块的所有位设置为 1一个擦除块的最大擦除次数有限,NOR闪存的擦除块的最大擦除次数是 10^4~10^3, NAND 闪存的擦除块的最大擦除次数是 10^3~10^6。
(2)闪存主要有:NOR falsh,NAND flash
(4)eMMC和NAND Flash的关系
eMMC由NAND Flash存储芯片、主控IC(集成电路)以及标准封装组成。这意味着eMMC不仅包含了存储数据的NAND Flash芯片,还集成了控制和管理NAND Flash的主控芯片,以及用于与外部设备通信的标准接口。对外的接口协议与SD、TF卡类似。
2.文件系统
(1)闪存(NOR falsh,NAND flash)专用文件系统
A. JFFS2文件系统(日志型闪存文件系统版本2, Journalling Flash File System version2)
用在NOR falsh,基于MTD设备而设计的,实现了擦除、垃圾回收、损耗均衡等机制。但其损耗均衡机制做的并不好,一定程度上会加速损耗。
B.UBIFS(无序区块镜像文件系统, Unsorted Block Image File System)
可以用在NOR falsh也可以用在NAND flash上,克服了JFFS2文件系统的缺点,更好的实现了擦除、垃圾回收、损耗均衡等机制。
(2)块设备(机械硬盘,SSD,eMMc)常用文件系统
A.EXT 文件系统是 Linux 原创的文件系统,目前有 3 个 成版本:EXT[2-4]。
Ext可以通过FTL(Flash Translation Layer)实现对flash的支持,FTL可以将flash模拟成磁盘结构,从而实现对基于磁盘的文件系统的支持,同时FTL还必须提供块的管理、垃圾回收、均衡磨损等功能,因为不是直接对flash设备进行使用,需要FTL这个转换层来实现,相对效率比较低。
- vfat 文件系统(也称为 FAT32)
vfat没有日志功能,且缺乏完整的 Linux 文件系统实现所需的许多特性。它可用于在 Windows 和 Linux 系统之间交换数据,因为 Windows 和 Linux 都能读取它。不要将这个文件系统用于 Linux,除非要在 Windows 和 Linux 之间共享数据。如果您在一个 vfat 磁盘上解压缩一个 Linux 归档文件,那么您将丢失权限(比如执行权限),还会丢失该归档文件中可能存储的符号链接。
C.eMMc支持的其他系统:
Fuse,wrapfs,f2fs,相对不太常用。
3.综上
如果是NAND flash,采用UBIFS文件系统,比较好的实现了flash擦除、垃圾回收、损耗均衡等机制。
如果是eMMC采用EXT系统,通过FTL转换层实现了flash的管理、垃圾回收、均衡磨损等功能。
UBIFS更适用于嵌入式系统和闪存存储设备,而ext则更适用于Linux操作系统中的各种场景。