磁盘即是硬盘,由许多块盘片(盘面)组成,每个盘片的上下两面都涂有磁粉,磁化后可以存储信息数据。每个盘片的上下两面都安装有磁头,磁头被安装在梳状的可以做直线运动的小车上以便寻道,每个盘面被格式化成有若干条磁道,这些磁道是同心圆。并规定最外面的磁道是0磁道,次外层是1磁道,每个磁道又被分成若干个扇区,并被排号,扇区是CPU对磁盘I/O操作时能够读取和写入的最小单位,通常,一个扇区可以储存512B的二进制信息位,每个盘面上的同号磁道组成一个柱面(磁柱)。也就是说每个盘面的0号磁道组成0号柱面,所有的1号磁道组成1号柱面,等等。通过下面的图,可以了解


  在Linux操作系统中,内核采用的方法是把物理磁盘抽像为逻辑磁盘管理文件系统,所谓逻辑磁盘是把物理磁盘按照磁头号,磁道号,扇区号,以及盘面号划分成磁盘块的线性数组,也叫线性序列,如:把1号盘面的0号磁道的0号扇区定义为0号磁盘块,一般扇区数是2的整次幂。显然,当把实际的磁盘看成是磁盘块的线性数组时,就把物理磁盘存储数据的实际地址(即磁道号,扇区号以及盘面号)隐藏起来,因此呈现在系统高层面前的已经不是物理磁盘,而是一个经过加以后的逻辑磁盘。逻辑磁盘比物理硬盘的结构要简单的多,当系统执行磁盘I/O操作时,系统给出试图访问的逻辑磁盘块号,由设备驱动程序根据该块号计算出物理磁盘的磁道号,磁头号以及扇区号,然后启动硬盘把磁头向前或向后移动到相应的柱面,这便是所谓的寻道。寻道是磁盘I/O操作中最耗时的一个操作。一量磁头找到磁道,并且相应的扇区转到磁头下面,数据传输就开始。


  而文件是一个具有符号的一组相关联元素的有序序列,文件可以包含范围很广的内容。系统和用户都可以将具有一定独立功能的程序模块,一组数据或一组文字命名为一个文件。在计算机里看见的东西都叫文件,文件是以单个名称在计算朵上存储的信息集合,文件可以是文本文档,图片,程序等,文件通常有三个字母的扩展名,用于指示文件类型(windows下)。


  文件系统指文件存在的物理空间。在linux系统中,每个分区是一个文件系统,都有自己的目录层次。linux的最重要的特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其他操作系统共存。由于系统已将linux文件系统的所有细节进行了转换,所以linux核心的其它部分及系统中运行的程序将年到统一的文件系统。


  大部分的linux文件系统种类具有类似的通用结构,即使细节有些变化。其中心概念是超级块(superblock),i节点(inode),数据块(data block),目录块(directory block)和间接块(indirection block)。超级块包括文件系统的总体信息,比如大小。i节点包括除了名称外的一个文件的所有信息,而名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。i节点包括几个数据块的数目,用于存储文件数据。i节点中只有少量数据块的空间,如果需要更多,会动态分配指向数据块的指针空间,这些动态分配的块是间接块,为了找到数据,这名子指出它必须先找到间接块号码。


  linux文件系统分为3个部分,第一部分是Virtual File System(VFS),它是linux文件系统对外的接口,任何要使用文件系统的程序都必须经由这层接口来使用它,另外两部分是属于文件系统的内部实现,分别是Cache和真正的文件系统(如Ext3/VFAT等)

虚拟文件系统是linux内核中的一个软件抽象层,它一方面用于给用户空间的程序提供文件系统接口,另一方面还提供了内核中的一个抽象功能,它通过一些数据结构及其方法向实际的文件系统提供接口,实现不同文件系统在linux中共存。系统中所有文件系统不但依赖于VFS共存,同时也要依靠VFS协同工作

为了能支持各种文件系统,VFS定义了所有文件系统都必须支持基本的/概念上的接口和数据结构。例如,超级块/节点/文件操作函数入口等。换句话说,一个实际的文件系统要想被linux支持,就必须提供一个符合VFS标准的接口,这样才能与VFS协同工作。VFS不是实际的操作系统,它只是一种转换机制,仅存在于内存中,不存在于任何外存空间。下图所示为VFS在内核中与实际的文件系统的协同关系

本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1171702

