磁盘级别概念

    这里讲的主要是网上所谓的老式磁盘,它是由一个个盘片组成的,我们先从个盘片结构讲起。如图1所示,图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。图2展示了由一个个盘片组成的磁盘立体结构,一个盘片上下两面都是可读写的,图中蓝色部分叫柱面(cylinder)。
                

简简单介绍了磁盘结构后,下面我们将对磁盘的参数进行讲解。磁盘的常见参数如下:

  • 磁头(head)
  • 磁道(track)
  • 柱面(cylinder)
  • 扇区(sector)
  • 圆盘(platter)

图2中磁盘是一个 3个圆盘6个磁头,7个柱面(每个盘片7个磁道) 的磁盘,图2中每条磁道有12个扇区,所以此磁盘的容量为6*7*12*512字节。

即:

     存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

下面讲一下现代磁盘,在老式磁盘中,尽管磁道周长不同,但每个磁道上的扇区数是相等的,越往圆心扇区弧段越短,但其存储密度越高。不过这种方式显然比较浪费空间,因此现代磁盘则改为等密度结构,这意味着外围磁道上的扇区数量要大于内圈的磁道,寻址方式也改为以扇区为单位的线性寻址。为了兼容老式的3D寻址方式,现代磁盘控制器中都有一个地址翻译器将 3D 寻址参数翻译为线性参数。

    扇区(sector):最小的物理存储单位,每个扇区512bytes
    柱面(cylinder):扇区组成的一个圆,柱面是分区(partition)的最小单位
    第一个扇区:包含开机启动记录(MBR,Master boot record)以及分区表(partition table),其中MBR为446bytes,partition table为64byte
    因为分区表大小只有64byte,所以只能存储4个分区信息,这也是为什么一块硬盘只能分为四个主分区,或者将其中一个作为扩展分区,在其中再划分逻辑分区。
    
多重引导
    
    图中蓝色为MBR,黄色为每个分区的启动扇区(boot sector)
  • 每个分区都拥有自己的启动扇区(boot sector)
  • 图中的系统分区为第一及第二分区
  • 实际可开机的核心文件是放置到各分区内的!
  • loader 只会认识自己的系统分区内的可开机核心文件,以及其他 loader 而已;
  • loader 可直接指向或者是间接将管理权转交给另一个管理程序。
分区概念
    分区的最小单位是柱面,柱面=每个磁道的扇区数*扇区大小*磁头数,所以分区不可能是准确的大小,会有一个柱面大小的偏差。
    分区示意图如下
           
    一块硬盘最开始是MBR和分区表,并且每个分区都有各自的boot sector。
 
文件系统概念
    文件系统定义了以什么样的结构存储数据。每个分区可以是不同的文件系统,文件系统的划分是针对分区的。
    Linux文件系统ext2主要分为三种类型的结构,superblock,inode,block。
 
    superblock(超级块)
    superblock记录了整个filesystem相关信息的地方,没有superblock,就没有filesystem
  • block与inode的总量
  • 未使用与已使用的inode/block数量
  • block与inode的大小
  • filesystem挂载时间,最近一次写入数据时间,最近一次检验磁盘时间等
  • 一个valid bit数值,若被挂载为0,否则为1
    inode
  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  • 链接数,即有多少文件名指向这个inode
  • 文件数据block的位置
    block
    大小一般为1k,2k,4k,是真实存储数据内容的区域。
    下图为他们三者的关系,其中boot block大小为1k,super block大小为1k。
另外还有其他部分
Filesystem Description (文件系统描述说明)
这个区段可以描述每个 block group 的开始和结束的block号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别位于哪一个 block 号码之间。这部分也能够用 dumpe2fs 来观察。
block bitmap (区块对照表)
如果你想要新增文件时总会用到 block 吧!那你要使用那个 block 来记录呢?当然是选择『空的
block 』来记录新文件的数据。 那你怎么知道那个 block 是空的?这就得要透过 block bitmap 了。从 block bitmap 当中可以知道哪些 block 是空癿,因此我们的系统就能够迅速的找到可使用的空间来处置文件。
inode bitmap (inode 对照表)
这个其实不 block bitmap 是类似的功能,叧是 block bitmap 记录的是使用不未使用的block 号码,至于inode bitmap 则是记录使用不未使用的inode 号码啰! 
 
目录和文件的存储方式
目录存储方式
当我们在 Linux 下癿 ext2 文件系统建立一个目彔时, ext2 会分配一个 inode 不至少一块 block 给该目录。其中,inode 记录该目录的相关权限和属性,并可记录分配到的那块 block 号码; 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。
文件存储方式
文件存储也是分配一个inode,并且这个inode中有12个直接,一个间接,一个双间接,一个三间接记录区
 
文件检索过程
比如打开/var/test文件过程
    首先找到/目录,然后找到其对应block下面的目录名var对应的inode
    在var的inode中找到对应的block,在block中找到文件test对应的inode
    在test的inode中找到对应的block,即为test文件的内容。
如下图所示
 
 
参考文章:
鸟哥的linux私房菜

