Linux关于磁盘管理的二三事(一)
2017-01-28 23:05
330 查看
如果文件和目录的管理是在计算机存储数据上做文章,那么磁盘管理就是在存储介质(即硬盘)上做文章了,不同规格的硬盘有着相同的物理特性,我们将数据存储的方式规则等做一个规范,就产生了文件系统的概念,磁盘管理的主要内容就是文件系统的管理。
机械手臂与磁头(用来读写盘片上的数据);
主轴马达,通过转动盘片使得磁头可以读写数据;
扇区组成一个元,就是柱面(Cylinder),柱面是分区(partition)的最小单位;
第一个扇区里存储硬盘主引导记录(Masterbootrecord,MBR)及分区表(partition table),其中MBR占446bytes,partition table占64bytes;
Linux系统中/dev/sd[a-p][1-15]:SCSI,SATA,USB,Flash等接口的磁盘文件名;
Linux系统中/dev/hd[a-d][1-63]:IDE接口的磁盘文件名。
- 主分区与扩展分区最多有4个(硬盘的限制);
- 扩展分区最多只能有1个(操作系统的限制);
- 逻辑分区是由扩展分区持续分出来的分区;
- 逻辑分区的数量依操作系统而不同,linux系统中,IDE硬盘最多有59个逻辑分区,SATA硬盘则有11个逻辑分区。
标准的Linux文件系统Ext2就是使用这种inode为基础的文件系统。文件系统一开始就将inode与block规划好了,除非重新格式化(或者利用resize2fs等命令更改文件系统大小),否则inode与block固定后就不再变动。Ext2系统区分多个块组(block group),每个块组都有独立的inode/block/superblock系统。Ext2文件系统示意图如下:
在整体的规划当中,文件系统最前面有一个启动扇区(boot sector),用来安装引导装载程序。
下面对Ext2文件系统的各个部分分别总结。
- block与inode的总量
- 未使用与已使用的block和inode的数量
- block和inode的大小
- 文件系统的挂载时间,最近一次写入数据的时间,最近一次检验磁盘(fsck)的时间等文件系统的相关信息
- 一个validbit数值,用来判断此文件系统是否被挂载,1表示挂载,0表示未挂载
- 该文件的访问权限(rwx)
- 该文件的所有者与群组(owner/group)
- 该文件的大小
- 该文件创建或状态改变的时间(ctime)
- 最近一次的读取时间(atime)
- 最近修改的时间(mtime)
- 定义文件特性的标志(SetUID等)
- 该文件真正内容的指向(pointer)
inode的数量和大小在格式化时就已经固定了:
- 每个inode的大小为128bytes;
- 每个文件只会占用一个inode;
- 文件系统能够创建的文件数量与inode的数量有关;
- 系统读取文件时需要找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容。
inode中需要记录block的号码,当文件比较大时,所占block会非常多,inode的大小是固定的,为了能记录所有的block号码,采用的策略是将inode记录block号码的区域定义为12个直接、1个间接、1个双间接和1个三间接记录区。
- 目录
对于一个目录,ext2分配一个inode与至少一块block给该目录,其中inode记录该目录的相关权限与属性以及分配到的block号码,block中记录这个目录下的文件名与该文件占用的inode的号码,当目录中的文件数目较多时,会有多一个block来记录相关的数据。
- 文件
对于一个文件,ext2分配一个inode与相对于该文件大小的block数量给该文件,inode中记录该文件的权限与属性以及block号码,block记录实际存储的数据。
- 目录树的读取
inode本身并不记录文件名,文件名的记录是在目录的block中,所以当读取一个文件时,由根目录开始读起,通过inode中的权限和属性判断用户是否可以进入该目录,然后通过block查找下一级文件或目录名及inode,依次直到读到正确的文件或者目录。
- 新增一个文件时,ext2文件系统的行为是:
1. 确定添加文件所在的目录是否具有w与x的权限,有的话才能添加;
2. 根据inode bitmap找到空的inode,并将文件的权限和属性写入;
3. 根据block bitmap找到空的block,并将实际的数据写入block中,同时更新inode中block的号码;
4. 更新inode bitmap、block bitmap和superblock。
硬盘组成
圆形的盘片(主要记录数据部分);机械手臂与磁头(用来读写盘片上的数据);
主轴马达,通过转动盘片使得磁头可以读写数据;
盘片特性
扇区(Sector)为最小的物理存储单位,每个扇区为512bytes;扇区组成一个元,就是柱面(Cylinder),柱面是分区(partition)的最小单位;
第一个扇区里存储硬盘主引导记录(Masterbootrecord,MBR)及分区表(partition table),其中MBR占446bytes,partition table占64bytes;
Linux系统中/dev/sd[a-p][1-15]:SCSI,SATA,USB,Flash等接口的磁盘文件名;
Linux系统中/dev/hd[a-d][1-63]:IDE接口的磁盘文件名。
磁盘分区
分区表的大小只有64bytes,只能记录4条分区的记录,这4条记录成为主(primary)分区或扩展(extended)分区,其中扩展分区还可以再分出逻辑(logical)分区,而能被格式化的则仅有分区与逻辑分区而已。关于分区的一些限制如下:- 主分区与扩展分区最多有4个(硬盘的限制);
- 扩展分区最多只能有1个(操作系统的限制);
- 逻辑分区是由扩展分区持续分出来的分区;
- 逻辑分区的数量依操作系统而不同,linux系统中,IDE硬盘最多有59个逻辑分区,SATA硬盘则有11个逻辑分区。
挂载
将文件系统与目录树结合的操作称之为挂载,挂载点一定得是目录,该目录为进入该文件系统的入口,文件系统只有挂载到目录树的某个目录后才能够使用。Ext2文件系统
Linux操作系统中的文件除了数据部分之外还有文件权限和文件属性等内容,文件系统将这两部分的数据分别存放在不同的块,权限与属性放置到inode中,实际数据则放置到data block块中,另外还有一个超级块(superblock)记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。标准的Linux文件系统Ext2就是使用这种inode为基础的文件系统。文件系统一开始就将inode与block规划好了,除非重新格式化(或者利用resize2fs等命令更改文件系统大小),否则inode与block固定后就不再变动。Ext2系统区分多个块组(block group),每个块组都有独立的inode/block/superblock系统。Ext2文件系统示意图如下:
在整体的规划当中,文件系统最前面有一个启动扇区(boot sector),用来安装引导装载程序。
下面对Ext2文件系统的各个部分分别总结。
Superblock 超级块
记录整个文件系统相关信息的地方,包含:- block与inode的总量
- 未使用与已使用的block和inode的数量
- block和inode的大小
- 文件系统的挂载时间,最近一次写入数据的时间,最近一次检验磁盘(fsck)的时间等文件系统的相关信息
- 一个validbit数值,用来判断此文件系统是否被挂载,1表示挂载,0表示未挂载
文件系统描述 File system Description
描述每个block group的开始与结束的block号码,以及说明每个区段(superblock,bitmap,inodemap,data block)分别介于哪个block号码之间。块对照表 block bitmap
存储文件时将数据放在block中,快对照表中标识了哪些block是空的即未使用的以及哪些是非空的即使用了的。inode对照表 inode bitmap
与block bitmap类似,inode对照表中记录的是inode的使用情况。inode table
inode中记录的内容为:- 该文件的访问权限(rwx)
- 该文件的所有者与群组(owner/group)
- 该文件的大小
- 该文件创建或状态改变的时间(ctime)
- 最近一次的读取时间(atime)
- 最近修改的时间(mtime)
- 定义文件特性的标志(SetUID等)
- 该文件真正内容的指向(pointer)
inode的数量和大小在格式化时就已经固定了:
- 每个inode的大小为128bytes;
- 每个文件只会占用一个inode;
- 文件系统能够创建的文件数量与inode的数量有关;
- 系统读取文件时需要找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容。
inode中需要记录block的号码,当文件比较大时,所占block会非常多,inode的大小是固定的,为了能记录所有的block号码,采用的策略是将inode记录block号码的区域定义为12个直接、1个间接、1个双间接和1个三间接记录区。
data block 数据块
存放文件数据部分的地方,所支持的大小有1KB、2KB和4KB三种,在格式化时固定,并且每个block都有编号,以便inode的记录。每个block中只能存放一个文件的数据,当文件大小大于block的大小,该文件占用多个block,否则,存放该文件的block的剩余空间不能再使用了(造成空间的浪费)。Ext2数据记录与读取
inode与block的作用已经了解了,但目录与文件是有区别的,所以先了解二者实际的inode/block存储内容。- 目录
对于一个目录,ext2分配一个inode与至少一块block给该目录,其中inode记录该目录的相关权限与属性以及分配到的block号码,block中记录这个目录下的文件名与该文件占用的inode的号码,当目录中的文件数目较多时,会有多一个block来记录相关的数据。
- 文件
对于一个文件,ext2分配一个inode与相对于该文件大小的block数量给该文件,inode中记录该文件的权限与属性以及block号码,block记录实际存储的数据。
- 目录树的读取
inode本身并不记录文件名,文件名的记录是在目录的block中,所以当读取一个文件时,由根目录开始读起,通过inode中的权限和属性判断用户是否可以进入该目录,然后通过block查找下一级文件或目录名及inode,依次直到读到正确的文件或者目录。
- 新增一个文件时,ext2文件系统的行为是:
1. 确定添加文件所在的目录是否具有w与x的权限,有的话才能添加;
2. 根据inode bitmap找到空的inode,并将文件的权限和属性写入;
3. 根据block bitmap找到空的block,并将实际的数据写入block中,同时更新inode中block的号码;
4. 更新inode bitmap、block bitmap和superblock。
相关文章推荐
- Linux关于bash的二三事(1)
- Linux关于bash的二三事(3)
- 关于linux的磁盘管理
- Linux关于bash的二三事(2)
- Linux关于磁盘管理的二三事(二)
- 新闻组上看到一篇关于linux内核编译的文章,留待日后参考。
- 关于LINUX下怎么加载FAT分区
- 关于LINUX与M$ WINDOWS的一点想法
- linux关于VI的用法
- 关于linux下rcp的配置
- 关于Linux下的线程
- 关于subversion+apache集成linux用户验证[摘]
- 转载:关于linux图形界面的基本知识
- 关于linux信号的blog
- 操作系统中关于信号量操作的代码示例(Linux + windows)
- 关于linux做nat出现“table full”的终极解决办法。
- 关于在linux平台上使用java.awt.*包的设置
- 关于Linux下的帧缓冲介绍
- [收藏整理] 关于 red enterprise linux as 3 的讨论
- 关于价格与价值的悖论--兼评“Linux免费说”