Linux系统编程23 文件系统 - UFS文件系统解析

Linux内核中的UFS存储栈:手把手教你理解SCSI子系统与UFS的协作机制 本文深入解析Linux内核中UFS存储栈与SCSI子系统的协作机制,详细剖析从SCSI命令下发到UFS硬件执行的全链路流程。通过UTRD、UCD等核心数据结构的协同工作分析,为开发者提供底层视角的实用指南,涵盖驱动架构、协议处理及性能调优等关键内容。 阅读详情

前面聊的FAT 文件系统最怕 大文件,我们这里聊一聊 UFS文件系统,他们是同一时期的产物,FAT 是闭源,UFS是开源。

在这里插入图片描述

在这里插入图片描述

图中的inode部分 是一个inode结构体数组,我们的文件 几乎所有的信息都存放在 该文件的 inode 结构体当中

struct {
stat 结构
亚数据信息
隐藏内容
数据块指针组[15] ,15个指针

1  数据块指针
2  数据块指针
3  数据块指针
... 数据块指针
12 数据块指针

13  一级间接块指针
14  二级间接块指针
15  三级间接块指针

}

以下所有计算都是加上数据块大小是1K一块,而实际是4K 起步。

数据块指针组中的前12个指针中的每个指针都指向 图中块区域的中的某个小格子,即1K 一块,而实际的环境中都是4K起步。也就说是 如果12个数据块指针都用上了的话,能保存一个12K大小的文件,实际是48K+大小,所以如果我们的文件大小在12K(48K+)大小以内,那么这12个数据块指针就够了。

如果我们的文件大小超过了12K 的大小,那么就会动用 一级间接块指针,该指针也只想 块区域的一个 1K 大小的小格子,但是该格子中存储的不是文件数据,而是指针,假如是32位系统,一个指针的大小就是4个字节,那么该1k大小的块,就能够存储256个指针,然后每个指针又指向块区域中某个1K大小的块,用于存储文件数据。所以 一级间接块指针中的全部空间就是 256K 的大小。

如果文件大于 12K+256K, 那么就会动用 二级间接块指针, 二级间接块指针也指向块区域中1K 大小的小格子,该格子依然存放指针,可以存放256个指针,而这里的每个指针并非指直接指向 1K 的块,存放数据,而是指向 一级间接块指针指向的 1K 的地址块,也就说 二级间接块指针块 中的256个指针中的每个指针分别指向一个 一级间接块指针的 1K 地址块,即 二级间接块指针 可以保存
256*256 K 的大小

如果 二级间接块指针 加上前面的空间 依然不能满足文件的大小,那么就会动用 三级间接块指针。三级间接块指针 和 二级间接块指针类似,他的指针块中的每个指针 指向一个 二级间接块指针 块,即三级间接块指针 可以保存 256256256 大小的文件。

所以可见 UFS文件系统不怕大文件。

UFS文件系统的缺点:
很多人说 UFS文件系统 不善于或者不能管理小文件。我们每次产生一个新文件,都会分配一个新的 inode,位于inode块区域,那么就会有一种情况,当 inode inode块区域中的所有inode 都被耗尽了,但是 块区域还存在大量的空白块没有被使用,这种情况就是大量的小文件造成的,有些文件几乎不占磁盘空间,如符号链接文件等 ,但是也要分配inode。这样的话 当在使用某个文件的时候,就会在 inode区域,即inode结构体数组中查找目标inode结构体,这样查找就很耗时。

还有一种情况 inode结构体数组 大段的空白,但是数据块被耗尽,这种情况就是 大文件比较多造成的。

那么我们怎么知道 当前那个inode已经被使用了,那些inode还没有被使用。比如我touch一个新文件,系统是怎么快速的给他分配一个现在没有被使用的inode ?? 这就用到了 inode 位图。inode 区域有多少个格子,inode 位图区域就有多少个格子,他们一一对应,即可以理解为也是一个数组,该数组与inode结构体数组 数组元素个数相同, inode 位图数组中的每一项 按顺序对应一 一 inode结构体数组 中的每一项, inode 位图中用0/1代表该 inode 有没有被使用,所以寻找哪个 inode 没有被使用,就直接查找位图中的0项就可以。

