文件系统概述

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 关于文件系统概述的文章,介绍了不同操作系统下的文件系统类型、特点及其选择方法,并推荐了一些相关学习资源。

作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.文件系统的选择

1>.什么是文件系统

  文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

  从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

  Linux操作系统查看其支持的文件系统的目录(/lib/modules/`uname -r`/kernel/fs)如下图所示。

2>.文件系统类型

  Linux文件系统:
    ext2(Extended file system):
      Remy Card发布于1993年,适用于那些分区容量不是太大,更新也不频繁的情况,例如/boot分区
    ext3:
      Stephen Tweedie发布于1999年,是ext2的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。它通常被用作通用的文件系统.
    ext4:
      various发布于2006年,是ext文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升。目前CentOS 6.x在默认使用该文件系统。
    xfs:
      SGI发布于1994年,SGI,支持最大8EB的文件系统。目前CentOS 7.x在默认使用该文件系统。
    btrfs(Oracle):
      Oracle Corporation发布于2007年,虽然RedHat公司在CentOS 7.x测试阶段使用过该文件系统,但官方宣称在后期的发布版本将不再对该文件系统进行支持。
    ReiserFS:  
      Namesys发布于20001年,号称是世界上最快的文件系统。可惜该发布者的开发人员据说是杀妻(真搞不懂这些天才脑子里想的都是啥!!!),目前还在美国的监狱呆着呢。  
  光盘:
    iso9660:  
      Ecma International, ISO发布于1988年。

  Windows:
    FAT32:  
      Microsoft公司发布于1996年,以前的软盘,U盘使用该文件系统。
    exFAT:  
      Microsoft公司发布于2006年
    NTFS:  
      Microsofth(Gary Kimura,Tom Miller)公司发布于1993年。

  Unix: 
    FFS(fast):  
       Kirk McKusick发布于1983年。  
    UFS1(unix):  
      Kirk McKusick发布于1994年。  
      
    UFS2:  
      Kirk McKusick发布于2002年。  
    JFS:  
      IBM公司发布于1999年。  
      

  网络文件系统:
    NFS
    CIFS

  集群文件系统:
    GFS2:  
      Red Hat公司于2006年发布。
    OCFS2(oracle)  
      Oracle Corporation于2005年发布。

  分布式文件系统:
    fastdfs
    ceph
    moosefs
    mogilefs
    glusterfs
    Lustre

  RAW:
    未经处理或者未经格式化产生的文件系统,底层存储的数据就是0和1,没有文件名的概念,对于追求高性能的磁盘能力可以考虑使用这种裸盘。比如Oracle RAC服务。

  博主推荐阅读:
    https://en.wikipedia.org/wiki/Comparison_of_file_systems(各类操作系统的比较)

3>.文件系统分类

  根据其是否支持"journal"功能:
    日志型文件系统: ext3, ext4, xfs, ...
    非日志型文件系统: ext2, vfat

  文件系统的组成部分:
    内核中的模块:ext4, xfs, vfat
    用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

  Linux的虚拟文件系统:
    VFS(如下图所示)是内核空间的虚拟的文件系统。用户无需和底层的其它文件系统打交道,开发人员秩序针对虚拟文件系统(VFS)的API进行定制该法,而和底层不同设备设备的不同文件系统打交道则交由虚拟文件系统来处理。

  查前支持的文件系统:
    cat /proc/filesystems

4>.文件系统的选择

5>.超级块和INODE TABLE

  如下图所示,可以看到超级快(Super Block)和Inode表关系。

  Disk:
    磁盘是可以基于MBR或者GPT等主流方案进行分区的,下图是基于MBR进行分区,共有4个分区。
  Partition:
    分区有一个启动扇区(Boot Sector,占用512字节),该分区的剩余空间均属于文件系统,下图文件系统类型为EXT2。
  File System:
    文件系统底层是由块组成,而由于块的数量相对较多,因此会被划分成多个块组(Block Group N),可以使用块分区管理工具dumpe2fs(仅适合处理EXT系列的文件系统)进行查看。
  Block Group:
    每一个块组(Block Group)包括以下几个部分:
      Super Block:
        存放元数据信息的,比如存储该Block Group管理的块范围。可以使用tune2fs工具(比如"tune2fs -l /dev/sdb2")进行查看。需要注意的是tune2fs也仅适合处理EXT系列的文件系统。
      GDT:
        组的描述表。
      Block Bitmap:
        块位图用于标识各个块的使用情况。比如使用"1"表示该block被使用,使用"0"表示该block未被使用。
      inode Bitmap:
        节点位图和块位图功能类似。
      inode Table:
        节点表包括的信息相对较多,常见的参数如下:
          Inode number:
            存放节点编号。
          File Type:
            文件类型,Linux有7中文件类型,比如链接文件,目录文件,普通文件,字符设备文件,块设备文件等。
          Permissiontion:
            文件对应的权限。
          Link count:
            该inode被链接的次数。
          UID:
            该inode所属用户的系统ID编号。
          GID:
            该inode所属组的系统ID编号。
          size:
            该inode存储的数据大小。
           pointer:
            指向真正存储数据的指针。
      Data Blocks:
        用于真正存储数据库的块。

