跳到主要内容

磁盘

理解磁盘的物理构成

1.深刻认识,磁头(Head) , 磁道(Track) ,扇区(Sector)512B,柱面(Cylinder)

扇区在硬盘中的排列顺序是由规则的间隔排列,计算当前硬盘的总容量为 512CHS(B) 

2. 对分区的认识:一个磁盘的分区其实就是给系统指明系统是从那个柱面到哪一个柱面

然后系统会在这2个柱面之间的存储空间来存储数据

3. MBR (Master boot recorder)

前 446 KB 为 系统的 boot loader 用于指向开机程序管理

然后 64KB为分区表(Partition table)硬盘中分区有多少以及每一分区的大小都记在其中,每个分区表项长16个字节,

第三部分是magic number,占2个字节,固定为55AA。如果该标志错误系统就不能启动

二理解Linux下的文件系统

1.什么是block

用于存储数据,Block 的大小一定为 sector 的 2 的次方倍数,由于扇区单元存储较小,故我们采取将多个扇区合并成一个区块,ext3允许的block大小为,1024b,2048,4096

提高存储效率,默认在分区就将制定block 的大小

2. 什么是Superblock ?

每个档案系统开始的位置的那个block就称为superblock,superblock的作用是储存像是档案系统的大小、空的和填满的区块,以及他各自的总数等等

3 . 什么是inode?

Inode记录某档案的相关属性,以及档案内容放置在哪一个 Block 之内,同时 inode 除了记录档案的属性外,同时还必须要具有

指向同时还必须要具有指向( pointer )的功能,一个 inode 的大小为 128 bytes

三linux 目录与档案的读取过程

· 目录∶当我们在 Linux 下的 ext2 档案系统建立一个目录时, ext2 会分配一个 inode 与至少一块 Block 给该目录。其中,inode 记录该目录的相关属性,并指向分配到的那块 Block ;而Block 则是记录在这个目录下的相关连的档案(或目录)的关连性!

· 档案∶当我们在Linux下的ext2建立一个一般档案时,ext2 会分配至少一个 inode 与相对于该档案大小的 Block 数量给该档案。

例如∶假设我的一个 Block 为 4 Kbytes ,而我要建立一个 100 KBytes 的档案,那么 linux 将分配一个 inode 与 25 个 Block 来储存该档案!

要注意的是inode 至于档名则是记录在目录所属的 block 区域! 那么档案与目录的关系又是如何呢?就如同上面的目录提到的,

档案的相关连结会记录在目录的 block 资料区域, 所以当我们要读取一个档案的内容时,我们的 Linux 会先由根目录 / 取得该档案的上层目录所在 inode,再由该目录所记录的档案关连性 (在该目录所属的 block 区域) 取得该档案的 inode , 最后在经由 inode 内提供的 block 指向,

而取得最终的档案内容。我们以 /etc/crontab 这个档案的读取为例, 他的内容资料是这样取得的:

如图 indode

一块 partition 在 ext2 底下会被格式化为 inode table 与 block area 两个区域, 所以在图三里面,我们将 partition 以长条的方式来示意,

会比较容易理解的啦!而读取 /etc/crontab 的流程为∶ 

  1. 作业系统根据根目录( / )的相关资料可取得 /etc 这个目录所在的 inode ,

并前往读取 /etc 这个目录的所有相关属性; 

  1. 根据 /etc 的 inode 的资料,可以取得 /etc 这个目录底下所有档案的关连资料是放置在哪一个 Block 当中,并前往该 block 读取档案的关连性内容; 

  2. 由上个步骤的 Block 当中可以知道 crontab 这个档案的 inode 所在地,8. 并前往该 inode ; 

  3. 由上个步骤的 inode 当中, 可以取得 crontab 这个档案的所有属性,并且可前往由 inode 所指向的 Block 区域,顺利的取得 crontab 的档案内容。

Inode 里面的内容(常见的):

该档案的拥有者与群组(owner/group); 

该档案的存取模式(read/write/excute); 

该档案的类型(type); 

该档案建立或状态改变的时间(ctime)、最近一次的读取时间(atime)、最近修改的时间(mtime); 

该档案的容量; 

定义档案特性的旗标(flag),如 SetUID...; 

该档案真正内容的指向 (pointer);

  1. superblock的内容

                                 如图:superblock

    SuperBlock∶如前所述, Superblock 是记录整个 filesystem 相关资讯的地方,  没有 Superblock , 就没有这个 filesystem 了。他记录的资讯主要有∶

o block 与 inode 的总量; 

o 未使用与已使用的 inode / block 数量; 

o 一个 block 与一个 inode 的大小; 

o filesystem 的挂载时间、最近一次写入资料的时间、最近一次检验磁碟 (fsck) 的时间等档案系统的相关资讯; 

o 一个 valid bit 数值,若此档案系统已被挂载,则 valid bit 为 0,若未被挂载,o 则 valid bit 为 1 。

· Group Description∶纪录此 block 由由何处开始记录; 

· Block bitmap∶此处记录那个 block 有没有被使用; 

· Inode bitmap∶此处记录那个 inode 有没有被使用; 

· Inode table∶为每个 inode 资料存放区; 

· Data Blocks∶为每个 block 资料存放区。

· Log system 是ext3 独有的功能,记录了数据同步的日志

----------------------   关于 inode和superblock的总结  -----------------------

inode 的分配与block的存储问题

若我的block 规划为4KB,而我的一个inode 控制了2个block,既每次只能以8KB去存取,如果我现在的的档案只有1KB,那么系统也会分配一个inode给该档案用于存储,那么由上可知,我们分配的是1个inode控制2个block,那么将会有7KB浪费

inode 的分配与存储的容量问题

在我们系统建立分区的时候(format)就已经自动设定好固定的inode和block数量

若 block size =1024B 最大容量 16GB (针对单一档案)

若 block size =4096B 最大容量 2TB  (针对单一档案)

若 block size =1024B 最大容量 2TB  (针对整个分区)

若 block size =4096B 最大容量 32TB (针对整个分区)

   (3)  inode 与block分配所占空间的计算

            我们设定 一个 block 的大小为 x(KB)

                     一个 inode 的控制为 y

                     一个 分区  总容量为 z (G)

Inode(个数)= 1024*1024z/xy

Inode(占用空间)= 1024*128z/xy (KB)

(4) 一个inode 的大小为128字节 在ext3 系统中允许的block为(B)1024 ,2048 ,4096

(5) 档案的存储过程

      1,根据 inode bitmap 和block bitmap 的信息,找到还未使用的inode和block,将档案和数据存储

      2,将刚才的被利用的 inode 和block 号码告知 superblock ,inode bitmap 和

          Block bitmap 等方便更新

(6) 什么叫数据的不同步?

         就是数据在存储的时候 进行到第一步,然而在进行第二步的时候突然中断!

         解决方法就是开机的时候进行磁盘检查,或者用我们的e2fsck 开机进行检查

         在ext3 系统中新增的日志系统,大大减小了检查的时间