如何将大于4GB的文件复制到USB闪存盘?

我正在尝试将6GB文件复制到USB闪存驱动器,但它不会复制。

这是由于FAT32限制。 大于4GB的文件不能存储在FAT32卷上。 将闪存驱动器格式化为exFAT或NTFS将解决此问题。

警告:备份您的数据。 格式化将删除设备上的所有数据。

如果您不想重新格式化USB驱动器或需要它是FAT32,您只需大文件拆分为多个部分即可。 大多数归档管理器都带有拆分选项,而命令行则有split ,例如对于您的情况:

 split -b4294967295 /path/to/input.file /path/to/pen/drive/output.file. 

有关完整文档,请参阅man split 。 这将创建以下文件:

 4,0G output.file.aa 1,6G output.file.ab 

output.file.aa的文件大小完全匹配FAT32格式化USB驱动器的最大文件大小,即4 Gibibyte (GiB,与Gigabyte GB不同) 减去1字节
感谢Gilles这个重要的补充。


在再次访问该文件之前,您需要先合并其部件。 在Linux系统上,您可以使用:

 cat output.file.* > input.file 

如果您担心这可能会错误地将文件排序为In Bash,那么通配符扩展是否保证有序?
Windows系统上的相应命令是:

 copy /b output.file.aa+output.file.ab input.file 

除了许多其他有用的GNU实用程序之外,还可以在Windows中安装split ,请参阅Win32的GNU实用程序 。

问题:FAT32对文件大小有4GiB限制

检查不同的场景和文件系统,寻找考虑的替代方案

  • 文件大小问题
  • 哪些操作系统应该读/写USB驱动器

仅限Linux

如果您打算仅将驱动器与Ubuntu(和其他Linux发行版)一起使用,那么最好使用linux文件系统 ,例如ext4 。 这样,您可以获得更高的读/写速度(取决于哪个进程是瓶颈),并且您将获得更高的所有权和权限灵活性。

  • 您可以使用gparted的GUI程序来创建ext4文件系统。

完全兼容Linux,Windows和MacOS

Windows在linux文件系统方面存在问题,我认为MacOS在linux文件系统和NTFS方面都存在问题。 因此,如果您想要“完全兼容”进行读写,则只保留FAT32UDFexFAT

  • FAT32对文件大小有4GiB(gibibyte,base 2)限制。

    • 可以在所有三个操作系统中创建。
    • 如果您可以访问Windows,则在Windows中维护(修复)。
    • 可以用dosfsck在Ubuntu中dosfsck ,它包含dosfstools包,

       sudo apt-get install dosfstools sudo dosfsck -a /dev/sdxn # least destructive option sudo dosfsck -r /dev/sdxn # more powerful option 

      其中x是驱动器号,n是分区号,例如驱动器b中第一个分区的/dev/sdb1

  • UDF可能缺少修复文件系统的工具,

    • FOSS
    • 也许有可能通过以下链接在Windows中找到修复工具: 用于UDF的fsck工具 ,并且有一些工具可用作源代码
    • 可以在Ubuntu中创建
    • 兼容linux风格的链接。
    • 兼容linux样式权限。 您可以创建和修改单个文件的权限(FAT和NTFS无法实现)。
    • Windows 10不会提示UDF分区进行格式化(而linux ext4文件系统会受到影响,并且可能会被误删除)。
    • 如何创建和使用UDF: 使用UDF作为USB棒的FAT后继

      所以,要使用它,假设你的USB棒是/dev/sdx

      1. 安装包udftools

         sudo apt-get install udftools 
      2. 使用gpartedgnome-disks创建分区表和一个分区

      3. 用危险的dd擦除目标分区的第一个mibibyte(仔细检查命令行!)

         sudo dd if=/dev/zero of=/dev/sdx1 bs=1M count=1 
      4. 运行mkudffs

         sudo mkudffs -b 512 --media-type=hd --lvid=my-label /dev/sdx1 

      擦除分区的第一个mibibyte以清除以前的文件系统信息(或其他剩余数据),以防止USB棒在使用UDF格式化后被检测为FAT。

      -b 512用于强制文件系统块大小等于USB棒的物理块大小,这是UDF规范所要求的。 如果你有幸拥有一个更合适的块大小的USB记忆棒,请调整它。

      之后,您的USB记忆棒可用于GNU / Linux和其他免费操作系统的读写,当然还有当前版本的Windows(只读过时的XP版本)和MacOS。

  • exFAT是另一种选择。 它与FAT32UDF相比是新的,并声称效果很好

    • 原生与Windows
    • 与MacOS
    • 用Linux

