文件系统是操作系统用于明确
存储设备(常见的是磁盘,也有基于NAND Flash的
固态硬盘)或分区上的文件的方法和
数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和
存储文件信息的软件机构称为
文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,
控制文件的存取,当用户不再使用时撤销文件等。
简介
在计算机中,文件系统(file system)是命名文件及放置文件的逻辑存储和恢复的系统。
DOS、Windows、
OS/2、
Macintosh和UNIX-based操作系统都有文件系统,在此系统中文件被放置在分等级的(树状)结构中的某一处。文件被放置进目录(Windows中的文件夹)或
子目录,在
树状结构中你希望的位置中。
文件系统指定命名文件的规则。这些规则包括文件名的字符数最大量,哪种字符可以使用,以及某些系统中
文件名后缀可以有多长。文件系统还包括通过
目录结构找到文件的指定路径的格式。
文件系统是
软件系统的一部分,它的存在使得应用可以方便的使用抽象命名的
数据对象和大小可变的空间。
功能
文件的系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于
存储文件扩展文件系统
磁盘或分区和它所包括的文件系统的不同是很重要的。少数程序(包括最有理由的产生文件系统的程序)直接对磁盘或分区的原始
扇区进行操作;这可能破坏一个存在的文件系统。大部分程序基于文件系统进行操作,在不同种文件系统上不能工作。
一个分区或磁盘在作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。
大部分UNIX文件系统种类具有类似的通用结构,即使细节有些变化。其中心概念是超级块superblock,i节点inode,
数据块data block,目录块directory block,和间接块indirection block。超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。i节点包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。i节点包括几个数据块的数目,用于存储文件的数据。i节点中只有少量数据块数的空间,如果需要更多,会
动态分配指向数据块的指针空间。这些动态分配的块是间接块;为了找到
数据块,这名字指出它必须先找到间接块的号码。
UNIX文件系统通常允许在文件中产生孔,意思是文件系统假装文件中有一个特殊的位置只有0字节,但没有为这文件的这个位置保留实际的
磁盘空间。这对小的
二进制文件经常发生,Linux
共享库、一些数据库和其他一些特殊情况。
孔有一定的用处。在笔者的系统中,一个简单的
测量工具显示在200MB使用的磁盘空间中,由于孔,节约了大约4MB。在这个系统中,程序相对较少,没有
数据库文件。
文件
系统的功能包括:管理和调度文件的
存储空间,提供文件的
逻辑结构、
物理结构和存储方法;实现文件从标识到
实际地址的映射,实现文件的控制操作和存取操作,实现文件信息的共享并提供可靠的
文件保密和保护措施,提供文件的
安全措施。
文件的逻辑结构是依照文件的内容的
逻辑关系组织文件结构。文件的逻辑结构可以分为流式文件和记录式文件。
记录文件:由若干
逻辑记录组成,每条记录又由相同的
数据项组成,数据项的长度可以是确定的,也可以是不确定的。
主要缺陷:数据关联差,数据不一致,冗余性。
代码
下面是文件系统的代码,根据这个代码我们可以更好地了解文件系统的
工作流程blockinodesuperblock.h
FAT
在Win 9X下,
FAT16支持的分区最大为2GB。我们知道计算机将信息保存在硬盘上称为“簇”的区域内。使用的簇越小,保存信息的效率就越高。在FAT16的情况下,分区越大簇就相应的要大,存储效率就越低,势必造成存储空间的浪费。并且随着计算机硬件和应用的不断提高,FAT16文件系统已不能很好地适应系统的要求。在这种情况下,推出了增强的文件系统
FAT32。同FAT16相比,FAT32主要具有以下特点:
基于FAT32的Win 2000可以支持分区最大为32GB;而基于 FAT16的Win 2000支持的分区最大为4GB。
NTFS
NTFS文件系统是一个基于安全性的文件系统,是Windows NT所采用的独特的
文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。使用非常广泛的
Windows NT 4.0采用的就是NTFS 4.0文件系统,相信它所带来的强大的
系统安全性一定给广大用户留下了深刻的印象。Win 2000采用了更新版本的NTFS文件系统NTFS 5.0,它的推出使得用户不但可以像Win 9X那样方便快捷地操作和管理计算机,同时也可享受到NTFS所带来的系统安全性。
NTFS 5.0的特点主要体现在以下几个方面:
CDFS
CDFS是大部分的光盘的文件系统,只有小部分光盘使用其他文件系统。这些文件系统只能在
CD-R或
CD-RW上读取。
exFAT
(全称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更为适用。相对
FAT文件系统,exFAT有如下好处:
2·单文件大小最大可达16EB(就是理论值,16×1024×1024TB,1TB=1024G)
3·簇大小可高达32MB
5·同一目录下最大文件数可达65 536个
7·支持TFAT
请注意:exFAT只是一个折中的方案,只为
U盘而生。
超过4GB的U盘格式化时默认是
NTFS分区,但是这种格式是很伤U盘的,因为NTFS分区是采用“日志式”的文件系统,需要记录详细的读写操作,肯定会比较伤
闪盘芯片,因为要不断读写。
下面请看exFAT、NTFS、FAT分区的比较:
RAW
RAW文件系统是一种磁盘未经处理或者未经格式化产生的文件系统,一般来说有这几种可能造成正常文件系统变成RAW文件系统:
●没有格式化。
●硬盘出现不可预知的错误。
解决RAW文件系统的最快的方法是立即格式化,并且使用
杀毒软件全盘
杀毒。当然,如果文件很重要的话可以考虑用磁盘
数据恢复软件先救出数据,然后再格式化和杀毒,或者在网上查找一些有关于“
raw文件系统恢复”的内容。
Ext
Ext2
Ext是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的
优良设计。
其单一
文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的
x86电脑系统中,簇最大为 4KB,则单一文件大小上限为 2048GB,而文件系统的容量上限为 16384GB。
但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,实际上能使用的文件
系统容量最多也只有 2048GB。
至于
Ext3文件系统,它属于一种日志文件系统,是对
ext2系统的扩展。它兼容ext2,并且从ext2转换成
ext3并不复杂。
Ext3
Ext3是一种
日志式文件系统,是对ext2系统的扩展,它兼容
ext2。日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机。
如果在文件系统尚未shutdown前就关机 (如停电) 时,下次重开机后会造成文件系统的资料不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的资料都不会流失。
为了克服此问题,使用所谓‘
日志式文件系统(Journal File System) ’。此类文件系统最大的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。
由于资料的写入动作包含许多的细节,像是改变文件标头资料、搜寻磁盘可写入空间、一个个写入资料区段等等,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要重整。
然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回溯并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间。
Ext4
Linux kernel 自 2.6.28 开始正式支持新的文件系统
Ext4。Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的
数据结构,而不仅仅像 Ext3 对
Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:
Btrfs
Btrfs(通常念成Butter FS),是由
Oracle于2007年宣布并进行中的copy-on-write文件系统。目标是取代
Linux目前的
ext3文件系统,改善ext3的限制,特别是单个文件的大小,总文件系统大小或文件检查和加入目前ext3未支持的功能,像是 writable snapshots、snapshots of snapshots、内建
磁盘阵列(RAID)支持,以及 subvolumes。Btrfs 也宣称专注在“容错、修复及易于管理”。
ZFS
ZFS源自于
Sun Microsystems为
Solaris操作系统开发的文件系统。ZFS是一个具有高
存储容量、文件系统与卷管理概念整合、崭新的磁盘
逻辑结构的轻量级文件系统,同时也是一个便捷的
存储池管理系统。ZFS是一个使用
CDDL协议条款授权的开源项目。
HFS
HFS文件系统概念
分层文件系统(Hierarchical File System,
HFS)是一种由
苹果电脑开发,并使用在
Mac OS上的文件系统。最初被设计用于
软盘和硬盘,同时也可以在在只读媒体如
CD-ROM上见到。
HFS文件系统开发过程
HFS首次出现在1985年9月17日,作为
Macintosh电脑上新的文件系统。它取代只用于早期Mac型号所使用的
平面文件系统Macintosh File System(
MFS)。因为Macintosh电脑所产生的数据,比其它通常的文件系统,如
DOS使用的
FAT或原始Unix文件系统所允许存储的数据更多。苹果电脑开发了一种新式更适用的文件系统,而不是采用现有的规格。例如,HFS允许文件名最多有31个字符的长度,支持
metadata和双分支(每个文件的数据和资源支分开存储)文件。
尽管HFS象其它大多数文件系统一样被视为专有的格式,因为只有它为大多数最新的操作系统提供了很好的通用
解决方法以存取HFS格式磁盘。
构成方式
分层文件系统把一个卷分为许多512字节的“
逻辑块”。这些逻辑块被编组为“分配块”,这些分配块可以根据卷的尺寸包含一个或多个逻辑块。HFS对地址分配块使用16位数值,分配块的最高限制数量是65536。
组成一个HFS卷需要下面的五个结构:
HFS+
在1998年,
苹果电脑发布了
HFS+,其改善了HFS对
磁盘空间的地址定位效率低下,并加入了其它的改进。
HFS+文件系统相对于HFS文件系统的特点
1、采用32bit 记录分配块数量
HFS 和HFS+文件系统对磁盘卷采用
分块进行分配,将一个卷分成等大的分配块。HFS文件系统采用16bit 来记录分配块的数量,最多只能描述216个分配块。而对于HFS+文件系统,采用32bit 来记录分配块的数量,最多能描述232 个分配块。对于
Mac 系统上的非空数据,都必须占用整数个分配块,也就是说,即使一个数据只有一个字节,也要占用一个分配块。而HFS+文件系统增大了每个卷分配块的数量,可以使分配块的单位空间更小,从而达到减少
存储空间浪费的目的。
2、目录树节点大小增加到4KB
HFS 文件系统的目录树节点大小为512 字节,由于HFS+文件
系统目录树
索引节点需要存储附加指针和节点描述符
两个关键值,HFS+文件系统的目录树节点大小增加到4KB。
HFS 文件系统的单一文件大小上限为2^31bit,而HFS+文件系统的单一文件大小最大可达到2^63bit。
HFS 文件系统对文件名最长支持到31个字符,而HFS+文件系统对文件名采用
Unicode编码,最长达到255个字符。
ReiserFS
ReiserFS,是一种文件系统格式,作者是Hans Reiser及其团队Namesys,1997年7月23日他将ReiserFS文件系统在互联网上公布。
Linux内核从2.4.1版本开始支持ReiserFS。
ReiserFS 的命名是源自作者Hans Reiser的姓氏,这个日志型文件系统发展比
ext2/3 晚近许多。在技术上使用的是 B*-tree 为基础的文件系统,其特色为能很有效率地处理大型文件到众多小文件都可以用很高的效率处理;实务上 ReiserFS 在处理文件小于 1k 小文件时,甚至效率可以比
ext3快约10倍。
ReiserFS原先是
Novell公司的SuSE Linux Enterprise采用的缺省文件系统,直到2006年10月12日其宣称将在未来的版本改采ext3为缺省。Novell公司否认这与Hans Reiser被控杀妻案有任何关系。
JFS
JFS( JOURNAL FILE SYSTEM),一种字节级日志文件系统,借鉴了数据库保护系统的技术,以日志的形式记录文件的变化。JFS通过
记录文件结构而不是数据本身的变化来保证数据的
完整性。这种方式可以确保在任何时刻都能维护数据的
可访问性。
该文件系统主要是为满足服务器(从
单处理器系统到高级
多处理器和群集系统)的高
吞吐量和可靠性需求而设计、开发的。JFS文件系统是为面向事务的高性能系统而开发的。在
IBM的
AIX系统上,JFS已经过较长时间的测试,结果表明它是可靠、快速和容易使用的。2000年2月,IBM宣布在一个开放资源许可证下移植
Linux版本的JFS文件系统。JFS也是一个有大量用户安装使用的企业级文件系统,具有
可伸缩性和
健壮性。与非日志文件系统相比,它的突出优点是
快速重启能力,JFS能够在几秒或几分钟内就把文件
系统恢复到一致状态。虽然JFS主要是为满足服务器(从单处理器系统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计的,但还可以用于想得到高性能和可靠性的
客户机配置,因为在
系统崩溃时JFS能提供快速文件系统重启时间,所以它是因特网
文件服务器的
关键技术。使用数据库日志处理技术,JFS能在几秒或几分钟之内把文件系统恢复到一致状态。而在非日志文件系统中,文件恢复可能花费几小时或几天。
JFS的缺点是,使用JFS
日志文件系统性能上会有一定损失,
系统资源占用的比率也偏高,因为当它保存一个日志时,系统需要写许多数据。
VMFS
VMware Virtual Machine File System (VMFS )是一种高性能的群集文件系统,它使
虚拟化技术的应用超出了单个系统的限制。VMFS的设计、构建和优化针对
虚拟服务器环境,可让多个
虚拟机共同访问一个整合的群集式
存储池,从而显著提高了资源
利用率。VMFS 是跨越多个服务器实现虚拟化的基础,它可启用VMware VmotionTM 、Distributed Resource Scheduler 和 VMware High Availability 等各种服务。VMFS 还能显著减少管理开销,它提供了一种高效的虚拟化
管理层,特别适合大型企业
数据中心。采用 VMFS 可实现
资源共享,使管理员轻松地从更高效率和存储利用率中直接获益。
XFS
XFS 是
Silicon Graphics,Inc. 于 90 年代初开发的文件系统。它至今仍作为
SGI 基于
IRIX 的产品(从工作站到
超级计算机)的底层文件系统来使用。现在,XFS 也可以用于 Linux。XFS 的 Linux 版的到来是激动人心的,首先因为它为 Linux 社区提供了一种健壮的、优秀的以及功能丰富的文件系统,并且这种文件系统所具有的可伸缩性能够满足最苛刻的存储需求。
UFS
UFS文件系统:基于
BSD高速文件系统的传统
UNIX文件系统,是
Solaris的默认文件系统。默认启用UFS 日志记录功能。在早期的Solaris 版本中,UFS 日志记录功能只能手动启用。Solaris 10在运行64位Solaris内核的系统上支持多TB UFS文件系统。以前,UFS文件系统在64位系统和32位系统上的大小仅限于约1 TB(Tbyte)。现在,所有UFS文件系统命令和
公用程序已更新为支持多TB UFS文件系统。
UFS1文件系统是OpenBSD和Solaris的默认文件系统。UFS1也曾是NetBSD和
FreeBSD的默认文件系统,但NetBSD2.0和FreeBSD5.0以后版本开始使用UFS2做默认的文件系统。UFS2增加了对大文件和大容量磁盘的支持和一些先进的特性。目前似乎还只有FreeBSD和NetBSD支持UFS2。Apple
OS X和
Linux也支持UFS1,但并不做为它们的默认文件系统。
VXFS
Veritas
FileSystem(VxFS)是首个商业日志记录文件系统。通过日志记录功能,
元数据更改首先写入到日志,然后再写入到磁盘。由于无需在多处写入更改,且元数据是异步写入的,因此吞吐量的速度较快。VxFS也是基于扩展区的意向日志记录文件系统。VxFS设计用于要求高性能和
高可用性,并且可以处理大量数据的操作环境。
ReFS
ReFS(Resilient File System,弹性文件系统) 是在
Windows 8.1和Server® 2012中新引入的一个文件系统。ReFS是与NTFS大部分兼容的,其主要目的 是为了保持较高的稳定性,可以自动验证数据是否损坏,并尽力恢复数据。
ReFS 的关键功能如下:
·通过写入时分配事务模型实现可靠的磁盘更新(也称为
写入时复制)
·支持超大规模的卷、文件和目录
·存储池和虚拟化使得文件系统可建立并易于管理
·通过数据
条带化提高性能(带宽可管理)并通过备份提高
容错性·通过磁盘扫描防止潜在的磁盘错误
·借助“数据打捞”实现损坏还原,以便在任何情况下尽可能提高卷的
可用性·跨计算机
共享存储池,以提供额外的容错性和
负载平衡WBFS
WBFS文件系统全称为Wii Backup File System,是在进行
任天堂家用机
wii运行备份游戏的研究中产生的游戏备份模式。由
黑客发明,在
windows系统下不能识别,早期利用linux系统运作。主要为了改善
USB存储设备的
运行效率。
PFS
PFS全称Playstation File System,顾名思义就是
索尼为其
家用机PS2专用硬盘开发的文件系统,电脑上只有PFS Explorer和Winhiip可以读取,其余资料不明。