同理 块位图中的格子 与 块区域中的格子是一一对应的,也是用0/1 代表对应数据块有没有被使用。所以我们的 统计磁盘使用量的命令就可以使用了,直接查 0,1 的数量就行了。

块是我们存储有效数据的数据块,为了方便计算和理解,我们假设块中的每个小格式1K 的大小,实际上每个小格子的大小都是4K起步的,这里假设是1K 是为了方便理解。

问题:文件名信息在哪儿?

我们发现上述图解中并没有文件名的信息,那么文件名在哪里?文件名存在目录文件中,目录文件是一个存放在某个文件下的一个常规文件,该文件中每一项叫目录项。目录项包含 inode信息和文件名。

FreeBSD单用户模式下用fsck修复UFS文件系统实战指南 UFS(Unix File System)是FreeBSD传统主力文件系统,其延迟写入机制在异常断电时易引发元数据不一致,表现为超级块校验失败、inode链表断裂或目录项指向无效节点。fsck作为原生修复工具,依赖文件系统静止状态才能安全执行逻辑校验与结构重建。单用户模式通过只读挂载根分区、禁用所有后台进程,为fsck提供理想的无干扰运行环境,避免多用户状态下因并发写入导致的二次损坏。该方案无需外部介质,兼容当前内核与驱动,特别适用于FreeBSD 15.1等新版本UFS2环境。典型应用场景包括启动失败、密 阅读详情

相关推荐

UFS 4.0 Boot流程深度解析:从硬件特性到系统启动全链路实践

存储接口技术是嵌入式与移动设备性能的核心基础,其协议演进直接决定了数据读写速度与系统响应能力。UFS(通用闪存存储)作为当前主流的高性能嵌入式存储标准,通过M-PHY和UniPro协议层实现高速数据传输,其双通道架构与不断升级的带宽为系统启动提供了硬件级加速可能。在系统启动(Boot)流程中,存储设备的初始化速度、分区管理效率以及驱动兼容性是影响启动时间与可靠性的关键技术价值点。尤其在追求极致启动速度的消费电子与工业控制场景中,存储与启动流程的深度协同优化至关重要。本文聚焦UFS 4.0的最新特性,结合Bo

weixin_33853794的博客 347

文件系统:FAT UFS

单向链表最大的弊端就是单向,当你进入一块数据块,然后去下一块数据块,在你使用的数据,突然间需要一个数据块,发现它在上一个数据块,不能直接回去,因为是单链表。缺陷:UFS不擅长管理小文件,INODE满了,但是数据块大面积空白,查找慢一些,EST2的前身就是UFS文件。而a还是原来的样子,最右边的1还是1,最右边1右边的0还是0,所以两个数进行与会把最右边的那个1消掉。此时要使用INODE位图,INODE位图0 1表示有没有用,在程序员眼里,位图是加速机制。INODE节点很多没用,数据块满了,全是大文件。

qq_63133692的博客 1146

UFS 4.0系统启动优化:从硬件特性到Bootloader与内核的深度调优实践

在嵌入式系统与移动计算领域,存储性能是影响设备启动速度和响应能力的关键因素。UFS(通用闪存存储)作为新一代存储标准,其高速接口和低延迟特性为系统启动优化提供了硬件基础。从技术原理上看,UFS 4.0通过M-PHY 5.0和UniPro 2.0协议实现了带宽翻倍,这直接改变了传统启动流程中BootROM、Bootloader和内核的存储访问模式。其技术价值在于能够将理论带宽转化为实际的启动时间缩减,特别是在小文件随机读取场景下。在应用场景上,这适用于对启动速度有极致要求的移动设备、边缘计算节点和工业控制设备

weixin_33671935的博客 524

从存储UFS角度梳理Linux系统框架,包括文件系统层、Block层、驱动层

从存储UFS的角度汇总一些Android系统知识

u010479987的博客 3795

野猫湖平台UFS实战:零刻EQ mini搭配长江存储UC341性能功耗解码

