Linux文件系统详解.docx
《Linux文件系统详解.docx》由会员分享,可在线阅读,更多相关《Linux文件系统详解.docx(74页珍藏版)》请在冰豆网上搜索。
Linux文件系统详解
Linux文件系统详解
系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不能太小,太大会造成磁盘容量的浪费,太小则会产生档案无法储存的困扰。
此外,我们在前面几章谈到的档案权限与属性中,这些权限与属性分别记录在文件系统的那个区块内?
这就得要谈到filesystem中的inode与block了。
在本章我们的重点在于如何制作文件系统,包括分割、格式化与挂载等,是很重要的一个章节喔!
1认识EXT2文件系统
Linux最传统的磁盘文件系统(filesystem)使用的是EXT2这个啦!
所以要了解文件系统就得要由认识EXT2开始!
而文件系统是建立在硬盘上面的,因此我们得了解硬盘的物理组成才行。
磁盘物理组成的部分我们在第零章谈过了,至于磁盘分区则在第三章谈过了,所以底下只会很快的复习这两部份。
重点在于inode,block还有superblock等文件系统的基本部分喔!
1.1硬盘组成与分割的复习
由于各项磁盘的物理组成我们在第零章里面就介绍过,同时第三章也谈过分割的概念了,所以这个小节我们就拿之前的重点出来介绍就好了!
详细的信息请您回去那两章自行复习喔!
^_^。
好了,首先说明一下磁盘的物理组成,整颗磁盘的组成主要有:
1)圆形的磁盘盘(主要记录数据的部分);
2)机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据);
3)主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据。
从上面我们知道数据储存与读取的重点在于磁盘盘,而磁盘盘上的物理组成则为(假设此磁盘为单盘片,磁盘盘图标请参考第三章图2.2.1的示意):
扇区(Sector)为最小的物理储存单位,每个扇区为512bytes;
将扇区组成一个圆,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小单位;
第一个扇区最重要,里面有:
(1)主要开机区(Masterbootrecord,MBR)及分割表(partitiontable),其中MBR占有446bytes,而partitiontable则占有64bytes。
各种接口的磁盘在Linux中的文件名分别为:
/dev/sd[a-p][1-15]:
为SCSI,SATA,USB,Flash随身碟等接口的磁盘文件名;
/dev/hd[a-d][1-63]:
为IDE接口的磁盘文件名;
复习完物理组成后,来复习一下磁盘分区吧!
所谓的磁盘分区指的是告诉操作系统【我这颗磁盘在此分割槽可以存取的区域是由A磁柱到B磁柱之间的区块】,如此一来操作系统就能够知道他可以在所指定的区块内进行档案资料的读/写/搜寻等动作了。
也就是说,磁盘分区意即指定分割槽的启始与结束磁柱就是了。
那么指定分割槽的磁柱范围是记录在哪里?
就是第一个扇区的分割表中啦!
但是因为分割表仅有64bytes而已,因此最多只能记录四笔分割槽的记录,这四笔记录我们称为主要(primary)或延伸(extended)分割槽,其中延伸分割槽还可以再分割出逻辑分割槽(logical),而能被格式化的则仅有主要分割与逻辑分割而已。
最后,我们再将第三章关于分割的定义拿出来说明一下啰:
4)主要分割与延伸分割最多可以有四笔(硬盘的限制)
5)延伸分割最多只能有一个(操作系统的限制)
6)逻辑分割是由延伸分割持续切割出来的分割槽;
7)能够被格式化后,作为数据存取的分割槽为主要分割与逻辑分割。
延伸分割无法格式化;
逻辑分割的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分割(5号到63号),SATA硬盘则有11个逻辑分割(5号到15号)。
1.2文件系统结构概述
我们都知道磁盘分区完毕后还需要进行格式化(format),之后操作系统才能够使用这个分割槽。
为什么需要进行【格式化】呢?
这是因为每种操作系统所设定的文件属性/权限并不相同,为了存放这些档案所需的数据,因此就需要将分割槽进行格式化,以成为操作系统能够利用的【文件系统格式(filesystem)】。
由此我们也能够知道,每种操作系统能够使用的文件系统并不相同。
举例来说,windows98以前的微软操作系统主要利用的文件系统是FAT(或FAT16),windows2000以后的版本有所谓的NTFS文件系统,至于Linux的正统文件系统则为Ext2(Linuxsecondextendedfilesystem,ext2fs)这一个。
此外,在默认的情况下,windows操作系统是不会认识Linux的Ext2的。
传统的磁盘与文件系统之应用中,一个分割槽就是只能够被格式化成为一个文件系统,所以我们可以说一个filesystem就是一个partition。
但是由于新技术的利用,例如我们常听到的LVM与软件磁盘阵列(softwareraid),这些技术可以将一个分割槽格式化为多个文件系统(例如LVM),也能够将多个分割槽合成一个文件系统(LVM,RAID)!
所以说,目前我们在格式化时已经不再说成针对partition来格式化了,通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分割槽喔!
那么文件系统是如何运作的呢?
这与操作系统的档案数据有关。
较新的操作系统的档案数据除了档案实际内容外,通常含有非常多的属性,例如Linux操作系统的档案权限(rwx)与文件属性(拥有者、群组、时间参数等)。
文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到datablock区块中。
另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。
每个inode与block都有编号,至于这三个数据的意义可以简略说明如下:
•superblock:
记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
•inode:
记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block号码;
•block:
实际记录档案的内容,若档案太大时,会占用多个block。
由于每个inode与block都有编号,而每个档案都会占用一个inode,inode内则有档案数据放置的block号码。
因此,我们可以知道的是,如果能够找到档案的inode的话,那么自然就会知道这个档案所放置数据的block号码,当然也就能够读出该档案的实际数据了。
这是个比较有效率的作法,因为如此一来我们的磁盘就能够在短时间内读取出全部的数据,读写的效能比较好啰。
我们将inode与block区块用图解来说明一下,如下图所示,文件系统先格式化出inode与block的区块,假设某一个档案的属性与权限数据是放置到inode4号(下图较小方格内),而这个inode记录了档案数据的实际放置点为2,7,13,15这四个block号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个block内容读出来!
那么数据的读取就如同下图中的箭头所指定的模样了。
图1.2.1、inode/block资料存取示意图
这种数据存取的方法我们称为索引式文件系统(indexedallocation)。
那有没有其他的惯用文件系统可以比较一下啊?
有的,那就是我们惯用的随身碟(闪存),随身碟使用的文件系统一般为FAT格式。
FAT这种格式的文件系统并没有inode存在,所以FAT没有办法将这个档案的所有block在一开始就读取出来。
每个block号码都记录在前一个block当中,他的读取方式有点像底下这样:
图1.2.2、FAT文件系统资料存取示意图
上图中我们假设档案的数据依序写入1->7->4->15号这四个block号码中,但这个文件系统没有办法一口气就知道四个block的号码,他得要一个一个的将block读出后,才会知道下一个block在何处。
如果同一个档案数据写入的block分散的太过厉害时,则我们的磁盘读取头将无法在磁盘转一圈就读到所有的数据,因此磁盘就会多转好几圈才能完整的读取到这个档案的内容!
常常会听到所谓的【碎片整理】吧?
需要碎片整理的原因就是档案写入的block太过于离散了,此时档案读取的效能将会变的很差所致。
这个时候可以透过碎片整理将同一个档案所属的blocks汇整在一起,这样数据的读取会比较容易啊!
想当然尔,FAT的文件系统需要三不五时的碎片整理一下,那么Ext2是否需要磁盘重整呢?
由于Ext2是索引式文件系统,基本上不太需要常常进行碎片整理的。
但是如果文件系统使用太久,常常删除/编辑/新增档案时,那么还是可能会造成档案数据太过于离散的问题,此时或许会需要进行重整一下的。
不过,老实说,鸟哥倒是没有在Linux操作系统上面进行过Ext2/Ext3文件系统的碎片整理说!
似乎不太需要啦!
^_^
2Linux的EXT2文件系统结构
在第六章当中我们介绍过Linux的档案除了原有的数据内容外,还含有非常多的权限与属性,这些权限与属性是为了保护每个用户所拥有数据的隐密性。
而前一小节我们知道filesystem里面可能含有的inode/block/superblock等。
为什么要谈这个呢?
因为标准的Linux文件系统Ext2就是使用这种inode为基础的文件系统啦!
而如同前一小节所说的,inode的内容在记录档案的权限与相关属性,至于block区块则是在记录档案的实际内容。
而且文件系统一开始就将inode与block规划好了,除非重新格式化(或者利用resize2fs等指令变更文件系统大小),否则inode与block固定后就不再变动。
但是如果仔细考虑一下,如果我的文件系统高达数百GB时,那么将所有的inode与block通通放置在一起将是很不智的决定,因为inode与block的数量太庞大,不容易管理。
为此之故,因此Ext2文件系统在格式化的时候基本上是区分为多个区块群组(blockgroup)的,每个区块群组都有独立的inode/block/superblock系统。
感觉上就好像我们在当兵时,一个营里面有分成数个连,每个连有自己的联络系统,但最终都向营部回报连上最正确的信息一般!
这样分成一群群的比较好管理啦!
整个来说,Ext2格式化后有点像底下这样:
图1.3.1、ext2文件系统示意图(注1)
在整体的规划当中,文件系统最前面有一个启动扇区(bootsector),这个启动扇区可以安装开机管理程序,这是个非常重要的设计,因为如此一来我们就能够将不同的开机管理程序安装到个别的文件系统最前端,而不用覆盖整颗硬盘唯一的MBR,这样也才能够制作出多重引导的环境啊!
至于每一个区块群组(blockgroup)的六个主要内容说明如后:
2.1datablock(资料区块)
datablock是用来放置档案内容数据地方,在Ext2文件系统中所支持的block大小有1K,2K及4K三种而已。
在格式化时block的大小就固定了,且每个block都有编号,以方便inode的记录啦。
不过要注意的是,由于block大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一档案容量并不相同。
因为block大小而产生的Ext2文件系统限制如下:
(注2)
Block大小
1KB
2KB
4KB
最大单一档案限制
16GB
256GB
2TB
最大文件系统总容量
2TB
8TB
16TB
你需要注意的是,虽然Ext2已经能够支持大于2GB以上的单一档案容量,不过某些应用程序依然使用旧的限制,也就是说,某些程序只能够捉到小于2GB以下的档案而已,这就跟文件系统无关了!
举例来说,鸟哥在环工方面的应用中有一套秀图软件称为PAVE(注3),这套软件就无法捉到鸟哥在数值模式仿真后产生的大于2GB以上的档案!
害的鸟哥常常还要重跑数值模