【Linux技术】磁盘的物理组织,深入理解文件系统的更多相关文章

  1. Linux查看磁盘剩余空间

    Linux查看磁盘剩余空间 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ df 文件系统 1K-blocks 已用 可用 已用% 挂载点 /dev/sda8 ...

  2. linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例

    转自:truemylife.linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例 基本概念: 磁盘.分区.物理卷[物理部分] 卷组[中间部分] 逻辑卷.文件系统[虚拟化后可控制部分] 磁 ...

  3. Linux如何定位文件在磁盘的物理位置

    我在学习研究Linux内核结构的时候,思考过一个问题:Linux如何定位文件在磁盘的物理位置每个文件都有一个inode,inode在内核代码中的数据结构如下: 1 struct ext4_inode ...

  4. centos Linux下磁盘管理 parted,df ,du,fdisk,partprobe,mkfs.ext4,mount,/etc/fstab,fsck,e2fsck,mk2efs,tmpfs ,nr_inodes, LVM,传统方式扩容文件系统 第七节课

    centos Linux下磁盘管理   parted,df ,du,fdisk,partprobe,mkfs.ext4,mount,/etc/fstab,fsck,e2fsck,mk2efs,tmpf ...

  5. Linux的磁盘管理和文件系统

    一.磁盘结构 1.1.硬盘的物理结构 盘头:硬盘有多个盘片,每盘片2面 磁头:每面一个磁头 1.2.硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位 磁道 ...

  6. Linux磁盘分区,目录树,文件系统的关系(转)

    研究了很久,自始至终不能够从三者的区别和联系中找到一个大脑与这些概念之间合适的相处方式.对于基本概念和理论理解不到位,在工作之中会走很多弯路和犯很多错误.今天花一天的时间,终于对三者的区别和联系有了更 ...

  7. Linux系统磁盘与分区管理(7)

    Linux最传统的磁盘文件系统(filesystem)使用的是EXT4格式,所以要了解文件系统就得要由认识EXT4开始,而文件系统是创建在硬盘上面的,因此我们得了解硬盘的物理组成才行,下面我们回来详细 ...

  8. Linux下磁盘挂载

    公司硬盘不够用了,新买了一个存储,需要挂载到现在的系统上.前期的步骤就不说了,运维全部搞定,无非是硬件和网络那一套,这里只说分配到本人后在Linux下如何挂载. 具体步骤如下: 1.查看是否已经分配 ...

  9. 阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例

    阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例 阿里云技术支持:完颜镇江 问题现象: 磁盘空间满了,第一想到的就是删除无用的服务日志或者升级数据盘. 通常是使用du –sh去分析目录 ...

随机推荐

  1. h2database轻量级数据库

    h2和derby一样,都是轻量级数据库,h2比derby还要轻巧,核心jar包不到1M.性能效率等等方面都非常好(前提不是高并发,高数据量) 轻量级数据库的应用出其不意,可以完成很多以前常规开发中无法 ...

  2. httpclient获取响应实体和信息的封装方法(解耦更新)

    转自:https://blog.csdn.net/fhaohaizi/article/details/77850302 2018年07月19日更新,主要是解耦之后方法很多地方发生了变化,httpcli ...

  3. Comparable 与 Comparator

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...

  4. Java交替打印两个字符串

    一.使用volatile关键字 public class Main { volatile int x = 0; Main() { new Thread(() -> { while (x < ...

  5. DHCP工作过程的六个主要步骤

    对于学习DHCP来说,很重要的一部分就是对于DHCP工作过程的理解. DHCP分为两个部分:一个是服务器端,另一个是客户端. 所有客户机的IP地址设定资料都由DHCP服务器集中管理,并负责处理客户端的 ...

  6. 纯CSS兑现侧边栏/分栏高度自动相等(转)

    这里直接介绍我认为的最佳的侧边栏/分栏高度自动相等方法.核心的CSS代码如下(数值不固定): margin-bottom:-3000px; padding-bottom:3000px; 再配合父标签的 ...

  7. python练习笔记——面试题 F(n) = F(n-1)+F(n-2)

    已知:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) 其中(n≥2,n∈N*) 求:求10以内的函数值分别是多少 方法一: def F(n): if n < ...

  8. mysql FullText全文索引的问题

    今天有同学问题,搜索ip的时候怎样能把 select ip from tabelx where ip like '%192.168.0.1%' 这种句子的性能优化. 的确,使用 like %x 的方式 ...

  9. linux中合并多个文件内容到一个文件的例子

    尊敬的用户您好,从即日起 导入 及 导出 功能已经下线,请到阿里云官方数据库管理平台 iDB Cloud 使用该功能! 继续在 iDB Cloud 中发现导出的数据库文件是按照每个表生成的SQL文件, ...

  10. Python 文件 flush() 方法

    描述 Python 文件 flush() 方法是用来把文件从内存buffer(缓冲区)中强制刷新到硬盘中,同时清空缓冲区. 一般情况下,文件关闭后会自动刷新到硬盘中,但有时你需要在关闭前刷新到硬盘中, ...