文件拷贝--单一文件过大

在将大文件拷贝到云盘、U盘时会遇到“文件过大,无法完成拷贝”的提示。这主要是因为所拷贝的介质采用的文件系统基于fat32或仅能提供4G以内的免费上传服务,针对这种情况,一种有效的方法是将单一的大文件压缩成多个小文件(将每个小文件的size上限控制在4g以内)。另一种方法是替换介质的文件系统类型。如替换成exFAT(fat32的扩展版,也称FAT64)或NTFS。下面对常见的文件系统(fat32、exFAT、NTFS)进行一个简单的介绍:

1. fat32

解决FAT16存在的最大只支持2GB的分区和磁盘利用效率低的问题,微软推出了一种新的磁盘分区格式fat32,并在1997年的Windows 95 OSR2(第二版系统)及以后的Windows 版本中提供支持。FAT16和fat32在不同分区对应的簇大小如下:

分区大小

FAT16簇大小

fat32簇大小

16MB-32MB

2KB

不支持

32MB-127MB

2KB

512bytes

128MB-255MB

4KB

512bytes

256MB-259MB

8KB

512bytes

260MB-511MB

8KB

4KB

512MB-1023MB

16KB

4KB

1024MB-2047MB

32KB

4KB

2048MB-8GB

不支持

4KB

8GB-16GB

不支持

8KB

16GB-32GB

不支持

16KB

32GB以上

不支持

32KB

相比FAT16,fat32主要具有以下特点:

1)fat32支持的磁盘分区上限达到2TB(2048GB),但是不能支持小于32MB的分区。基于fat32的Win 2000可以支持分区最大为32GB;而基于 FAT16的Win 2000支持的分区最大为4GB。

2)采用更小的簇,fat32文件系统可以更有效率的保存信息。

假如一个磁盘的分区大小为512MB,基于FAT16的簇大小为16KB,而fat32的簇大小仅是4KB,那么,现在我们存放一个3KB的文件,FAT16系统就会有13KB的空间被浪费,而fat32的浪费会少一些。如果分区达到1GB,FAT16的簇为16KB,而fat32还是4KB,节省空间更多。

3)其他优势。fat32文件系统可以重新定位根目录和使用FAT的备份副本,具有很好的兼容性,几乎所有主流系统都能对其格式写入读取。另外fat32分区的启动记录被包含在一个含有关键数据的结构中,减少了计算机系统崩溃的可能性。

fat32不足:

1)相比于FAT16,fat32需要更大的文件分配表,所以运行速度会更慢,且DOS系统和某些早期应用软件不支持这种分区格式。

2)另外,这种文件格式安全无保障,对于单个文件的移动复制,不能超过4GB,文件名长度也不可以超过255个字符。

3)不支持日志、版权管理等高级技术,安全性也很差。

4)fat32不能保持向下兼容。

2. NTFS

NTFS(NewTechnology File System)是Windows NT以及之后的Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008、Windows Vista和Windows 7的标准文件系统。NTFS取代了文件分配表(FAT)文件系统,为Microsoft的Windows系列操作系统提供文件系统。NTFS对FAT和HPFS(高性能文件系统)作了若干改进,例如,支持元数据,并且使用了高级数据结构,以便于改善性能、可靠性和磁盘空间利用率,并提供了若干附加扩展功能,如访问控制列表(ACL)和文件系统日志。

NTFS的目标是提供可靠性,通过可恢复能力(事件跟踪)和热定位的容错特征实现;增加功能性的一个平台;对POSIX需求的支持;消除FAT和HPFS文件系统中的限制。

