文件系统类型基本介绍以及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

 

posted @ 2019-02-14 15:06  拖鞋拍小强  阅读(14228)  评论(0编辑  收藏  举报