您之前可能听说过 Journaling Flash File System(JFFS)和 Yet Another Flash File System(YAFFS),但是您知道使用底层

flash 设备的文件系统意味着什么吗?本文将向您介绍 Linux® 的 flash 文件系统,并探索它们如何通过平均读写(wear

leveling)处理底层的可消耗设备(flash 部件),并鉴别各种不同的 flash

文件系统以及它们的基本设计。

固态驱动器当前非常流行,但是嵌入式系统很久以前就开始使用固态驱动器进行存储。您可以看到 flash

系统被用于个人数字助理(PDA)、手机、MP3 播放器、数码相机、USB flash

驱动(UFD),甚至笔记本电脑。很多情况下,商业设备的文件系统可以进行定制并且是专有的,但是它们会遇到以下挑战。基于 Flash

的文件系统形式多种多样。本文将探讨几种只读文件系统,并回顾目前可用的各种读/写文件系统及其工作原理。但是,让我们先看看 flash

设备及其所面对的挑战。

Flash 内存(可以通过几种不同的技术实现)是一种非挥发性内存,这意味着断开电源之后其内容仍然保持下来。要了解

flash 内存的辉煌历史,请参阅 参考资料。

两种最常见的 flash 设备类型为:NOR 和 NAND。基于

NOR 的 flash 技术比较早,它支持较高的读性能,但以降低容量为代价。NAND flash

提供更大容量的同时实现快速的写擦性能。NAND 还需要更复杂的输入/输出(I/O)接口。

Flash

部件通常分为多个分区,允许同时进行多个操作(擦除某个分区的同时读取另一个分区)。分区再划分为块(通常大小为

64KB 或 128KB)。使用分区的固件可以进一步对块进行独特的分段 — 例如,一个块中有 512

字节的分段,但不包括元数据。

Flash 设备有一个常见的限制,即与其他存储设备(如 RAM 磁盘)相比,它需要进行设备管理。flash 内存设备中惟一允许的

Write 操作是将 1 修改为 0。如果需要撤销操作,那么必须擦除整个块(将所有数据重置回状态

1)。这意味着必须删除该块中的其他有效数据来实现持久化。NOR flash

内存通常一次可以编写一个字节,而 NAND flash 内存必须编写多个字节(通常为 512 字节)。

这两种内存类型在擦除块方面有所不同。每种类型都需要一个特殊的 Erase 操作,该操作可以涵盖 flash 内存中的一个整块。NOR

技术需要通过一个准备步骤将所有值清零,然后再开始 Erase 操作。Erase 是针对 flash

设备的特殊操作,非常耗费时间。擦除操作与电有关,它将整个块的所有单元中的电子放掉。

NOR flash 设备通常需要花费几秒时间来执行 Erase 操作,而 NAND 设备只需要几毫秒。flash

设备的一个关键特性是可执行的 Erase 操作的数量。在 NOR 设备中,flash 内存中的每个块可被擦除 100,000 次,而在

NAND flash 内存中可达到一百万次。

除了前面提到的一些限制以外,管理 flash 设备还面临很多挑战。三个最重大的挑战分别是垃圾收集、管理坏块和平均读写。

垃圾收集

是一个回收无效块的过程(无效块中包含了一些无效数据)。回收过程包括将有效数据移动到新块,然后擦除无效块从而使它变为可用。如果文件系统的可用空间较少,那么通常将在后台执行这一过程(或者根据需要执行)。

用的时间长了,flash 设备就会出现坏块,甚至在出厂时就会因出现坏块而不能使用。如果 flash 操作(例如 Erase)失败,或者

Write 操作无效(通过无效的错误校正代码发现,Error Correction Code,ECC),那么说明出现了坏块。

识别出坏块后,将在

flash

内部将这些坏块标记到一个坏块表中。具体操作取决于设备,但是可以通过一组独立的预留块来(不同于普通数据块管理)实现。对坏块进行处理的过程

— 不管是出厂时就有还是在使用过程中出现 —

称为坏块管理。在某些情况下,可以通过一个内部微控制器在硬件中实现,因此对于上层文件系统是透明的。

前面提到

flash 设备属于耗损品:在变成坏块以前,可以执行有限次数的反复的 Erase

操作(因此必须由坏块管理进行标记)。平均读写算法能够最大化 flash 的寿命。平均读写有两种形式:动态平均读写

和静态平均读写 。

动态平均读写解决了块的 Erase

周期的次数限制。动态平均读写算法并不是随机使用可用的块,而是平均使用块,因此,每个块都获得了相同的使用机会。静态平均读写算法解决了一个更有趣的问题。除了最大化

Erase 周期的次数外,某些 flash 设备在两个 Erase 周期之间还受到最大化 Read

周期的影响。这意味着如果数据在块中存储的时间太长并且被读了很多次,数据会逐渐消耗直至丢失。静态平均读写算法解决了这一问题,因为它可以定期将数据移动到新块。

