文件系统

文件系统是一个操作系统的重要组成部分,是操作系统在计算机硬盘存储和检索数据的逻辑方法。Dos/Windows系列操作系统中使用的文件系统有FAT12,FAT32,NTFS和WINFS;Linux中支持的文件系统有Ext2,Ext3,Minix,NTFS等

FAT32

Windows95 OSR2和Windows 98开始支持FAT32文件系统,它是对早期 DOS 的FAT16 文件系统的增强,由于文件系统的核心——文件分配表FAT由16位扩充为32位,所以称为FAT32文件系统。在一逻辑盘(硬盘的一分区)超过512兆字节时使用这种格式,会更高效地存储数据,减少硬盘空间的浪费,一般还会使程序运行速度加快,且使用的计算机系统资源更少,因此是使用大容量硬盘存储文件的极有效的系统。

(1)FAT32文件系统将逻辑盘的空间划分为三部分,依次是引导区(BOOT区)、文件分配表区(FAT区)、数据区(DATA区)。引导区和文件分配表区又合称为系统区。

(2)引导区从第一扇区开始,使用了三个扇区,保存了该逻辑盘每扇区字节数,每簇对应的扇区数等等重要参数和引导记录。之后还留有若干保留扇区。而FAT16文件系统的引导区只占用一个扇区,没有保留扇区。

(3)FAT区由若干个FAT表构成,FATI6系统的FAT表占用16位,而FAT32系统的FAT表占用32位。文件分配表区共保存了两个相同的文件分配表,因为文件所占用的存储空间(簇链)及空闲空间的管理都是通过FAT实现的,FAT如此重要,故保存两个,以便第一个损坏时,还有第二个可用。文件系统对数据区的存储空间是按簇进行划分和管理的,簇是空间分配和回收的基本单位,即一个文件总是占用若干个整簇,即便文件所使用的最后一簇还有剩余的空间也不再使用。

从统计学上讲,平均每个文件浪费0.5簇的空间,簇越大,存储文件时空间浪费越多,利用率越低。因此,簇的大小决定了该盘数据区的利用率。FAT16系统簇号用16位二进制数表示,从0002H到FFEFH个可用簇号(FFFOH到FFFFH另有定义,用来表示坏簇,文件结束簇等),允许每一逻辑盘的数据区最多不超过FFEDH(65518)个簇。FAT32系统簇号改用32位二进制数表示,大致从0000002H到FFFFFFH个可用簇号。

FAT表按顺序依次记录了该盘各簇的使用情况,是一种位示图法。每簇的使用情况用32位二进制填写,未被分配的簇相应位置写零;坏簇相应位置填入特定值;已分配的簇相应位置填入非零值,具体为:如果该簇是文件的最后一簇,填入的值为FFFFFOFH,如果该簇不是文件的最后一簇,填入的值为该文件占用的下一个簇的簇号,这样,正好将文件占用的各簇构成一个簇链,保存在FAT表中。000000H、0000001H两簇号不使用,其对应的两个DWORD位置(FAT表开头的8个字节)用来存放该盘介质类型编号。FAT表的大小就由该逻辑盘数据区共有多少簇所决定,取整数个扇区。

(4)FAT32系统更适用于大容量硬盘。FAT32系统一簇可以对应8个逻辑相邻的扇区。理论上,这种用法所能管理的逻辑盘容量上限为16TB(16384GB),容量大于16TB时,可以用一簇对应16个扇区,依此类推。FAT16系统在逻辑盘容量介于128MB~256MB时,一簇对应8个扇区;容量介于256MB~512MB时,一簇对应16个扇区;容量介于512MB~1GB 时,一簇对应32个扇区;容量介于1GB~2GB时,一簇对应32个扇区;超出2GB的部分无法使用。显然,对于容量大于512MB的逻辑盘,采用FAT32的簇比采用FAT16的簇小很多,大大减少了空间的浪费。

但是,对于容量小于512MB的逻辑盘,采用FAT32虽然一簇8个扇区,比使用FAT16一簇16个扇区,簇有所减小,但FAT32的FAT表较大,占用空间较多,总数据区被减少,两者相抵,实际并不能增加有效存储空间,所以微软建议对小于512M的逻辑盘不使用FAT32。

(5)根目录区(ROOT区)不再是固定区域、固定大小,可看作是数据区的一部分。因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,一般情况下从第二簇开始使用,大小视需要增加,因此根目录下的文件数目不再受最多512的限制。FAT16文件系统的根目录区(ROOT区)是固定区域、固定大小的,是从FAT区之后紧接着的32个扇区,最多保存512个目录项,作为系统区的一部分。

(6)目录区中的目录项变化较多,一个目录项仍占32字节,可以是文件目录项、子目录项、卷标项(仅根目录有)、已删除目录项、长文件名目录项等。目录项中原来在DOS下保留未用的10个字节都有了新的定义。

