文件系统(File System)是文件管理系统的简称,根据维基百科的描述,文件系统是用来组织数据在存储介质上的存储方式以及检索方式的。没有文件系统,信息在存储介质上会是一个很大的信息块,没法知道一条信息什么时候会结束,也没法知道信息在什么时候开始,对信息的管理就会十分的麻烦。
??文件系统的种类有很多,每一种文件系统的结构,逻辑,存取速度,灵活性,安全性,大小,等等都不一样。
??文件系统可以被使用在很多不同的存储设备(storage devices)上,这些存储设备使用不同的媒介(media),比如磁带,移动硬盘,闪存等,有时候,计算机的主存(RAM)甚至会创建一个临时的文件系统来临时使用。
??总之,文件系统的类别有很多,也很复杂,又想弄明白文件系统的原理,需要学习的东西有很多,这里只介绍一些平时在使用不同的操作系统时可能用到的一些知识,几种不同系统下的常见文件系统格式。
windows系统常见的文件系统
FAT
wikipedia FAT文件系统
??FAT(File Allocation Table)文件系统诞生于1977年,它最初是为软盘设计的文件系统,但是后来随着微软推出dos和win 9x系统,FAT文件系统经过适配被逐渐用到了硬盘上,并且在那时的20年中,一直是主流的文件系统。
??后来随着硬件技术的进步,硬盘的容量也越来越大,这种文件格式逐渐被扩展了,出现了FAT12,FAT16,FAT32等文件系统,甚至后来还出现了FAT64的文件系统。
??在今天,FAT已经不是windows系统的主流文件系统了,但是它在软盘,闪存(u盘),以及很多嵌入式设备上还是很常见的。
??详细的情况wikipedia上有几张表,相关信息都可查看到。
??目前最通用的的是FAT32,很多U盘上都是FAT32格式,关于FAT32文件系统,以下几点值得注意:
单个文件最大为4G
最大文件数量268,435,437
分区最大容量8TB
可在多种操作系统读写
有时候,我们向U盘拷贝大文件时,会发现拷不进去,实际上就是因为这个U盘是FAT32格式的。
NTFS
??NTFS全称是New Technology File System,它是一种比FAT32功能更加强大的文件系统。
??从windows 2000之后的windows系统的默认文件系统都是NTFS,而且这些windows系统只能够安装在NTFS格式的磁盘上。
NTFS具有以下特点:
理论上最大文件尺寸可达16EB-1KB,实际上有16TB-64KB(1EB = 1024PB 1PB = 1024TB,至于理论和实际为什么差这么多,没有进行过深入研究,有可能是现在的科技还不足以制造出这么大的磁盘的)
最大文件数量可达232-1个
操作系统支持大部分windows系统,Unix/Linux系统,Mac OS(在Mac OS 10.4+系统上,NTFS格式是只读的,即在Mac系统下,你只能从NTFS格式的磁盘上读取数据,而不能写入数据)
NTFS系统是一个日志性的文件系统,系统中对文件的操作都可以被记录下来,当系统崩溃之后,利用日志功能可以修复数据
??由于在Mac系统下,ntfs是只读的,所以要想在Mac下想ntfs格式的硬盘写入数据,要装一个插件Paragon NTFS,但据说不是太稳定。
3. ExtFAT
?? ExFAT(Extended File Allocation Table)又叫FAT64,看名字就知道它是对FAT文件系统的扩展。
??E下FAT是虽然也是微软开发的文件系统,但说它是windows下的文件系统并不合适,它是专门为闪存盘设计的文件系统,单个文件突破了4G的限制,而且分区的最大容量可达64ZB(比EB大一级的),建议512TB。
??ExFAT在windows,Linux以及Mac系统上,都可以读写,作为U盘或者是移动硬盘的格式还是比较合适的。
Mac OS系统常见的文件系统
HFS/HFS+
??HFS全称叫分层文件系统(Hierarchical File System,HFS),诞生于1985年,最初被设计用于软盘和硬盘,同时也可以在在只读媒体如CD-ROM上见到。
??HFS+是一个HFS的改进版本,支持更大的文件,并用Unicode来命名文件或文件夹,代替了Mac OS Roman或其他一些字符集。
??HFS+的最大文件尺寸可以达到8EB,文件数量可以达到232 - 1个。
?? 由于这两种文件格式是苹果专有的文件系统,所以在windows系统下,是看不到HFS分区的。
Linux系统常见的文件系统
?? 这几种文件系统wikipedia上资料也不多,所以就直接拷过来了。
Ext2
??wikipedia英文:https://en.wikipedia.org/wiki/Ext2
??wikipedia中文:https://zh.wikipedia.org/wiki/Ext2
??第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由RémyCard设计,用以代替ext,于1993年1月加入linux核心支持之中。ext2的经典实现为LINUX内核中的ext2fs文件系统驱动,最大可支持2TB的文件系统,至linux核心2.6版时,扩展到可支持32TB。其他的实现包括GNU Hurd,Mac OS X (第3方),Darwin(第3方),BSD。
??ext2为数个LINUX发行版的默认文件系统,如Debian、Red Hat > Linux等。
Ext3
??wikipedia英文:https://en.wikipedia.org/wiki/Ext3
??wikipedia中文:https://zh.wikipedia.org/wiki/Ext3
??第三代扩展文件系统(英语:Third extended filesystem,缩写为ext3),是一个日志文件系统,常用于Linux操作系统。它是很多Linux发行版的默认文件系统。Stephen Tweedie在1999年2月的内核邮件列表[2]中,最早显示了他使用扩展的ext2,该文件系统从2.4.15版本的内核开始,合并到内核主线中[3]。
??它的性能(速度)不如它的竞争对手,例如JFS2,ReiserFS和XFS,但它具有重要的优势,那就是它允许在适当的时候从流行的ext2文件系统升级,而无需备份和恢复数据;除此之外,它还具有比ReiserFS和XFS更低的的CPU使用率。
??尽管Ext3相对于Ext2有了不少的优势,但是它还是有一些劣势:
(1)ext3会在删除文件时把文件的节点(inode)中的块指标清除。这样做可以在unclean载入文件系统后,重放日志时,可以减少对文件系统的访问。但也同样也增加了文件在反删除上面的困难。用户唯一的补救是在硬盘中捞取数据,并且要知道文件的起始到结束的块指标。尽管提供了比 ext2在删除文件上稍微高一些的安全性,却也无可避免的带来了不便之处。
(2)Ext3不支持透明压缩(Ext2以非官方补丁支持)。
(3)大小限制,见下表。
块尺寸 最大文件尺寸 最大文件系统尺寸
1KB 16GB 2TB
2KB 256GB 8TB
4KB 2GB 16TB
8KB 16GB 32TB
(4)Ext3在写入日志时,并不做校验和。如果barrier=1没有作为加载参数(在文件/etc/fstab),并且如果硬件在无次序的写入缓存,在崩溃时会严重损坏文件系统(该选项在大多数流行的Linux发行版中都没有被启用,所以大多数发行版的处境都很危险。)
3 . Ext4
??wikipedia英文:https://en.wikipedia.org/wiki/Ext4
??wikipedia中文:https://zh.wikipedia.org/wiki/Ext4
Ext4具有以下特点
大型文件系统
??ext4文件系统可支持最高1 Exbibyte的分区[6]与最大16 Tebibyte的文件。
Extents
??ext4引进了Extent文件存储方式,以替换ext2/3使用的block mapping方式。Extent指的是一连串的连续实体block,这种方式可以增加大型文件的效率并减少分裂文件。ext4支持的单一Extent,在单一block为4KB的系统中最高可达128MB[1]。单一inode中可存储4笔Extent;超过四笔的Extent会以Htree方式被索引。
向下兼容
??ext4向下兼容于ext3与ext2,因此可以将ext3和ext2的文件系统挂载为ext4分区。由于某些ext4的新功能可以直接运用在ext3和ext2上,直接挂载即可提升少许性能。
ext3文件系统可以部分向上兼容于ext4(也就是说ext4文件系统可以被挂载为ext3分区)。然而若是使用到Extent技术的ext4将无法被挂载为ext3。
预留空间
??ext4允许对一文件预先保留磁盘空间。目前大多数文件系统做到这点的方式是直接产生一个填满0的文件;ext4和XFS可以使用Linux核心中的一个新的系统调用“fallocate()”获取足够的预留空间。
延迟获取空间
??ext4使用一种称为allocate-on-flush的方式,可以在数据将被写入磁盘(sync)前才开始获取空间;大多数文件系统会在之前便获取需要的空间。这种方式可以增加性能并减少文件分散程度。
突破32000子目录限制
??ext3的一个目录下最多只能有32000个子目录。ext4的子目录最高可达64000,且使用“dir_nlink”功能后可以达到更高(虽然父目录的link count会停止增加)。为了避免性能受到大量目录的影响,ext4默认打开Htree(一种特殊的B树)索引功能。该功能已经实现于Linux核心2.6.23版。
日志校验和
??Ext4使用校验和特性来提高文件系统可靠性,因为日志是磁盘上被读取最频繁的部分之一。这个特性还有一个好处就是可以安全地避免日志处理时磁盘I/O的等待,而稍微提高一些性能。日志校验和的技术源于威斯康辛大学的一篇名为IRON File Systems的研究论文(见第六节 transaction checksums校验和处理)[7]
在线磁盘整理
??对于在线磁盘整理工具有许多草案,但是这些草案都没有被包含在主流的内核当中。即使Ext4包含有许多避免磁盘碎片的技术,但是磁盘碎片还是难免会在一个长时间使用过的文件系统中存在。Ext4将会有一个具有磁盘整理功能的工具[8]。
快速文件系统检查
??Ext4将未使用的区块标记在inode当中,这样可以使诸如e2fsck之类的工具在磁盘检查时将这些区块完全跳过,而节约大量的文件系统检查的时间。这个特性已经在2.6.24版本的Linux内核中实现。