更多关于exFAT的信息

我已经开始在Ubuntu中测试exFAT了。 当我有更多使用它的经验时,我打算编辑这个答案。 让我们从以下链接开始,

  • en.wikipedia.org/wiki/ExFAT

    ExFAT是Microsoft优化的专有文件系统

    嵌入式系统,因为它重量轻,更适合具有低内存和低功耗要求的解决方案,并且可以在固件中实现。

  • 如何获得使用exfat格式化的驱动器(在Ubuntu中)

这个命令行在 Ubuntu中安装exFAT的[read / write]支持

 sudo apt-get install exfat-utils exfat-fuse 
  • 可以使用以下命令行在Windows和MacOS 以及Linux中创建

     sudo mkfs.exfat -n YOUR-LABEL /dev/sdxi 

    其中x是驱动器号, i是分区号,例如/dev/sdb1

  • 可以在Windows中维护。

我的第一个测试结果

  • 创建exFAT文件系统在Ubuntu(16.04 LTS(64位),安装了Xenial内核系列(4.4.0-93-generic)系统,最新版)中运行良好。
  • 写入和读取大于4 GiB的文件是成功的。 Ubuntu和exFAT正确且快速地合作(我用md5sum检查并且速度受到USB系统的限制)。
  • Ubuntu和Windows可以读取在其他操作系统中创建的内容。 (我没有MacOS进行测试,必须依赖其他人的报告。)

视窗

因此,如果您想要从Ubuntu和Windows获得完全读/写访问权限,我建议您使用NTFS ,它具有日志function,并且作为Windows的[专有]文件系统进行了大量调试和优化。 (也可以使用exFAT 。)

  • 在Ubuntu中,您可以使用gparted的GUI程序来创建NTFS文件系统。
  • 在Windows中,很容易创建NTFS和exFAT文件系统(它们是本机的)。

苹果系统

在MacOS中,可以使用FAT32UDFexFAT

您还可以使用ext4解决方法,在虚拟机中使用带有SSH服务器的Ubuntu Server 。 (我认为同样的解决方法也适用于Windows。)当您打算通过驱动器及其文件系统访问大量文件时,这可能是值得的,但可能不适用于小型USB2 pendrive。

看到这个链接,

在OS X Yosemite上使用ext4,这是一种长而安全的方式

有一个类似的问题,并且不愿意重新格式化USB记忆棒,我只使用了一个归档器。 或多或少所有现代GUI(例如File Roller,7Zip等)或CLI都允许拆分存档文件。 将分割限制设置在FAT边界以下(有点4GB),对于速度你可以选择低压缩率,甚至“存储”,即根本不压缩,瞧!

如果您可以访问Windows计算机,则无需格式化即可转换USB-stick文件系统。 您应该按如下方式使用Windows命令行:按Win + R ,键入cmd – > OK ,在打开的窗口中输入命令convert X: /FS:ntfs其中X:是已安装的USB记忆棒的字母。 不到一分钟就准备好了。 请享用。

重新格式化或使用拆分是很好的选择,或者您可以尝试使用zip来压缩文件,只需知道某些文件已经被压缩,因此压缩它们会使它们变大。 (您也可能丢失文件所有权,时间戳等)