今天讲一下文件系统,遇见过单个最大文件的问题,所以将此问题记录下来,希望对大家有用。
FAT32(Windows):支持最大分区128GB,最大文件4GB。
FAT16(Windows):支持最大分区2GB,最大文件2GB。
NTFS(Windows):支持最大分区2TB,最大文件2TB。
HPFS(OS/2):支持最大分区2TB,最大文件2GB。
EXT2和EXT3(Linux):支持最大分区4TB,最大文件2GB。
EXT4(Linux):容量达到1EB,而文件容量则达到16TB。
JFS(AIX):支持最大分区4P(block size=4k),最大文件4P。
XFS(IRIX):这是个正经的64位的文件系统,可以支持9E(2的63次方)的分区。
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更为适用。对于磁盘则不太适用。
一般,单个文件超过4G的文件系统,要不是NTFS,要不是exFAT。
这一点是需要注意的,比如音视频领域,如果分辨率很高(如4K30,1080P120),录视频起来文件是很大的,一分钟几百M,如果单个文件超过4G,但是文件系统不支持,就会出现问题,一般会主动截断这个视频,新建一个文件。(比如海思Hi3559V200的SDK中,SD卡采用的是FAT32文件系统,而FAT32文件系统支持单个最大的文件是4G,所以一般会主动截断视频,这样也不会因为一个小错误,整个几个小时的录像文件失效,只不过查看的时候不是一个文件,会麻烦一些)
海思SDK没有合并入exFAT格式,因为那是微软的专利,会侵权。海思SDK用的Linux内核是4.9.37版本,2019.11.25日发布的Linux5.4版本宣布加入了exFAT格式。后期开发项目可以用Linux5.4及以上版本,这样不需要移植代码就可以使用exFAT文件系统,需要获权。
一般我们电脑磁盘的文件系统是NTFS,因为我们的操作系统安装包或者大型软件安装包都超过4G。
换算关系
1EB=1024PB,1PB=1024TB,1TB=1024GB,1GB=1024MB……
单位转换(参考):
1B=1Byte=8bit 1字节=8比特
1 kB = 1024 B (kB - kilobyte) 千 2^10
1 MB = 1024 kB (MB - megabyte) 兆 2^20
1 GB = 1024 MB (GB - gigabyte) 吉 2^30
1 TB = 1024 GB (TB - terabyte) 太 2^40
1 PB = 1024 TB (PB - petabyte) 拍 2^50
1 EB = 1024 PB (EB -exabyte) 艾 2^60
1 ZB = 1024 EB (ZB - zettabyte) 皆 2^70
1 YB = 1024 ZB (YB -yottabyte) 佑 2^80
1 BB = 1024 YB (BB - brontobyte) 2^90
以上为计算机用的2^10 (1024)数量级。