在将大文件拷贝到云盘、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更实用于容量比较大的硬盘。

文件拷贝--单一文件过大相关推荐

  1. linux大文件拷贝,Linux如何提高大文件的拷贝效率

    Linux系统操作中,当你在进行机器直接的拷贝时,遇到大文件的时候非常浪费时间,特别是将文件同时拷贝到多台机器上的时候,那么有什么好的方法能够提高大文件的拷贝效率呢?一起来学习下吧. 你可以从源机器逐 ...

  2. linux传输文件特别慢,加快Linux文件拷贝速度的两大方法

    在进行Linux文件拷贝中,文件较多的时候拷贝的速度非常慢,那么有什么办法能够加快文件拷贝的速度呢?下面小编就给大家介绍下加快Linux文件拷贝速度的方法. 第一种方法 首先,无论本地还是远程,需要移 ...

  3. java拷贝压缩文件_Android java, 快速文件拷贝,文件压缩,获得系统时间 | 学步园...

    1. 最快速度的文件拷贝,管道对管道. /** * Create report file. * @param srcFile * @param dstFile */ private void Crea ...

  4. 文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

     1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; ...

  5. TP框架自带Http类实现下载文件(单一文件)

    在TP框架中有一个自带的Http类可以实现下载,而且比较方便: public function imgdown(){ import('ORG.Net.Http');$http = new \Org\N ...

  6. system文件_大文件拷贝,试试NIO的内存映射

    最近项目里有个需求需要实现文件拷贝,在java中文件拷贝流的读写,很容易就想到IO中的InputStream和OutputStream之类的,但是上网查了一下文件拷贝也是有很多种方法的,除了IO,还有 ...

  7. nio java 内核拷贝_大文件拷贝,试试NIO的内存映射

    最近项目里有个需求需要实现文件拷贝,在java中文件拷贝流的读写,很容易就想到IO中的InputStream和OutputStream之类的,但是上网查了一下文件拷贝也是有很多种方法的,除了IO,还有 ...

  8. 服务器不知道循环生成文件,Windows服务器下PowerShell命令往服务器共享文件夹进行文件拷贝、循环文件重命名...

    由于项目需要,接触到了PowerShell命令,但是苦于以前没有接触过,几句话的代码百度搜索了很长时间. 主要功能是Windows服务器下利用PowerShell命令实现文件拷贝.文件重命名(去掉文件 ...

  9. rman的conver方法拷贝ASM文件

    rman中的conver命令主要用户跨平台传输表空间,也可以完成从ASM何本地文件系统中拷贝文件,比用dbms_file_transfer方法要简单 从ASM拷贝到文件系统: 拷贝表空间 在拷贝表空间 ...

  10. mkfifo命名管道+fork实现文件拷贝

    mkfifo命名管道+fork实现文件拷贝 头文件及全局变量与函数定义 #include<stdio.h> #include<unistd.h> #include<std ...

最新文章

  1. Mongodb集群 - 副本集内部选举机制
  2. LAMP平台部署及应用
  3. 12c oracle 修改内存_Oracle12c中性能优化功能增强新特性之重大突破——内存列存储新特性...
  4. 文件上传打满服务器带宽,文件上传云服务器 带宽选择
  5. 又一编辑神器-百度编辑器-Ueditor
  6. eclipse android或者Java应用查看jdk路径和版本与android studio查看jdk版本
  7. hpe服务器稳定性,hpe服务器安装与配置
  8. vue对象拼接_vue 俩个数组对象合并成一个
  9. raid0 raid1 raid5 raid10工作模式的工作原理及特点
  10. iOS开发之错误码国际化
  11. 51单片机C语言智能小车,基于51单片机智能小车的设计与实现
  12. 支持alpha通道的视频编码格式以及容器类型汇总
  13. Java代理模式实现与原理详解(一)
  14. c++自动抢购_软件神器—全网口罩监控抢购
  15. Word2013出现未响应的解决方法
  16. 【运筹学】整数规划 ( 整数规划问题解的特征 | 整数规划问题 与 松弛问题 示例 )
  17. 介绍一种冷门但简单的双拼方案——紫光双拼
  18. 积化和差 和差化积公式
  19. oracle查询当前归档scn_Oracle查询归档日志
  20. python3文件读写实例_2.2.3.1Python-实例---文件读写

热门文章

  1. Otsu‘s Thresholding的工作原理
  2. OpenCV : 图像数字化
  3. 阿里云云计算 48 云安全中心
  4. python字节码解析_简单入门python字节码混淆
  5. 124.二叉树中的最大路径和
  6. 圆环和环形是一样的吗_饼图太丑?只需3步,立马变身成好看的环形图!
  7. h5商城模板_几个常用H5制作软件、网站推荐
  8. 【知识图谱系列】多关系异质知识图谱表示学习综述
  9. Eclipse找不到或无法加载主类
  10. 回来bool的函数无return时返回true还是false