字节位置定义及说明
00H--07H文件正名
08H--0AH文件扩展名
0BH文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位,系统位,卷标位,子目录位,归档位
0CH保留未用
0DH--0FH24位二进制文件建立时间,其中高五位为小时,次六位为分钟
10H--11H16为二进制文件的建立日期,其中高七位为相对于1980年的年份值,次四位为月份,后5位为月内日期
12H--13H

16位二进制的文件最新访问时间

14H-15H起始簇号的高16位
16H--17H16位二进制的文件最新修改时间,其中的高5位为小时,次六位为分钟,后5位的2的倍数为秒数
18H--19H16位二进制文件的最新修改日期
1AH--1BH起始簇号的低16位
1CH--1FH32位的文件字节长度

NTFS文件系统

NTFS是一个功能强大、性能优越的文件系统,它也是以簇作为磁盘空间分配和回收的基本单位。一个文件总是占有若干个簇,即使在最后一个簇没有完全放满的情况下,也要占用整个簇的空间,这是造成磁盘空间浪费的主要原因之一。

和FAT32系统一样,NTFS的第一个扇区为引导扇区,其中有NTFS分区的引导程序和一些BPB参数,这些参数记录了分区的重要信息,是系统正常使用的必要信息。引导扇区之后是15个扇区的NTLDR 区域,它是引导程序的一部分。对于一个NTFS系统的引导扇区,会通过BPB参数找到其在磁盘中的位置,并把NTLDR区域读入内存,然后把执行权交给 NTLDR,从而完成操作系统的引导。

在NTLDR之后是主控文件表(MFT),它是NTFS卷结构的核心,是NTFS中最重要的系统文件,包含了卷中所有文件的信息。MFT是以文件记录数组来实现的,每个文件记录的大小都固定为1KB。卷上每个文件都有一行MFT记录。MFT开始的16个元数据文件是保留的,在NTFS文件系统中只有这16个元数据文件占有固定的位置。MFT的前16个元数据文件非常重要,为了防止数据丢失,NTFS系统在该卷文件存储部分的正中央对它们进行了备份。16个元数据之后则是普通的用户文件和目录。

NTFS将文件作为属性/属性值的集合来处理。文件数据就是未命名的属性值,其他文件属性包括文件名、文件拥有者、文件时间标记等。

NTFS卷上每个文件都有一个64位的唯一标识,称为文件引用号。文件引用号由文件号和文件顺序号两部分组成。文件号为48位,对应于该文件在MFT中的位置。文件顺序号随着每次文件记录的重用而增加。小文件的所有属性可以在MFT中常驻。大文件的属性通常不能存放在只有1KB的 MFT 文件记录中,这时NTFS将从MFT之外分配区域。这些区域通常称为一个延展或一个扩展,它们可以用来存储属性值。

一个目录的MFT记录将其目录中的文件名和子目录名进行排序,并保存在索引根属性中。小目录所有属性都可以在MFT中常驻,其索引根属性可以包括其中所有文件和子目录的索引。

NTFS 5.0的特点主要体现在以下几个方面:

(1)NTFS可以支持的分区(如果采用动态磁盘则称为卷)大小可以达到2TB。

(2)NTFS是一个可恢复的文件系统。在NTFS分区上用户很少需要运行磁盘修复程序。NTFS通过使用标准的事物处理日志和恢复技术来保证分区的一致性。发生系统失败事件时,NTFS使用日志文件和检查点信息自动恢复文件系统的一致性。

(3)NTFS支持对分区、文件夹和文件的压缩。任何基于Windows的应用程序对NTFS 分区上的压缩文件进行读写时不需要事先由其他程序进行解压缩、当对文件进行读取时,文件将自动进行解压缩;文件关闭或保存时会自动对文件进行压缩。

(4)NTFS采用了更小的簇,可以更有效率地管理磁盘空间。在Windows 2000的FAT32 文件系统的情况下,分区大小在2~8GB时簇的大小为4KB;分区大小在8~16GB时簇的大小为8KB;分区大小在16~32GB时簇的大小则达到了16KB。而 Win 2000的NTFS文件系统,当分区的大小在2GB以下时,簇的大小都比相应的FAT32簇小;当分区的大小在2GB 以上时(2GB~2TB),簇的大小都为4KB。相比之下,NTFS可以比FAT32更有效地管理磁盘空间,最大限度地避免了磁盘空间的浪费。

(5)在NTFS分区上,可以为共享资源、文件夹以及文件设置访问许可权限。许可的设置包括两方面的内容:一是允许哪些组或用户对文件夹、文件和共享资源进行访问:二是获得访问许可的组或用户可以进行什么级别的访问。访问许可权限的设置不但适用于本地计算机的用户,同样也应用于通过网络的共享文件夹对文件进行访问的网络用户。