二.EXT文件系统实战篇

  博主推荐阅读:
    https://www.cnblogs.com/yinzhengjie/p/12820088.html
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
3月前
|
人工智能
AI大会回顾 | 阿里云上的Salesforce AI CRM正式发布!
AI大会回顾,阿里云上的Salesforce AI CRM正式发布!将AI无缝融入业务流程,成为企业解锁增长的核心工具。
|
算法 C语言 C++
二叉树三种遍历(动态图+代码深入理解)
二叉树三种遍历(动态图+代码深入理解)
3246 3
二叉树三种遍历(动态图+代码深入理解)
|
5月前
|
数据采集 人工智能 安全
全国 CIO大会论道:阿里云上的Salesforce与企业共探AI落地的困与解
5月28日,第十一届全国CIO大会在西安召开,近400位企业CIO及IT高管齐聚,围绕“AI+数据赋能业务场景”主题探讨数智化转型路径。阿里云与瓴羊联合主办分论坛,聚焦“开启数智增长——AI落地的困与解”。会上,阿里云分享了Salesforce本土化实践,提出AI+CRM实战方法论;瓴羊则提出企业级AI能力的四层架构思路。雅戈尔与亚萨合莱等制造巨头分享了AI技术赋能业务的经验,展示AI与数据深度融合带来的新活力。
|
8月前
|
运维 Kubernetes Cloud Native
什么是云原生?
云原生(Cloud Native)是一种充分利用云计算弹性和自动化能力的架构理念,核心思想包括以云为中心、模块化与松耦合、自动化运维及弹性容错。其关键技术涵盖容器化(如Docker)、编排调度(如Kubernetes)、微服务和DevOps等。相比传统架构,云原生具备敏捷性、弹性伸缩、高可用性和资源优化等优势,适用于互联网高并发业务、AI/大数据平台及企业转型场景。然而,落地面临技术复杂度高、组织文化转型及安全合规挑战。未来发展趋势包括混合多云管理、智能化运维及WebAssembly等轻量化技术。Gartner预测,到2025年超95%新应用将采用云原生模式开发。
3095 3
|
4月前
|
安全 关系型数据库 数据库
数据仓库是什么,一文读懂数据仓库设计步骤
数据仓库是企业整合、存储和分析历史数据的核心工具,支持决策与趋势预测。设计需经历明确业务需求、梳理数据源、概念建模、逻辑设计、物理实现及测试维护等步骤。通过合理规划结构、安全机制与数据集成(如使用FineDataLink),可有效提升数据质量与分析效率,助力企业发挥数据价值。
|
5月前
|
数据采集 人工智能 监控
从 Agent 到模型推理:端到端的可观测性实践
本文探讨了AI领域的最新发展趋势及应用挑战,详细分析了模型、框架与应用场景的进展,并针对如何用好AI、节省资源与确保合规提出了见解。同时,文章深入剖析了AI应用的典型架构,强调实现端到端可观测性的关键步骤,包括全链路追踪与数据平台构建。此外,还介绍了阿里云提供的全栈可观测解决方案,以及Tracing技术的具体实现细节。通过对关键性能指标(如TTFT和TPOT)的监控,优化数据采集与探针性能,解决了Dify等平台的实际问题。最后,阐述了模型质量评估与Token黑洞监控的重要性,并展示了阿里云监控平台的统一观测能力,助力用户全面掌握AI应用表现。
|
9月前
|
人工智能 Java 云计算
Salesforce X 阿里云:加速中国市场合作!
Salesforce X 阿里云:加速中国市场合作!
457 13
|
运维 网络协议
IP 地址类别:权威指南
IP 地址类别:权威指南
2088 4
|
机器学习/深度学习 人工智能 自然语言处理
软件测试的未来趋势:自动化与AI的融合
在数字化时代,软件测试作为确保产品质量和用户体验的关键步骤,其重要性日益凸显。随着技术的进步,特别是自动化和人工智能(AI)的发展,软件测试领域正经历着一场革命。本文将深入探讨自动化测试的现状、AI如何赋能软件测试以及这两者结合后可能带来的行业变革。通过分析最新的研究数据和技术报告,本文旨在为读者提供一个关于软件测试未来发展趋势的全面视角。
358 0
|
消息中间件 监控 物联网
物联网8大协议介绍及对比
根据具体的应用需求,选择合适的协议可以大幅提升系统的性能和可靠性。希望本文能为您在物联网协议的选择和应用中提供有价值的参考。
3938 0