到目前为止,我已经讨论了 flash 设备及其面临的基本挑战。现在,让我们看看这些设备如何组合成为一个分层架构的一部分(参加图

1)。架构的顶层是虚拟文件系统(VFS),它为高级应用程序提供通用接口。VFS 下面是 flash 文件系统(将在下节介绍)。接下来是

Flash 转换层(Flash Translation Layer,FTL),它整体管理 flash 设备,包括从底层 flash

设备分配块、地址转换、动态平均读写和垃圾收集。在某些 flash 设备中,可以在硬件中实现一部分 FTL 。

linux flash文件读取,Linux flash 文件系统剖析相关推荐

  1. linux flash文件读取,一种基于Linux的flash文件系统存储策略

    摘要:随着嵌入式系统的广泛应用,嵌入式系统中的数据存储和数据管理显得日益重要.本文主要介绍flash存储器的存储特点,Linux文件系统的两类存储策略:块式存储和线性存储,并在此基础上提出了一种改进的 ...

  2. linux 新增文件夹记录_linux文件系统(基础概念)

    文件系统:统一用户使用的各种文件的管理机制,构筑用户文件和底层硬盘的中间接口,使我们读写数据文件时不必去关心实际存放的block. ---全文来源于互联网笔记,非原创. 硬盘分区 分区结构 整个分区大 ...

  3. Linux系统盘文件读取

    1.背景 一台Ubuntu系统的主机,在配置环境时导致系统的无法正常启动.并且主机的数据比较重要,所以需要将硬盘中的数据提取出来.将硬盘插到硬盘读取器上发现,无法读取EXT4的文件格式.如果想读取只能 ...

  4. linux根文件分析,Linux根文件系统详解

    文件系统: rootfs:#根文件系统 FHS:Linux /boot:#系统启动相关的文件,如内核.initrd,以及grub(bootloader) /dev:#设备文件 块设备:随机访问,数据块 ...

  5. linux目录文件变化,Linux下监测目录或文件的变化---inotify

    二.结构及事件介绍 当有事件发生时,notify文件描述符会变为可读,调用read()可以读取发生的事件,事件的描述结构为inotify_event结构体,定义如下: struct inotify_e ...

  6. 为什么linux虚拟机文件78g,linux 磁盘空间被占满但找不到目标文件的问题处理 lsof命令...

    lsof简介 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能. 直接输入lsof部分输出为: 每行 ...

  7. linux 初始化文件失败,linux(十)之初始化文件

    前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是 ...

  8. linux 音频文件长度,Linux下压缩音频文件

    安装工具 sudo apt-get install lame 具体用法可以查看帮助  lame --help 通过更改音频文件的帧数 可以让文件变小  但是音质也会随之下降 现在比较多的mp3文件是1 ...

  9. linux history文件路径,Linux、Unix常用命令(文件和目录相关)

    mkdir dirname 建立子目录. 注意:用户不能在一个不存在的目录中建立子目录. mkdir data 在当前目录下建立子目录 data mkdir /usr/data 在/usr/目录下建立 ...

  10. linux 查找文件 locate,linux文件查找(find,locate)

    文件查找: locate: 非实时,模糊匹配,查找是根据全系统文件数据库进行的: # updatedb, 手动生成文件数据库 速度快 find: 实时 精确 支持众多查找标准 遍历指定目录中的所有文件 ...

最新文章

  1. 重磅!阿里巴巴江苏总部落户南京建邺区
  2. JavaScript window
  3. POI操作Excel常用方法总结 .
  4. gc就是fullgc吗 major_线上出现fullgc问题如何排查?
  5. configtx.yaml中文注解
  6. word中如何优雅的显示代码
  7. Linux Buffers和Cached的区别(转)
  8. 新版的iMessage就是iOS 10内隐形的浏览器
  9. Linux iptables防火墙详解(三)——iptables匹配条件
  10. 《鬼谷子》决篇第十一(翻译)
  11. NOD32企业内部更新服务器搭建
  12. Zcurd与Eova对比,欢迎吐槽!
  13. matlab调取excel非线性拟合,用matlab实现非线性曲线拟合_matlab非线性曲线拟合
  14. 看视频用这个太爽了!自动实时翻译英语视频
  15. 计算机专业必读的经典书籍!!(建议收藏)
  16. CA1704:标识符应正确拼写
  17. C#中问号“?”的用法
  18. Tableau笔记(10)转置和拆分
  19. 三星S5P4418工控主板 (ARM Cortex-A9架构)
  20. 计算机管理任务计划程序全部禁用,win10计划任务如何关闭_win10怎么禁用计划任务...

热门文章

  1. 设置一个励志锁屏短语吧!苹果电脑锁屏短语在哪设置?
  2. 【Struts】ActionForm
  3. Safari浏览器兼容性问题
  4. php网站系统说明,国外CMS系统介绍(总结)
  5. query归一 同义词挖掘
  6. 前端,自定义印章效果
  7. INDEMIND荣登「AI中国」机器之心2021人工智能年度榜单
  8. android u盘检测工具,android 检测是否插入U盘方法之一
  9. 冰点还原精灵免费版下载
  10. vmaware 安装chrome OS 系统教程