通用闪存存储(UFS)介于eMMC与NVMe之间,以全双工链路和极低功耗著称,常被视为低功耗迷你主机存储方案的折中优选。其串行接口与多队列命令机制,使顺序读取轻松突破800MB/s,而空闲功耗仅0.4W,远低于NVMe。在下载机、软路由、轻办公等场景下,UFS既能摆脱eMMC的性能瓶颈,又能避开NVMe的散热与功耗压力,成为实用平衡点。本文以零刻EQ mini(野猫湖平台)为平台,对长江存储UC341 UFS模块进行了完整适配验证,覆盖BIOS识别、Windows/Linux驱动、缓存回落与温度功耗实测,并

weixin_34342992的博客 524

100、大容量存储:传统文件系统UFS、EXT4和XFS详解

本文详细解析了传统文件系统UFS、ext4和XFS的发展背景、核心特性及管理方法。从文件系统的基本概念、术语解析到格式化、挂载和修复等操作,全面介绍了它们在大容量存储场景中的应用与区别。同时,文章还探讨了文件系统的最佳实践、常见问题解决方法以及未来发展趋势,帮助读者更好地理解和使用这些传统文件系统。

3a9bq4r8t2y的博客 241

Linux内核文件系统-ext2文件系统-调试ext2磁盘布局

Linux内核,文件系统,ext2文件系统, 调试ext2磁盘布局

chenxiaosongcsdn的博客 1107

29、FreeBSD UFS文件系统深度解析

本文深入解析了FreeBSD中的UFS文件系统,涵盖其架构、组件(如超级块、inode、块与片段)、虚拟节点(vnode)机制以及挂载与卸载操作。详细介绍了UFS的弹性机制,包括软更新、软更新日志记录和GEOM日志记录(gjournal)的工作原理及适用场景,并通过对比表格帮助读者选择合适的日志方案。同时提供了在不同应用场景下的使用建议、常见故障排查方法及未来发展趋势,全面指导用户高效、安全地管理和使用UFS文件系统。

sql99的博客 115

深度解析西部数据UFS芯片44个SMART参数及高通XBL读取实现

UFS作为当前主流嵌入式闪存方案,其健康状态评估长期被厂商视为黑盒。SMART技术从机械硬盘延伸至闪存领域,通过设备管理器的描述符机制暴露关键数据。掌握UFS SMART的读取与解析,能够为数据恢复、二手设备检测及固件开发提供底层支撑。在移动终端启动链路中,高通XBL阶段具备完整的UFS驱动能力,可在系统引导前获取芯片健康信息,为实现寿命预警和设备分拣提供可能。本文以西部数据UFS芯片为例,详解其44个SMART参数的含义,并给出基于高通XBL的读取源码与踩坑记录,帮助开发者快速构建自己的闪存健康检测方案。

weixin_34220179的博客 399

深入解析UFS 3.1协议栈:从JESD220E到Linux驱动调试与性能优化

存储系统性能不仅取决于闪存介质本身,更受主机控制器接口与协议交互策略的制约。UFS 3.1作为高性能移动存储标准,其主机控制器接口由JESD220E规范定义,涵盖UTP传输协议、UPIU报文格式、描述符管理及电源状态切换等关键机制。理解这些底层原理,有助于工程师在Linux内核框架下追踪SCSI命令路径、定位超时与性能抖动,并通过ftrace等工具实现精准排障。同时,针对WriteBooster与HPB等增量特性,合理配置SLC缓存和映射缓存参数,可有效优化随机写与随机读场景。从协议分层出发,结合内核tra

weixin_29161785的博客 165

UFS 4.1深度解析:从协议变化到HCI驱动适配与性能验证

在移动设备与嵌入式系统中,闪存存储的性能与稳定性直接决定用户体验,而UFS作为通用闪存存储标准,其每一次版本演进都备受关注。从UFS 4.0到UFS 4.1,升级重点并非物理层速率的再次翻倍,而是对写入调度、固件管理与安全机制的系统性增强。其中,Multi-Turbo Write通过将SLC缓存划分为多区域并动态调度,显著改善持续写入的稳态性能;FBO标准化固件引导与升级流程,降低终端厂商的适配成本与OTA失败风险;HCI 4.1则在寄存器层面提供更丰富的诊断信息和能力协商机制,让驱动开发者能更高效地定位异

