发布网友
共2个回答
热心网友
简单理解文件系统,就是文件的储存方式。也可以理解为一个门牌系统,为储存设备划分门牌号,每个文件分配一个门牌,然后就能按照门牌找到文件。
今天主要介绍一下windows的三种文件系统。
FAT32
NTFS
exFAT
格式化硬盘的时候,Windows 系统会提供这三种文件系统让你选。这时应该选哪一种呢?
1、FAT32
FAT(File Allocation Table,文件分配表)文件系统是windows操作系统所使用的一种文件系统,它的发展过程经历了FAT12、FAT16、FAT32三个阶段。FAT文件系统用“簇”作为数据单元。一个“簇”由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂。簇的最大值为个扇区,即32KB。所有簇从2开始进行编号,每个簇都有一个自己的地址编号。用户文件和目录都存储在簇中。
FAT文件系统的数据结构中有两个重要的结构:文件分配表和目录项:
文件分配表:文件和文件夹内容储存在簇中,如果一个文件或文件夹需要多于一个簇的空间,则用FAT表来描述,如何找到另外的簇。FAT结构用于指出文件的下一个簇,同时也说明了簇的分配状态。FAT12、FAT16、FAT32这三种文件系统之间的主要区别在与FAT项的大小不同。
目录项:FAT文件系统的每一个文件和文件夹都被分配到一个目录项,目录项中记录着文件名、大小、文件内容起始地址以及其他一些元数据。
FAT32 是最老的文件系统,所有操作系统都支持,兼容性最好。但是,它是为32位计算机设计的,文件不能超过 2 32 - 1 个字节,也就是不能超过 4GB,分区不能超过 8TB。目前来看,这个文件系统有点过时了,只适合小文件,如果有大的视频文件,就不能使用它。
特点:
FAT32文件系统用4个字节(32位)空间来表示每个扇区配置文件的情形,所以叫FAT32。分区容量最低是512M,而上限的话不同的操作系统都不一样,WinXP系统最大可以做到2TB的FAT32分区。
2、NTFS
NTFS 是 Windows 的默认文件系统,用来替换 FAT32。Windows 的系统盘只能使用这个系统,移动硬盘买来装的也是它。与FAT32对比如下:
特点:
NTFS文件系统是windows NT核心和高级服务器网络操作系统环境的文件系统。NTFS系统比FAT32的可靠性更高,可以支持更大的分区和更大的文件,此外还有不少FAT32没有的功能,比如压缩分区、文件索引、数据保护和恢复、加密访问等。
3、exFAT
exFAT 可以看作是 FAT32 的位升级版, ex 就是 extended 的缩写(表示"扩展的 FAT32"),功能不如 NTFS,但是解决了文件和分区的大小问题,两者最大都可以到 128PB。由于 Mac 和 Linux 电脑可以读写这种系统,所以移动硬盘的文件系统可以改成它。 (全称Extended File Allocation Table File System,扩展FAT,即扩展文件分配表)是Microsoft在 Windows Embeded 5.0 以上(包括 Windows CE 5.0 、6.0、 Windows Mobile5、6、6.1)中引入的一种适合于闪存的文件系统,为了解决 FAT32 等不支持4G及其更大的文件而推出。对于闪存, NTFS文件系统不适合使用,exFAT更为适用。
特点:
exFAT文件系统是微软在windows embeded5.0以上引入的一种适合于闪存的文件系统,主要是为了解决FAT32不支持4G或更大文件的问题而推出的。
FAT32与exFAT可用4GB文件的区别
大多数U盘在格式化时默认FAT32,最大优点就是在一个不超过8GB的分区中,FAT32的每个簇容量都固定为4KB,与前代相比可以大大地减少磁盘的浪费,提高磁盘利用率。
虽然对于最大分区容量的支持上面,FAT32的2TB最大分区容量至今仍不过时,但FAT32无法传输并存放超过4GB容量的光盘ISO镜像、高清视频、各种图形作品文件等等,这是最致命的弊端。而exFAT格式在苹果本或者是Windows电脑上都可以格式化,并且在两个系统之间可以互相无障碍使用。相比之下,exFAT格式就没有4GB文件传输*了。
其实FAT32与exFAT存在着一个升级关系,这两种文件系统都支持OS X系统与Windows系统,如果你将U盘格式化成这两种文件系统,在不同操作系统电脑上可以畅通无阻地使用。
NTFS相比FAT会让闪存性能降低
NTFS是相当流行的,但多见于硬盘。XP、Vista、Win7默认都会将分区格式化为NTFS系统,可以说NTFS是目前最好的磁盘文件系统。
U盘在格式化为NTFS时,实际可用容量与其他文件系统形式也有所差别,虽然使用中感受并不是很大。另外,在格式化U盘时,容量在G甚至更大规格时,系统识别自动格式化为exFAT与NTFS格式,会便于优盘在不同操作系统电脑上无障碍使用。
但是,NTFS也有他的缺点,NTFS分区采用“日志式”,因为要记录磁盘的详细读写操作,对U盘这种快闪存储介质会造成较大的负担,比如同样存取一个文件或目录,在NTFS上的读写次数就会比FAT32更多,理论上NTFS格式的U盘比较容易损坏。并且由于U盘带宽有限,NTFS频繁读写占据通道会让磁盘性能降低。
总结
FAT32与exFAT之间最大的差别在于能否支持4GB及以上容量单个文件的传输、查看与编辑;而FAT系列文件系统与NTFS之间最大的区分在于文件存取的方式,后者长期使用可能会让闪存类存储产品性能降低.
热心网友
而硬盘和U盘是主流。基本想法是在实模式下,使用汇编代码,读取硬盘MBR,分析硬盘分区表,找到第一个FAT32活动分区,分析FAT32分区,在该分区中找到OSLOADER.BIN文件,将该OSLOADER.BIN文件加载到内存指定地址,将执行权交给OSLOADER.BIN。
环境:
Ubuntu 14.04
bochs
背景知识:
MBR,即硬盘主引导记录,是硬盘的第一个扇区,MBR扇区共512字节,前446字节为引导代码,之后字节是分区表项,最后两字节是有效标志0xAA55,即MBR结构如下:
0x0000~0x01BD: 主引导程序
0x01BE~0x01FD:主分区表
0x01FE~0x01FF:有效标记,0xAA55
主分区表由4项组成,每项16字节,共字节,每项描述一个分区的基本信息。
16字节分区表项结构:
0x00:引导指示符,指明该分区是否是活动分区
0x01:开始磁头
0x02:开始扇区,只用了0~5位,后面2位被开始柱面所使用
0x03:开始柱面,使用了开始扇区的最后2位,共10位,最大值1023
0x04:系统ID,定义了分区的类型
0x05:结束磁头
0x06:结束扇区,只使用了0~5位,最后2位被结束柱面所使用
0x07:结束柱面,使用了结束扇区的最后2位,共10位,最大值为1023
0x08:从该磁盘开始到该分区的开始的位移量,以扇区为单位,即相对扇区数
0x0C:该分区的总扇区数
FAT32文件系统
在FAT32分区的第一个扇区里,记录了FAT32分区的相关参数,如FAT表之前的保留扇区数,FAT表个数,FAT表占用的扇区数,每簇占用的扇区数,根目录所在的簇号等等。其结构如下:
0x00~0x02:3字节,跳转指令
0x03~0x0A:8字节,文件系统标志和版本号
0x0B~0x0C:2字节,每扇区字节数
0x0D~0x0D:1字节,每簇扇区数
0x0E~0x0F:2字节,保留扇区数,即FAT1相对于分区起始地址的扇区数
0x10~0x10:1字节,FAT表个数,通常为2
0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数
0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数
0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质,常用的 0xF0
0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。
0x18~0x19:2字节,每磁道扇区数,只对于有“特殊形状”(由磁头和柱面每 分割为若干磁道)的存储介质有效
0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效
0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数
0x20~0x23:4字节,文件系统总扇区数
0x24~0x27:4字节,每个FAT表占用扇区数
0x28~0x29:2字节,标记,此域FAT32 特有
0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有
0x2C~0x2F:4字节,根目录所在第一个簇的簇号,通常情况下还是起始于2号簇
0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号1,该扇区为操作系统提供关于空簇总数及下一可用簇的信息
0x32~0x33:2字节,备份引导扇区的位置。备份引导扇区总是位于文件系统 的6号扇区
0x34~0x3F:12字节,用于以后FAT 扩展使用
0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过 两者位于启动扇区不同的位置而已
0x43~0x46:4字节,卷序列号。通常为一个随机值
0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷标,会保存在此
0x52~0x59:8字节,文件系统格式的ASCII码,FAT32
0x5A~0x1FD:90~509共410字节,未使用。该部分没有明确的用途
0x1FE~0x1FF:签名标志0xAA55
FAT表
FAT表记录某个簇是否被使用,每个表项占用4个字节。由于簇号起始于2号,所以FAT表项的0号表项与1号表项不与任何簇对应。FAT32的0号表项值总是“F8FFFF0F”, 1号表项可能被用于记录脏标志,以说明文件系统没有被正常卸载或者磁盘表面存在错误。不过这个值并不重要。正常情况下1号表项的值为“FFFFFFFF”或“FFFFFF0F”。
如果某个簇未被分配使用,它对应的FAT表项内容为0;
当某个簇已被分配使用,则它对应的FAT表项内的FAT表项值也就是该文件的下一个存储位置的簇号。如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记,对于FAT32而言,代表文件结束的FAT表项值为0x0FFFFFFF。
如果某个簇存在坏扇区,则整个簇会用0xFFFFFF7标记为坏簇,这个坏簇标记就记录在它所对应的FAT表项中。
FAT32根目录区,每个目录表项占用32字节,对于短文件名而言,32字节已足够,对于长文件名将使用多个目录表项,具体可参考其他文章。
FAT32短文件目录结构:

以上是MBR,主分区表和FAT32分区信息的简要介绍,有了以上信息就可以通过汇编语言将FAT32中的文件读到内存中,并跳转到该文件去执行。
建立实验环境:
在Ubuntu系统中使用bochs工具bximage生成一块100M的虚拟硬盘文件c.img
对c.img进行分区,这里只分一个区就行了
对c.img的分区进行格式化,使用mkfs.vfat将分区格式化为FAT32文件系统
挂载该FAT32分区,将osloader.bin文件复制到该分区
我们用汇编实现FAT32启动扇区,其主要流程是:
计算机启动,将MBR扇区加载到内存地址0x7c00处执行,其中MBR扇区的前446字节是我们写的汇编代码。首先调用INT 13获取磁盘参数,然后分析主分区表,找到第一个活动分区,即分区表项第一个字节为0x80的分区,通过INT 13读取 该分区的第一个扇区,获取FAT32分区参数,然后检索FAT32根目录,寻找OSLOADER.BIN文件所占用的簇,读取该文件到内存指定地址,跳转到该地址继续执行。