NTFS提供长文件名(NTFS 允许文件名的长度可达256个字符)、数据保护和恢复,并通过目录和文件许可实现安全性。NTFS 支持大硬盘和在多个硬盘上存储文件(称为卷)。例如,一个大公司的数据库可能大得必须跨越不同的硬盘。NTFS 提供内置安全性特征,它控制文件的隶属关系和访问。从DOS 或其他操作系统上不能直接访问 NTFS 分区上的文件。如果要在DOS下读写NTFS分区文件的话可以借助第三方软件。虽然DOS用户不能访问NTFS分区,但NTFS文件可以拷贝到DOS分区。每个NTFS文件包含一个可被DOS文件名格式认可的DOS可读文件名。这个文件名是 NTFS 从长文件名的开始字符中产生的;Linux系统上已可以使用 NTFS-3G 进行对 NTFS 分区的完美读写,不必担心数据丢失。

NTFS是目前主流的磁盘格式,有大量用户在使用。

NTFS优点:

1)具备错误预警的文件系统

在NTFS分区中,最开始的16个扇区是分区引导扇区,其中保存着分区引导代码,接着就是主文件表(Master File Table,以下简称MFT),但如果它所在的磁盘扇区恰好出现损坏,NTFS文件系统会比较智能地将MFT换到硬盘的其他扇区,保证了文件系统的正常使用,也就是保证了Windows的正常运行。而以前的FAT(文件分配表)则只能固定在分区引导扇区的后面,一旦遇到扇区损坏,那么整个文件系统就要瘫痪。但这种智能移动MFT的做法当然并非十全十美,如果分区引导代码中指向MFT的部分出现错误,那么NTFS文件系统便会不知道到哪里寻找MFT,从而会报告“磁盘没有格式化”这样的错误信息。为了避免这样的问题发生,分区引导代码中会包含一段校验程序,专门负责侦错。

2)文件读取速度更高效

对DOS略知一二的读者一定熟悉文件的各种属性:只读、隐藏、系统等。在NTFS文件系统中,这些属性都还存在,但有很大不同。在这里,一切东西都是一种属性,就连文件内容也是一种属性。NTFS文件系统中的文件属性可以分成两种:常驻属性和非常驻属性,常驻属性直接保存在MFT中,像文件名和相关时间信息(例如创建时间、修改时间等)永远属于常驻属性,非常驻属性则保存在MFT之外,但会使用一种复杂的索引方式来进行指示。如果文件文件夹小于1500字节(其实我们的电脑中有相当多这样大小的文件文件夹),那么它们的所有属性包括内容都会常驻在MFT中,而MFT是Windows一启动就会载入到内存中的,这样当你查看这些文件文件夹时,其实它们的内容早已在缓存中了,自然大大提高了文件文件夹的访问速度

3)磁盘自我修复功能

NTFS利用一种“自我疗伤”的系统,可以对硬盘上的逻辑错误和物理错误进行自动侦测和修复。在FAT时代,我们需要借助Scandisk这个程序来标记磁盘上的坏扇区,但当发现错误时,数据往往已经被写在了坏的扇区上了,损失已经造成。NTFS文件系统则不然,每次读写时,它都会检查扇区正确与否。当读取时发现错误,NTFS会报告这个错误;当向磁盘写文件时发现错误,NTFS将会十分智能地换一个完好位置存储数据,操作不会受到任何影响。在这两种情况下,NTFS都会在坏扇区上作标记,以防今后被使用。这种工作模式可以使磁盘错误可以较早地被发现,避免灾难性的事故发生。

4)“防灾赈灾”的事件日志功能

在NTFS文件系统中,任何操作都可以被看成是一个“事件”。比如将一个文件从C盘复制到D盘,整个复制过程就是一个事件。事件日志一直监督着整个操作,当它在目标地—D盘发现了完整文件,就会记录下一个“已完成”的标记。假如复制中途断电,事件日志中就不会记录“已完成”,NTFS可以在来电后重新完成刚才的事件。事件日志的作用不在于它能挽回损失,而在于它监督所有事件,从而让系统永远知道完成了哪些任务,哪些任务还没有完成,保证系统不会因为断电等突发事件发生紊乱,最大程度降低了破坏性。

5)动态磁盘功能