Linux磁盘与文件系统概念理解的更多相关文章

  1. Linux磁盘和文件系统简介

    Linux磁盘和文件系统简介 1.文件系统:存储设备上存储数据的方式方法 磁盘主要由盘片.机械手臂.磁头和主轴马达组成,而数据的写入实际是写在盘片上,磁盘的最小存储单位为扇区,每个扇区为512字节,扇 ...

  2. linux磁盘与文件系统的管理

    本文涉及命令:dumpe2fs.df.du.fdisk.mkfs.mke2fs.fsck.badblocks.mount.umount.e2label.tune2fs.hdparm.parted 概念 ...

  3. Linux 磁盘与文件系统(EXT2)简介

    Linux 中,一切(或几乎一切)都是文件. 一.Linux 磁盘分区与文件系统 1.1 磁盘分区 磁盘的分区主要分为主分区和扩展分区 1)主分区:总共最多只能有四个主分区: 2)扩展分区:只能有一个 ...

  4. Linux磁盘和文件系统知识总结

    硬盘操作 为什么要给硬盘分区? 如果你需要在一块硬盘上用到多个文件系统,那么你就需要对硬盘进行分区,以便用不同的分区支持不同的文件系统.(但一个硬盘只能有一个分区表!)反过来说,如果你整块硬盘都用同样 ...

  5. Linux磁盘及文件系统(三)Linux文件系统

    一.文件系统的组成 Linux常见的文件系统类型有ReiserFS,ext2,ext3,ext4,vfat,XFS等,文件系统是对一个存储设备上数据和元数据进行组织的机制.他的最终目的是把大量数据有组 ...

  6. 鸟哥的私房菜:Linux磁盘与文件系统原理

    1 硬盘物理组成     //原理 磁头负责读写     磁道(硬盘同半径的一圈) 磁柱(所有盘磁道叠加起来的柱)     扇区(2条半径将磁道分开的一个扇形区域,是磁盘的最小存储单位) ------ ...

  7. Linux磁盘和文件系统扩容彻底研究

    1.物理卷: LVM 逻辑卷的底层物理存储单元是一个块设备,比如一个分区或整个磁盘.要在 LVM 逻辑卷中使用该设备,则必须将该设备初始化为物理卷(PV). 2.卷组:物理卷合并为卷组(VG).这样就 ...

  8. Linux磁盘与文件系统原理

    这一章主要是原理性的,介绍了Linux文件系统的运作原理.涉及到很多计算机组成和操作系统的原理性知识,这部分知识很多都忘了,在这里复习下.    我们只看本章第1,2节.--------------- ...

  9. linux磁盘以及文件系统

    df 查看磁盘总容量 -i 显示inodes号 -h 使用合适的单位显示磁盘大小 -m 以M为单位显示 -k 以K为单位显示 默认K显示 du 用来查看某个目录或者文件所占空间大小 参数:-abckm ...

随机推荐

  1. 你应该知道的基础 Git 命令

    我们在早先一篇文章中已经快速介绍过 Vi 速查表了.在这篇文章里,我们将会介绍开始使用 Git 时所需要的基础命令. Git Git 是一个分布式版本控制系统,它被用在大量开源项目中.它是在 2005 ...

  2. sql中的or的用法说明

    数据库里a  c 0  10  20  31  41  51  6这样执行完这语句之后查出来有几条语句? 答案是3条 而我想要的是a为0或1并且c为3的数据显示 应该只有1条的 所以应该这样写 Sql ...

  3. Objective-C学习笔记

    . 链接:Objective-C学习笔记 (pdf版) .

  4. java操作spark1.2.0

    虽然推荐的是scala,但是还是试一下 package org.admln.java7OperateSpark; import java.util.Arrays; import java.util.L ...

  5. FMDB 二次封装工具类,让你快速学会封装,集成数据库

    来源:StrivEver 链接:http://www.jianshu.com/p/4c77aee0b41c 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线 ...

  6. EMS电子面单接口对接使用-免费版

    快递鸟电子面单接口,可一次对接15家快递公司, 无需和每一家快递公司做对接.支持快递有四通一达.顺丰.EMS.宅急送.德邦.优速等15家快递公司,对顺丰有电子面单服务需求的可以选择顺丰自有的电子面单或 ...

  7. C小加 之 随机数

    描述ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(0<N≤100),对于其中重复的数字,只保留一个,把其余相 ...

  8. [Java] SSH框架笔记_SSH三大框架的工作原理及流程

    Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  9. 【开源项目12】Retrofit – Java(Android) 的REST 接口封装类库

    Retrofit官网:http://square.github.io/retrofit/ Retrofit 和Java领域的ORM概念类似, ORM把结构化数据转换为Java对象,而Retrofit ...

  10. Float精度 在JS的解决方法

    最近在做一个工资核算的系统,所有的运算全部在前台进行,因此用了的是JS来做. 做完以后,经手工核算,发现一个奇怪的问题.就是JS算出来的结果跟用计算器算出来的结果有差距. 想了很久,也没有想出问题出在 ...