weixin_30983965的博客 406

UFS3.1协议深度解析:从SCSI到M-PHY的三层架构与驱动调试

在嵌入式存储领域,UFS(通用闪存存储)已成为高性能移动设备的主流选择。其核心原理基于JESD220E标准,通过SCSI命令集提供上层语义,MIPI UniPro实现多路复用与流控,M-PHY负责高速差分信号传输。这种分层设计使UFS3.1实现全双工、命令队列深度32,显著提升随机读写性能。技术价值在于突破eMMC半双工瓶颈,满足多任务并发场景。应用场景涵盖安卓旗舰手机、车载娱乐系统及工业控制设备。理解UPIU报文结构、Task Tag管理及Linux驱动关键路径,是调试链路协商失败、数据校验错误等问题的关

weixin_30162121的博客 244

UFS 4.0 规范解析与实战:从 HS-G5 双通道到 Linux 驱动调优

嵌入式存储接口的演进始终围绕带宽、功耗与集成度展开。UFS 4.0 通过 M-PHY 5.0 将单通道速率提升至 23.2 Gbps,并借助双通道架构实现约 5.8 GB/s 理论带宽,同时引入更精细的低功耗状态与 Host Performance Booster 2.0 缓存优化。这些改进让移动端、车载域控与边缘 AI 设备在不牺牲随机 IOPS 的前提下,获得接近 NVMe 的顺序读写能力。实际部署中,开发者需关注设备树中 max-gear 与 max-lane 的显式配置、参考时钟抖动控制以及命令队列

weixin_29169899的博客 169

QFIL高通烧写全链路解析:驱动签名、EDL模式与UFS XML配置

QFIL(Qualcomm Flash Image Loader)是高通平台底层固件烧写的协议级工具,其本质并非普通刷机软件,而是基于EDL(Emergency Download Mode)协议与BootROM直接通信的硬件级烧写桥接器。理解EDL协议机制、Windows驱动签名策略及UFS存储的LUN分区拓扑,是实现稳定烧写的核心前提。在Windows 10/11系统中,Driver Signature Enforcement常导致QDLoader 9008驱动加载失败;而XML配置文件实为对UFS物理L

weixin_33904756的博客 530

UFS文件系统示意图(Unix操作系统)

UFS文件系统示意图:贝尔实验室-Unix操作系统-UFS文件系统。在FAT文件系统的基础上进行了改进,将FCB中除了文件名外的其他所有信息用一个索引结点(inode结点)进行保存。FCB中仅留下inode编号。在UFS文件系统的磁盘中有一块专门的inode区,用来保存inode结点。因此,只需要知道inode编号(类似数组下标)即可知道inode存在哪个磁盘中,只需要两次读磁盘就可以找到目标文件(一次读inode所在磁盘,读出inode。第二次读文件数据)。

Manifest_UFSFiles_Android

Manifest_UFSFiles_Android.txt

【硬核拆解】从UFS4.0的底层原理看华为Mate60的流畅体验

本文深入解析了华为Mate60搭载的UFS4.0存储技术,详细拆解其串行差分信号、全双工通信和多通道并发三大核心技术,揭示其如何实现4200MB/s的读取速度和极致流畅体验。通过对比eMMC,展现UFS4.0在数据传输、多任务处理等方面的代际优势,并分析华为在硬件协同、软件优化及智能功耗管理上的定制创新,最终转化为用户可感知的秒开应用、流畅多任务等实际体验提升。

weixin_33713503的博客 337

linux SCSI-UFS协议总图

详细介绍了linux中关于ufs及scsi协议实现,以及和block和文件系统层之间的调用关系:基于linux kernel4.4

上一篇: Linux系统编程22 文件系统 - 文件属性和FAT文件系统
下一篇: Linux系统编程24 文件系统 - 链接文件和目录操作
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值