动态磁盘是从Windows 2000开始的新特性,WindowsServer 2003继续使用这个优良特性。相比基本磁盘,它提供更加灵活的管理和使用特性。可在动态磁盘上实现数据的容错、高速的读写操作、相对随意的修改卷大小等操作,而不能在基本磁盘上实现。动态磁盘没有卷数量的限制,只要磁盘空间允许,则可以在动态磁盘中任意建立卷。动态磁盘,我们可以将数块磁盘中的空余磁盘空间扩展到同一个卷中来增大卷的容量。基本磁盘的读写速度由硬件决定,不可能在不额外消费的情况下提升磁盘效率。在动态磁盘上创建带区卷来同时对多块磁盘进行读写,显著提升磁盘效率。使用Windows XP等系统安装盘给硬盘分区时,往往发现不管硬盘大小,不管分区大小,最后总有8M的空间被剩余下来。这8M空间是用来转换成动态磁盘的。创建Raid时必须要有不小于8M的动态磁盘,所以Windows操作系统在进行分区时会自动留下8M的空间

NTFS的缺点:

NTFS是针对传统机械硬盘而设计的,对于新兴的Flash闪存材料不一定适用。NTFS分区是采用“日志式”的文件系统,因为要记录磁盘的详细读写操作,对U盘这种闪存储介质会造成较大的负担,比如同样存取一个文件或目录,在NTFS系统上的读写次数就会比fat32来得多,理论上NTFS格式的U盘比较容易损坏,而且400MB以下的分区也比FAT16更浪费空间。

3. exFAT

exFAT(ExtendedFile Allocation Table File System,扩展FAT,即扩展文件分配表)是Microsoft在Windows Embeded 5.0以上(包括Windows CE 5.0、6.0、Windows Mobile5、6、6.1)中引入的一种适合闪存的文件系统。exFAT主要针对移动存储设备,闪存、U盘等。因为fat32格式单个文件不能超过4G,使用NTFS格式又容易损坏闪存芯片,所以才开发exFAT格式来解决这些问题。

exFAT的优点:

exFAT有如下好处:

1)增强了台式电脑与移动设备的互操作能力

2)单文件大小最大可达16EB(理论值,16×1024×1024TB)

3) 簇大小灵活,最小0.5KB,最高达32MB。

4)采用剩余空间分配表,剩余空间分配性能改进,提供空间利用率。

5)同一目录下最大文件数可达65536个

6)支持访问控制

7)采用该文件系统的闪存盘不支持Windows Vista ReadyBoost。Windows Vista SP1支持文件系统。

8)exFAT是微软专门为闪存设备设计的文件系统,高容量的Sdxc认都是这种格式。只有U盘和存储卡才能格式化成exFAT,传统硬盘是无法格式化成 exFAT格式的。exFAT的特性其实并不比NTFS强,但却比NTFS及fat32更适合闪存使用。

exFAT的缺点:

1)exFAT文件系统的兼容性不好。目前WindowsXP、Windows Vista都不支持exFAT,XP系统需要升级至SP2补丁,Vista系统需要升级至SP1才能支持exFAT。Windows 7支持exFAT。笔者在Ubuntu 15.10版本下进行测试,该OS下不能识别exFAT文件系统。所以兼容性是exFAT的硬伤。

2)在exFAT分区上安装Windows系统是不可能的。WindowsVista/7都非常依赖NTFS的文件许可等特性。

3)由于微软授权机制的限制,exFAT的普及并不广泛,在消费电子领域的应用也不是特别多。

4. 选用建议:

对于超过4G的u盘,在可以确信所用操作系统能识别exF格式分区的情况下,用exFAT格式是最佳选择。如果担心exFAT的识别问题,就比较适合NTFS;NTFS采用“日志式”的文件系统,记录磁盘的详细读写操作,但只在理论上影响u盘的寿命。在实际上,U盘的日志操作远没有操作系统频繁,不足以对U盘的寿命产生实质性损伤。

4GB以下容量u盘,fat32最合适。fat32虽然有着最广泛的平台兼容性,但除了小容量U盘之外,其他场景不推荐使用。

如果是移动硬盘就用NTFS,NTFS更实用于容量比较大的硬盘。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...