(6)NTFS文件系统下可以进行磁盘配额管理。磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。设置磁盘配额后,可以对每一个用户的磁盘使用情况进行跟踪和控制,通过监测可以标识出超过配额报警阈值和配额限制的用户,从而采取相应的措施。磁盘配额管理功能的提供,使得管理员可以方便合理地为用户分配存储资源,避免由于磁盘空间使用的失控可能造成的系统崩溃,提高了系统的安全性。

(7)NTFS使用一个"变更"日志来跟踪记录文件所发生的变更。

Ext

EXT 是 延 伸 文 件 系 统 ( 英 语 : Extended file system,缩写为 ext 或 ext1),也译为扩展文件系统,一种文件系统,于 1992 年 4 月发表,是为 linux 核心所做的第一个文件系统。ext2既有超级块的速度又有非常小的cpu占用率,可用于硬盘和移动存储设备;ext3在ext2的基础上增加了日志功能,可以回溯;ext4是日志式的文件系统,容量可支持1EB,最大单个文件支持16TB,支持连续写入以减少文件碎片,现在是linux默认的文件系统。

Ext2就代表第二代文件扩展系统,Ext3/Ext4以此类推,它们都是Ext2的升级版,只不过为了快速恢复文件系统,减少一致性检查的时间,增加了日志功能,所以Ext2被称为索引式文件系统,而Ext3/Ext4被称为日志式文件系统

数据存放区:

  • inode(索引节点)
    记录文件的权限、属性和数据所在块block的号码,每个文件都有且仅有一个的inode,每个inode都有自己的编号,可以把inode简单地理解为文档索引

备注:在磁盘格式化后,inode的大小和数量都已经固定了,大小均为128Bytes(新的Ext4和xfs为258Bytes)。读取文件时,先读取inode里面记录的文件属性和权限,匹配正确后,才会读取文件内容(block)。在Linux系统中,实际使用inode来识别文件,而不是文件名,类似于用户标识和昵称的设计

  • inode table
    存储文件系统的所有inode编号的表格
  • block(数据区块)
    存储的文件内容,也叫数据区块(data block),每个block都有自己的编号,Ext2支持的单位block容量仅为1k、2k、4k

备注:为了方便inode的记录,在磁盘格式化后,block的大小都已经固定了。每一个块只能存放一个文件的数据,若文件太大,将占用多个block;若文件太小,block剩余空间就不能被使用了,就会导致磁盘空间浪费,所以在磁盘分区后,文件系统格式化前,请先仔细想想文件系统的预计使用情况

中介数据(metadata)

这些元素是为了维持文件系统状态而设计出来的,当新增、编辑、删除文档时,都需要变更这些状态信息。

  • superblock(超级块)
    记录文件系统(filesystem)的整体信息,包括inode/block的总量、使用量、剩余量、大小、以及文件系统的格式和相关信息。

备注:整个文件系统的基本信息全部记录在superblock,它的大小一般为1024Bytes,如果它死掉,将会花费大量的时间去补救哦!!!

  • block group(区块群组)
    试想一下,假如我们的磁盘容量高达数百G,当我们格式后,inode和block会非常庞大,为了便于管理,Ext文件系统在格式化时,引入了区块群组(block group)的概念,每个区块群组都保持独立inode/block/superblock,拥有固定数量的block,这样就分成了一群一群最基础的子文件系统。

备注:superblock对于文件系统太重要了,但是文件系统的superblock又只有一个,所以除了第一个block group含有superblock外,后续block group都可能会含有备份的superblock,目的就是为了避免superblock单点无法救援的问题。

  • block bitmap(区块对照表)
    一个block只能被一个文件使用,当我们新增文件时,肯定需要使用新的block来记录文件数据。那么如何快速地知道,哪些block是新的?哪些block是已经使用了的?block bitmap就是这样被设计出来,记录所有使用和未使用的block号码。同样的,当我们删除文件时,先从block bitmap中找到对应的block号码,然后更新标志为未使用,最后释放block。
  • inode bitmap(inode 对照表)
    和block bitmap一样的设计理念,只不过它记录地是已使用和未使用的inode号码,这里就不再敖述了。
  • group descriptor
    描述每个区段(block group)开始和结束的block号码,以及说明每个区段(inodemap、blockmap、inode table)分别介于哪些block号码之间。

 

参考文本:

磁盘文件系统Fat、Fat32、NTFS、exFAT的优缺点 - 九八八五 - 博客园 (cnblogs.com)

(234条消息) ext文件系统_唏噗的博客-CSDN博客

漫谈Linux标准的文件系统(Ext2/Ext3/Ext4) - justmine - 博客园 (cnblogs.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值