硬盘,拆过机的同志应该知道就是一块小刚体嘛。拆过主机硬盘和笔记本硬盘也应该知道不一样的硬盘的接口是不同的,主机的硬盘通常会有一条线链接到主板而笔记本的硬盘直接有插槽。这个概念只是为了引发硬盘有不一样的种类存在,当咱们在linux系统中输出命令fdisk -l的时候,大体会有设备名称等信息。其中有可能有/dev/sd[a-p][1-15]或者/dev/hd[a-d][1-63]等等,前者表示SCSI,SATA,USB等接口的磁盘文件名,后者表示IDE接口磁盘文件名(这个比较老了)。html
磁盘会有多个概念,为了方便理解,先设定一个场景,假定咱们在吃鸡游戏的地图上,这个地图只有一个圆柱大楼,每层楼都是一个环形操场跑道。node
这是个人电脑的磁盘分布,一个扇区是512bytes,一次io读取是8个扇区能读到4KB。总的容量很明显是由255盘面*n柱面*m扇区(512bytes)构成的。linux
磁盘是如何读取数据的呢,咱们知道买磁盘是有转速指标的,因此咱们能够设想磁头不动当靠旋转就能够得到某柱面的全部磁道的数据。其实磁盘IO步骤就是如此。git
时间花费,1w转的磁盘旋转一圈是不到6ms,存取也就是零点几毫秒否则磁盘都转过去了是否是还要等一圈再来读取。。因此咱们能够猜到寻道时间是最长的大概是3-15ms。github
所以进行磁盘分区的时候,咱们划分标准是以柱面做为分区partition的最小单位。否则按照盘面来分区,那寻道时间的比重会增长天然增长了IO时间。能够看到上图,按照扇区连续性进行了分区。数据库
咱们应该清楚,如今只是分区完成,每个区能够有本身独立的文件系统进行管理它所分配到的区域。有不一样的文件系统体制,咱们假定分配到的区域每一扇区给个序号从1到100。对于FAT格式,一个文件表示形式是链表的样式,多是8->6->7->67->5等等,对于ext2格式,它将1-4做为一个inode的节点表明了一个文件,存储了这个文件的实际数据存储的block序号(5,6,7,8,67),咱们成为索引式文件系统。缓存
以上说的概念能够这么理解,地球就是一块硬盘,每个国家就是一个分区,每个国家本身的文件系统格式能够是资本主义也能够是社会主义。spa
虽然咱们标题说的是Ext2文件系统,可是图片放的是Ext4文件系统,区别只是GDT而已,为了跟进时代加进来无妨。操作系统
先谈谈该图的整体概念,Entire disk=MBR+Partition table+Partitions. Partition=boot sector+block group. block group=super lock+Group Descriptors+Reserved GDT Blocks+Data Block Bitmap+inode Bitmap+inode Table+Data Blocks.设计
其实这里设计到了启动操做系统的过程,这个之后再详细描述。大概思路是当咱们通过了通电自检等进入BIOS到指定到磁盘启动,第一扇区是MBR和Partition table,分区表只有64B,咱们知道磁盘分区最低单位是柱面,柱面范围是0-255,八个bit就能够表示,因此16B表示一个分区范围。一个磁盘理论上只能四个分区,因此为了拓展容许有3个主分区和一个扩展分区,这个扩展分区能够拥有多个逻辑分区。那么咱们分好的每个分区就是一个文件系统了。每个分区都预留的boot sector是载入操做系统内核的引导代码,它的副本将放在MBR中,固然说双系统你可能更容易理解,每一个分区能够指定一个系统,可是只有一个boot loader能放在MBR中,其中linux的boot loader能够释放权限加载别的文件系统的boot sector从而加载双系统了。
并且实际并非每个Block Group都是如此排布,太多super block说实话浪费空间,冗余的超级块和组描述符的副本只保留在组号为 0 或组号为 3,5,7 的倍数的块组中。同时还会有纯粹的数据存储块,只有后四者。
G0是起始的primary superblock,G1是存有super block,G2是纯粹数据存储。
这是block块的一种线性目录结构,它表述了存储的特殊数据表示格式,例如是目录文件的block,它将目录下的文件名及其对应的inode号记录在目录的block中。
咱们知道目录也是一个文件,一个文件的文件名由目录文件存储,文件系统新建一个目录时会分配一个inode与至少一个block给该目录,inode记录目录的相关权限和属性,分配到的block记录目录下的文件名和该文件名占用的inode号码信息。因此indoe自己不记录文件名,文件名记录在目录的block中,所以新增/删除/重命名文件名与目录的w权限有关。那么由于文件名记录在目录的block中,所以当咱们要读某一个文件,必须通过目录的inode与block而后才能找到哪一个待读取的文件的inode才能读到block数据。
目录树是由根目录读起,系统经过挂载点的挂载信息就能够找到挂载点的inode号码,一般一个文件系统的最顶层indoe号码是2(1是指向不占空间的proc目录),而后经过根目录一层层往下读。
如图咱们访问/etc/passwd须要经过/+rx权限(r是读,x是进入该目录)而后一步步找到下一个inode节点。
参考