首页 > 代码库 > 鸟哥的Linux学习笔记之三

鸟哥的Linux学习笔记之三

第8章 Linux磁盘与文件系统管理


1 磁盘组成与分区:
     磁盘由  圆的盘片、磁头、主轴马达 等组成。
     盘片主要有:
          扇区(Sector)为最小的物理存储单位,每个扇区512bytes
          将扇区组成一个圆,就是柱面(Cylinder),是分区的最小单位。
          第一个扇区最重要,里面有MBR(主引导记录)、分区表;MBR占446字节,分区表占64bytes。
          

          分区表最多支持4个分区,成为 主primary分区或者 扩展Extended分区。
                   扩展分区最多有一个;
                    逻辑分区是由扩展分区分出来的。
                    能被格式化的只有主分区和逻辑分区。

      
          各种接口的磁盘在Linux 中的文件名为:
               /dev/sd[a-p][1-15]:为SCSI、SATA、USB,Flash等接口设备
               /dev/hd[a-p][1-63]:为IDE接口的磁盘。

2. 文件系统特性
          分区完后之所以要进行格式化,是因为每种操作系统所设置的文件属性权限不相同,为了存放这些文件所需的数据,因此需要将分区进行进行格式化,以成为操作系统能够利用的文件格式。
          Linux正规文件系统为Ext2(Linux second Extended file system,Ext2fs),默认情况下,windows是不识别Linux的Ext2文件系统的。

          传统情况下,一个分区只能格式化为一个文件系统,也就是一个文件系统就是一个分区。但是新技术的发展,我们常通道LVM与软磁盘阵列(software raid)可以将一个分区格式化成多个文件系统个,,也能够将多个分区合成一个文件系统。目前我们已经不在说针对分区进行格式化了,而是一个可被挂在的数据为一个文件系统而不是一个分区。
          Linux较新的文件系统,除了文件数据外还有很多属性,如rwx与文件属性(owner、group、time parameter等)。文件系统通常会将这两部分数据分别存在不同的块,权限和属性放在inode中,数据放在data block中,另外还有个超级快(super block)会记录整个文件系统的整体信息,包括 inode 与 block的总量、使用量、剩余量等。
          super block:记录文件系统整体信息,包括inode与block的总量、使用量、剩余量、文件系统的格式与相关信息等。
          inode: 记录文件属性,一个文件占用一个inode,同时记录文件数据所在的block。
          block: 记录文件的数据,若文件太大,会占用多个block。
          这种访问方法称为: 索引式文件系统(indexed allocation)。

3 Linux的Ext2文件系统(inode)
     文件系统一开始就将inode与block规划好了,除非重新格式化或者利用resize2fs等命令更改文件系统大小,否则inode与block固定后就不再变动。
     在Ext2格式化时是将分区分为多个块组(block group),每个块组都有独立的inode/block/super block,文件系统最前面有一个启动扇区(boot sector),这个启动扇区用来安装引导装载程序的。
     每个块组有6个主要内容组成:
data block:
     在Ext2中支持的block大小有1kb、2kb、4kb三种,在格式化时block大小就固定了,且每个block都有编号,以方便inode的记录。block大小决定文件系统能支持的最大单一文件大小如下:
     
inodetable:
     inode记录的文件数据有以下几个:
          该文件的访问模式(rwx);
          文件所有者与组(owner、group);
          文件大小;
          文件创建或者状态改变的时间(ctime)
          最近一次读取时间(atime);
          最近修改时间(mtime);
          定义文件特性的标志flag,如SetUID等
          该文件真正执行的数据内容;
     
     inode的数量和大小在格式化时就已经确定了,
          每个inode大小均为128bytes;
          每个文件占有一个inode;
          文件系统能够创建的文件数量和inode的数量有关;
          系统读取文件时先找到对应的inode,分析inode所记录的权限与用户是否符合,若符合才能开始读取指向的block块。

     inode/block与文件大小的关系:
          inode结构如下:
inode有12个直接指向、1个间接、一个双间接和一个三间接记录区。
假如1k的block,每条block记录需要4bytes,因此1k的block可以记录256个block记录。

super block:
     记录的信息主要有:
          block与inode的总量;
          未使用与已使用inode、block的数量
          block与inode的大小(1k、2k、4k; 128bytes);
          文件系统的挂载时间、最近一次写入数据的时间、最近一次检查磁盘(fsck)的时间等文件系统相关信息;
          一个validbit数值,表示文件系统是否被挂载。

     一般来说,superblock大小为1024bytes。相关信息可以用dumpe2fs命令来查看。

文件系统描述(file system description):
     用来描述每个block group的开始与结束block 号码,以及每个区段的superblock inode block 分别位于哪个block之间;

block bitmap:
     用来记录那些block用过,那些block未用。

inode bitmap:
     记录inode的使用与未使用情况。

     dumpe2fs [-bh] 设备文件名
          -b:列出保留为坏道的部分
          -h:列出superblock的数据,不会列出其他的区段内容。

     df  :这个命令调出目前挂载设备

4. Ext2/Ext3文件访问与日志文件系统:
          一般来说,将inode table和data block成为数据区域,将其他区域成为metadata(中间区域)。
     日志文件系统:
          1:预备,当系统写入一个文件中,现在日志记录总记录够格文件准备要写入的信息。     
          2:实际写入:开始吸入文件权限和数据,开始更新meta data数据
          3: 结束:完成数据与meta data更新,在日志记录块当中完成该文件的记录。

     这样当断电等,系统只要检查日志记录块就知道那些文件出现问题,针对该问题再进行一致性检查。

5 Linux文件操作:
          当系统加载一个文件到内存中,如果该文件没有被改过,则在内存区段的文件数据会设置为clean;如果发生改过,此时内存中的数据会被设置成dirty,系统会不定时的将内存中设置为dirty的数据歇会磁盘,保持磁盘与内存数据的一致性。

          可以利用sync命令强制内存中dirty的文件写回到磁盘。




鸟哥的Linux学习笔记之三