文件系统类型基本介绍以及NTFS,exFAT,FAT32,XFS和EXT4文件系统适用场景
windows上常见的exFAT,NTFS,FAT32有什么区别:
- NTFS:最早出现在windowsNT的日志文件系统,有文件加密(权限管理)、磁盘文件压缩(节省磁盘空间)、目录索引(方便快速查找)、支持长文件名(255个字符)、磁盘预警、大容量(根据簇的不同最大容量可以达到16~256TB,但存储文件过多,由于索引增多,文件碎片化可能会导致实际性能下降)、记录操作日志(数据安全)等特性
- FAT32:较早的文件系统类型,兼容性好,但是最大仅支持2TB分区,NT内核仅限制为32GB,单个文件最大也仅4GB
- exFAT:微软为了解决FAT32在大文件上表现不佳的问题,专门为闪存盘设计的文件系统类型。但是由于没有NTFS的许多特性并不适合作为系统分区使用
下表来源于exfat百度百科
分区格式
|
FAT32
|
NTFS
|
exFAT
|
ReFS
|
操作系统
|
Windows 95 OSR2之后
|
Windows 2000之后
|
Windows CE 6/Vista SP1/Windows 7之后
|
Windows Server 2012之后
|
最小簇
|
512bytes
|
512bytes
|
512bytes
|
4096bytes
|
最大簇
|
64KB
|
64KB
|
32768KB
|
64KB
|
同一目录最大文件数
|
65535
|
4294967295
|
2796202
|
18446744073709551615
|
最大单一文件
|
4GB(2^32-1bytes,4294967295bytes)
|
256TB(2^48-1bytes,281474976710655bytes)
|
16EB(2^64-1bytes,18446744073709551615bytes)
|
16EB(2^64-1bytes,18446744073709551615bytes)
|
最大卷容量
|
2TB(但NT内核系统限制为32GB)
|
2TB~256TB(受MBR影响,GPT分区格式可以更大)
|
64ZB(理论值,目前支持到128PB)
|
1YB(2^80bytes)
|
exFAT,NTFS,FAT32在LINUX上兼容情况如何:
- NTFS:由于是windows特有的文件系统类型,所以原生Linux、MacOS默认不支持此文件系统类型。想使用这种文件系统类型的文件,Linux需要安装第三方包,否则会提示I/O error或缺少驱动,macos需要开启相关功能。用NTFS制作的U盘也可能由于不兼容而无法读取,NTFS日志记录会频繁读写U盘某区域导致寿命下降。
-
exFAT支持macOS 10.6.5及以上的系统版,支持Linux Kernel 5.4及以上的内核版本。下图是在centos用fdisk执行识别出的u盘
- FAT32作为较老的文件系统类型兼容性上没有问题,下图是识别出的FAT32类型u盘
根据centos 7.5的文件系统介绍(man fs),大致翻译如下:
minix:在Minix操作系统上使用的文件系统,Linux上运行的第一种文件系统。它有很多限制:64M分区大小限制,短文件名,唯一时间戳等等。只有软盘或者RAM中可能用的到。
ext:minix文件系统的复杂扩展,已经被ext2文件系统完全取代,在核心(2.1.21)中已经完全移除。
ext2:在Linux的固定盘或者可移除媒体中表现优异的文件系统。ext2是ext文件系统的扩展,ext2可以给Linux的文件系统提供最佳支持(主要是速度和CPU使用上)。
ext3:ext2文件系统的日志版本,可以很容易的在ext2和ext3文件系统来回切换。
ext4:ext3的一系列更新,包括增加了很多特性,可靠性增强,支持更大的卷、文件、目录格式限制。
Reiserfs:由Hans Reiser设计的日志文件系统,整合进核心版本号2.4.1的Linux中。
xfs:SGI开发的日志文件系统,整合进核心版本号2.4.20的Linux中。
JFS:由IBM开发的日志文件系统,整合进核心版本号2.4.24的Linux中。
(xiafs、msdos、umsdos、ISO、hpfs、sysv、smb、ncpfs略过)
vfat:Microsoft Windows 95 和 Windows NT使用的一种扩展DOS文件系统。VFAT增加了MSDOS文件系统下可以使用长文件名的特性。
ntfs:代替Microsoft Window的FAT文件系统(VFAT,FAT32),在可靠性和空间利用方面增加了像ACL、日志、加密等特性。
proc:作为内核数据的接口而不是读取解释 /dev/kmem的伪(虚拟)文件系统。尤其是它的文件不占用硬盘。
nfs:供远程电脑访问读取的网络文件系统。
如果你在犹豫该选择NTFS,exFAT,FAT32,XFS和EXT4的哪一种文件系统:
对于windows:- Windows系统更适合用NTFS文件系统类型做分区,在Windows系统上用U盘传文件,无脑做成exFAT就行。
- Windows Vista/7非常依赖NTFS的文件许可等特性,就算你不想使用NTFS的特性, 你也不能把系统安装在exFAT文件系统类型的磁盘上。不过对于win10和win11这条是否还生效还没有试过。
- 虽然exFAT设计上是为了取代FAT32,但是由于微软授权机制的限制,exFAT的普及并不广泛,在消费电子领域的应用也不是特别多,跨系统类型文件传输建议提前进行验证。linux上也应该注意内核版本是否符合要求,比如上图的CentOS7.5仅能识别出exFAT但是无法挂载U盘。
- 如果你经常需要在Linux和Windows上用U盘互相传文件,而且Linux核心版本又比较低,U盘推荐还是使用FAT32,那么传输超4G的文件就只能用分包压缩的方式来规避最大文件限制。不过如果可以的话更建议用FTP或者SSH远程传输。
一句话总结:硬盘分区选NTFS;U盘选exFAT,除非经常用U盘Windows、Linux来回传文件选FAT32
对于Linux:
- 对于数据库服务器,如果你使用的数据库在某一种文件系统上可能会发挥更好的性能,所以优先看数据库官方文档的推荐选择。
- ext4的分区容量可以达到1EB,而文件则达到16TB;xfs是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统的大小会被限制在16TB。所以根据你存储内容的情况来选择。
- 一般情况下最好使用ext4文件系统,因为其向前兼容性很好,你可以把ext2、ext3的文件系统按照ext4挂载。并且ext4可以有效减少碎片,对于SSD和HDD硬盘是很好的选择。
- XFS由于其对大文件的IO性能良好,因此适合存储数据文件。但是由于对小文件的不可预测的表现,可能不适合作为系统分区的文件系统类型。不过即便如此,我接触过的绝大多数生产环境Linux服务器是使用这种文件系统类型。
总结:生产服务器选XFS,自己的Linux工作站选ext4。但是要注意一点,XFS不支持LVM逻辑卷缩容,仅支持扩容。而ext4扩容缩容均支持,所以如果有缩容需求必须选择ext4
关于文件系统性能参考:关于ext3,ext4,xfs和btrfs文件系统性能对比
其他参考:
https://www.3cwu.com/p/275375.html
https://stackoverflow.com/questions/197162/ntfs-performance-and-large-volumes-of-files-and-directories
http://www.lotpc.com/yjzs/8001.html
https://blog.csdn.net/justlpf/article/details/80703763
https://stackoverflow.com/questions/42431954/xfs-or-ext4-filesystem-mongodb-server-on-ubuntu-machine?r=SearchResults