目录
1. 文件系统的详解
不少blog中有对文件系统的表述,可供参考
一口气搞懂「文件系统」,就靠这 25 张图了https://blog.youkuaiyun.com/qq_34827674/article/details/107992414?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164922916016780269827523%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164922916016780269827523&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-107992414.142%5Ev5%5Epc_search_result_cache,157%5Ev4%5Econtrol&utm_term=%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&spm=1018.2226.3001.4187简直不要太硬了!一文带你彻底理解文件系统
https://blog.youkuaiyun.com/qq_36894974/article/details/105092951?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164922973216780265474004%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164922973216780265474004&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~top_positive~default-1-105092951.nonecase&utm_term=%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&spm=1018.2226.3001.4450总结:按照《大话存储》中,作者对文件系统的通俗解释可以表述为:
存储空间称为“仓库”、需要输入输出的数据称为“物资”、磁盘控制器称为:“仓库搬运工”、而文件系统便是一面面对存取物资的人员,一面控制搬运工搬运存取物资的管理员,而管理员所管理这个仓库的方法便是”一种文件系统“。
2. 常见的文件系统比较
常见的文件系统可按两个大的分类:Windows系统下的文件系统,Linux系统下的文件系统。
Windows下的文件系统:1、FAT16文件系统;2、FAT32文件系统;3、FAT64文件系统(exFAT文件系统)4、NTFS文件系统;5、NTFSS5.0文件系统;6、WinFS文件系统
Linux下的文件系统:1、Ext1;2、Ext2;3、Ext3;4、Ext4文件系统;
APPLE下的文件系统:1、HFS文件系统;2、APHFS(Apple File System)文件系统
2.1 Windows下的文件系统
2.1.1 FAT16文件系统
FAT(File Allocation Table)是“文件分配表”的意思。就是用来记录文件所在位置的表格,它对于硬盘的使用是非常重要的,假若丢失文件分配表,那么硬盘上的数据就会因无法定位而不能使用了。
扇区:一般扇区为512个字节。
簇:由若干个扇区组成,是存取数据的最小单位。如果簇大小为16K,文件大小为1字节,那也要用一个簇来存,而且该簇不用再拿来他用。
FAT16使用了16bit来描述一个簇,故称之为FAT16。
在FAT16中,采用了16bit宽的簇地址, 32bit宽扇区地址, 但由于规定每簇最大的容量不超过1024 * 32. 所以FAT16文件系统的容量也就限制到了2^16 * 1024 * 32,大约2.1GB的空量,并且实际还达不到这个值。FAT32文件系统使用了32bit宽的簇地址,所以称为FAT32。但在微软件的文件系统中只使用了低28位,最大容量为2^28 * 1024 * 32,约8.7TB的空量。
看了上一篇介绍FAT16 的文章就知道,FAT16由于受到最大支持容量和簇大小关系的限制,因此每超过一定容量的分区之后,它所使用的簇(Cluster)大小就必须扩增,以适应更大的磁盘空间。FAT16各分区与簇大小的关系如下表:
分区大小 | FAT16簇大小 |
16MB-127MB | 2KB |
128MB-255MB | 4KB |
256MB-511MB | 8KB |
512MB-1023MB | 16KB |
1024MB-2047MB | 32KB |
一个FAT文件系统包含:
如果你在一个1000MB的分区中存放50KB的文件,由于该分区簇的大小为16KB,因此它要用到4个簇才行。而如果是一个1KB的文件,它也必须使用一个簇来存放。那么每个簇中剩下的空间可否拿来使用呢?答案是不行的,所以在使用磁盘时,无形中都会或多或少损失一些磁盘空间,形成大量的磁盘碎片。
由上可知,FAT16文件系统有两个最大的缺点:
(1)磁盘分区最大只能到2GB。FAT16文件系统已不能适应当前这种大容量的硬盘,必须被迫分区成几十甚至几百个磁盘空间。而分区磁盘的大小又牵扯出簇的问题来,可谓影响颇大。
(2)使用簇的大小不恰当。试想,如果一个只有1KB大小的文件放置在一个1000MB的磁盘分区中,它所占的空间并不是1KB,而是16KB,足足浪费了15KB。
以上这两个问题常常使得用户在“分多大的分区,才能节省空间,同时又可使硬盘的使用更加方便有效”的抉择中徘徊不定。
2.1.2 FAT32文件系统
二、FAT32文件系统
为了解决FAT16存在的问题,开发出FAT32系统。FAT32使用了32bit来表示每个簇。利用FAT32所能使用的单个分区,最大可达到2TB(2048GB),而且各种大小的分区所能用到的簇的大小,也是恰如其分,上述两大优点,造就了硬盘使用上更有效率。现将与分区与簇的大小汇整如下,我们可仔细做个比较:
FAT16和FAT32的对比:
以当前硬件所能支持的情况下,如将8GB硬盘划分为单个分区的话,使用的簇的大小也只有4KB,比起以往的FAT16来说,真是节省了许多空间。 FAT32就是微软为了取代FAT16而开发出的又一种文件管理系统,FAT32最大可支持2TB(2048GB),对磁盘空间的管理也优于FAT16。
作为以往的WINDOWOS系统开发的文件系统不作过多描述。
2.1.3 FAT64文件系统(exFAT文件系统)
EXFAT文件系统也叫扩展分配表文件系统,可以说它是FAT32文件系统的升级版。
EXFAT和FAT32文件系统不同之处在于,
FAT32的FAT表最多只能用28位,EXFAT的FAT表可以全部使用。
FAT32的文件系统大小只能用4个字节表示,也就是最大为0xFFFFFFFF扇区也就是2T。而EXFAT文件系统的大小是用8个字节表示的。
FAT32文件系统单个文件也是用4个字节表示的0xFFFFFFFF字节也就是4G。而EXFAT文件系统的单
个文件大小使用8个字节(也就是fat32单个文件存储不能超过4个G)
支持 Fat32 exFat
==========================================================
磁盘最大卷 8TB * 128PB
最大文件大小 4GB 16EB
最大簇大小 32KB** 32M
最大簇数 2^28 2^32
最大文件名长度 255 255
时间日期分辨率 2S 10ms
MBR分区类型定义 0x0B,0x0C 0x07
exFAT文件系统优点:
1、分区大小和单文件大小最大可达16EB(16×1024×1024TB);簇大小非 常灵活,最小0.5KB,最高达32MB;采用了剩余空间分配表,空间利用率更高;
2、同一目录下最大文件数可达65536个;支持访问控制;支持 TFAT(WINCE早期文件系统)。
可以看出,ExFAT就是闪存专用的文件系统,只有U盘和存储卡才能格式化成exFAT,传统硬盘是无法格式化成 exFAT格式的,因为exFAT的特性其实并不比NTFS强,但却比NTFS及FAT32更适合闪存使用。
exFAT文件系统缺点:
1、NTFS 使用日志,会比非日志的文件格式读写更多的磁盘,对闪存储造成较大的负担,理论上 NTFS 格式的 U 盘容易损坏。U 盘格式成 exFAT 只是为了方便,Mac 和 Windows 都可读写,也可存放大文件,但exFAT 没有日志功能。
2.1.4 NTFS文件系统
微软为其第一代操纵系统Windows NT 3.1开发的文件系统。80年代,微软和国际商用机器公司 IBM 合作,开发图形操作系统OS/2。但两个公司在很多问题上产生分歧而合作终止。OS/2 的文件系统叫 HPFS,NTFS 借鉴了 HPFS,有很多共同之处。因为开发 NTFS、HPFS 这两个文件系统的就是同一批人,在现在的 Windows 系统上,默认的文件格式就是 NTFS。
NTFS文件系统优点:NTFS分区具有极高的安全性和稳定性,在使用中不易产生文件碎片。它能对用户的操作 进行记录,通过对用户权限进行非常严格的限制,使每个用户只能按照系统赋予的权限进行操作,充分保护了系统与数据的安全。另外对大部分用户而言,NTFS 最直观的优点是,单个文件的大小突破了FAT32的4GB的限制。
NTFS文件系统缺点:NTFS虽然有诸多优点,但这些都是针对传统机械硬盘而设计的,对于新兴的Flash 闪存材料不一定适用。NTFS分区是采用“日志式”的文件系统,因为要记录磁盘的详细读写操作,对U盘这种闪存储介质会造成较大的负担,比如同样存取一个 文件或目录,在NTFS系统上的读写次数就会比FAT32来得多,理论上NTFS格式的U盘比较容易损坏,而且400MB以下的分区也比FAT16更浪费 空间。
特征:
在NTFS文件系统中,文件存取是按簇进行分配,一个簇必需是物理扇区的整数倍,而且总是2的整数次方。NTFS文件系统并不去关心什么是扇区,也不会去关心扇区到底有多大(如是不是512字节),而簇大小在使用格式化程序时则会由格式化程序根据卷大小自动的进行分配。
文件通过主文件表(MFT)来确定其在磁盘上的存储位置。主文件表是一个对应的数据库,由一系列的文件记录组成--卷中每一个文件都有一个文件记录(对于大型文件还可能有多个记录与之相对应)。主文件表本身也有它自己的文件记录。
NTFS卷上的每个文件都有一个64位(bit)称为文件引用号(File Reference Number,也称文件索引号)的唯一标识。文件引用号由两部分组成:一是文件号,二是文件顺序号。文件号为48位,对应于该文件在MFT中的位置。文件顺序号随着每次文件记录的重用而增加,这是为NTFS进行内部一致性检查而设计的。
NTFS使用逻辑簇号(Logical Cluster Number,LCN)和虚拟簇号(Virtual Cluster Number,VCN)来进行簇的定位。LCN是对整个卷中所有的簇从头到尾所进行的简单编号。卷因子乘以LCN,NTFS就能够得到卷上的物理字节偏移量,从而得到物理磁盘地址。VCN则是对属于特定文件的簇从头到尾进行编号,以便于引用文件中的数据。VCN可以映射成LCN,而不必要求在物理上连续。
NTFS的目录只是一个简单的文件名和文件引用号的索引,如果目录的属性列表小于一个记录的长度,那么该目录的所有信息都存储在主文件表的记录中,对于大于记录的目录则使用B+树进行管理。
主文件表中的基本文件记录中有一个指针指向一个存储非常驻索引缓冲--包括该目录下所有下一级子目录和文件的外部簇,而B+树结构便于大型目录中文件和子目录的快速查找。
主文件表中的基本文件记录中有一个指针指向一个存储非常驻索引缓冲--包括该目录下所有下一级子目录和文件的外部簇,而B+树结构便于大型目录中文件和子目录的快速查找。
在NTFS中,所有存储在卷上的数据都包含在文件中,包括用来定位和获取文件的数据结构,引导程序和记录这个卷的记录(NTFS元数据)的位图,这体现了NTFS的原则:磁盘上的任何事物都为文件。在文件中存储一切使得文件系统很容易定位和维护数据,而在NTFS中,卷中所有存放的数据均在一个叫做MFT的文件记录数组中,称为主文件表(Master File Table),MFT是由高级格式化产生的。而MFT则由文件记录(File Record)数组构成。File Record的大小一般是固定的,不管簇的大小是多少,均为1KB,这个概念相当于Linux中的inode(i节点)。File Record在MFT文件记录数组中物理上是连续的,且从0开始编号。MFT仅供系统本身组织、架构文件系统使用,这在NTFS中称为元数据(metadata)。其中最基本的前16个记录是操作系统使用的非常重要的元数据文件。这些NTFS主文件表的重要的元数据文件都是以$(美元符号)开始的名字,所以是隐藏文件,在Windows 2000中不能使用dir命令(甚至加上/ah参数)像普通文件一样列出这些元数据文件。实际上File System Driver(ntfs.sys)维护了一个系统变量NTFS Protect System Files用于隐藏这些元数据。但是微软公司也提供了一个OEM TOOL,叫做NFI.EXE,用此工具可以转储NTFS主文件表的重要的元数据文件(元数据:是存储在卷上支持文件系统格式管理的数据。它不能被应用程序来访问,它只能为系统提供服务),使用NFI显示结果如下:
C:\>nfi C: |MORE
而这些元数据文件文件是系统驱动程序装配卷所必需的,WINDOWS 2000给每个分区赋予一个盘符并不表示该分区包含有WINDOWS 2000可以识别的文件系统格式,如果一旦主文件表损坏,那么该分区在WINDOWS 2000下是无法读取的。为了使该分区能够在WINDOWS 2000下能被识别,也就是必须首先建立WINDOWS 2000可以识别的文件系统格式即主文件表,这可通过高级格式化该分区来完成。众所周知,Windows以簇号来定位文件在磁盘存储的位置,在FAT格式的文件系统中有关簇号的指针是包含在FAT表中的,而在NTFS中有关簇号的指针是包含在$MFT及$MFTMirr文件中的。
NTFS文件系统详细分析https://blog.youkuaiyun.com/force_eagle/article/details/7969463?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164923529216780261951584%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164923529216780261951584&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-7969463.142%5Ev5%5Epc_search_result_cache,157%5Ev4%5Econtrol&utm_term=ntfs&spm=1018.2226.3001.4187NTFS文件系统格式分析
https://blog.youkuaiyun.com/enjoy5512/article/details/50935972?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164923529216780261951584%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164923529216780261951584&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-50935972.142%5Ev5%5Epc_search_result_cache,157%5Ev4%5Econtrol&utm_term=ntfs&spm=1018.2226.3001.4187
2.1.5 NTFS5.0文件系统
1. NTFS5.0可以支持的分区(如果采用动态磁盘则称为卷)大小可以达到2TB。
2.NTFS5.0是一个可恢复的文件系统。在NTFS5.0分区上用户很少需要运行磁盘修复程序。NTFS通过使用标准的事物处理日志和恢复技术来保证分区的一致性。发生系统失败事件时,NTFS使用日志文件和检查点信息自动恢复文件系统的一致性。
3.NTFS5.0支持对分区、文件夹和文件的压缩。任何基于Windows的应用程序对NTFS分区上的压缩文件进行读写时不需要事先由其他程序进行解压缩,当对文件进行读取时,文件将自动进行解压缩;文件关闭或保存时会自动对文件进行压缩。
4. NTFS5.0采用了更小的簇,可以更有效率地管理磁盘空间。在Win 2000的FAT32文件系统的情况下,分区大小在2GB~8GB时簇的大小为4KB;分区大小在8GB~16GB时簇的大小为8KB;分区大小在16GB~32GB时,簇的大小则达到了16KB。而Win 2000的NTFS文件系统,当分区的大小在2GB以下时,簇的大小都比相应的FAT32簇小;当分区的大小在2GB以上时(2GB~2TB),簇的大小都为4KB。相比之下,NTFS可以比FAT32更有效地管理磁盘空间,最大限度地避免了磁盘空间的浪费。
5.在NTFS5.0分区上,可以为共享资源、文件夹以及文件设置访问许可权限。许可的设置包括两方面的内容:一是允许哪些组或用户对文件夹、文件和共享资源进行访问;二是获得访问许可的组或用户可以进行什么级别的访问。访问许可权限的设置不但适用于本地计算机的用户,同样也应用于通过网络的共享文件夹对文件进行访问的网络用户。另外,在采用NTFS格式的Win2000中,应用审核策略可以对文件夹、文件以及活动目录对象进行审核,审核结果记录在安全日志中,通过安全日志就可以查看哪些组或用户对文件夹、文件或活动目录对象进行了什么级别的操作,从而发现系统可能面临的非法访问,通过采取相应的措施,将这种安全隐患减到最低。甚至可能为每一个文件加密。可能有人会说在NT4.0中对用户设置许可就能实现这个功能。Ntfs5.0的加密文件系统其实不是一种文件系统,而是NTFS中的一个新的特性。它用一个随机产生的密钥把一个文件加密,只有文件的所有者和管理员掌握解密的密钥,其它人即使能够登录到系统中,也没有办法读取它。但是在NT4.0中,文件本身是没有加密的,如果一个用户想要读取一个他没有访问权限的文件的话,他只要在硬盘上安装另一套NT就可以了。但是在NTFS5。0下,由于文件是加密存储的,用户即使安装另外一套Windows2000,他也没有办法得到解密的密钥,因此加密文件系统的安全性更高。
6.在Win2000的NTFS文件系统下可以进行磁盘配额管理。磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。设置磁盘配额后,可以对每一个用户的磁盘使用情况进行跟踪和控制,通过监测可以标识出超过配额报警阈值和配额限制的用户,从而采取相应的措施。磁盘配额管理功能的提供,使得管理员可以方便合理地为用户分配存储资源,避免由于磁盘空间使用的失控可能造成的系统崩溃,提高了系统的安全性。
7. NTFS5.0使用一个“变更”日志来跟踪记录文件所发生的变更。
8.NTFS5.0支持动态的分区,也就是可以在线地改变分区的大小,不用退出系统,也不用格式化和重新启动。此外,如果有一个分区包含重要的文件信息,您可以为这个分区动态地创建镜像分区,在这个过程中,用户可以照常地在这个分区中进行文件读写,不会感到有任何的异常。当今后不再需要这个镜像的时候,又可以把这个镜像在线地取消掉。这部分转载自Pclala电脑大本营: [url]http://www.pclala.com/Pc/Learn/20072225986.Html[/url]
2.1.6 WinFS文件系统
WinFS文件系统全称是Windows Future Storage(Windows未来的存储系统),这种文件格式将会在微软公司下一代操作系统Vista中进行部署,该文件系统格式将淘汰现在的FAT32和NTFS格式。
早已难产。分析:“新一代Windows文件系统”WinFS 夭折的几大因素
2.2 LINUX下的文件系统
2.2.1 EXT文件系统
EXT文件系统简史https://zhuanlan.zhihu.com/p/44267768
而目前最新的ext4也是一种显著扩展ext3,但仍然依赖于旧技术的临时技术。终会被下一代文件系统取代。
对EXT4文件系统的表述,如下系列blog写的蛮好的
干货!大话EXT4文件系统完整版https://blog.youkuaiyun.com/21cnbao/article/details/103419484?ops_request_misc=&request_id=&biz_id=102&utm_term=ext4%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-3-103419484.nonecase&spm=1018.2226.3001.4450[ext4]01 磁盘布局 - block分析
[ext4]04 磁盘布局 - Meta Block Groups
[ext4]09 磁盘布局 - superblock备份机制
[ext4]010 磁盘布局 - 如何查找inode的磁盘位置
2.3 APPLE下的文件系统
2.3.1 APFS文件系统
苹果最新的文件系统,在这之前用的是 HFS,后面有 HFS+ 或 HFS Plus。HFS 文件系统历史悠久,是针对传统的机械磁盘开发的文件系统。后面对针对 SSD 做优化,开发了 APFS,在 iOS 10.3 时正式引入。APFS 支持写时复制,同一个文件,无论复制多少份,假如不修改,这个文件的实际内容只会在磁盘中存储一份,只是其索引有 N 份。
apfs文件系统_APFS解释:您需要了解的有关Apple新文件系统的知识https://blog.youkuaiyun.com/culinqian4296/article/details/108782238?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1.pc_relevant_default&utm_relevant_index=2