FAT/FAT32/VFAT 文件系统上的文件顺序

FAT/FAT32/VFAT 文件系统上的文件顺序

我有几个音频设备(汽车收音机、便携式收音机、MP3 播放器),它们支持带有 FAT 文件系统的 SD 卡和 USB 记忆棒。由于这些设备的智能有限,它们不会按名称对 FAT FS 上的文件名进行排序,而只是按照复制到 SD 卡的顺序播放它们。

在 MS DOS 和 MS Windows 中这不是问题;使用一个简单的实用程序按字母顺序对文件进行排序,然后按该顺序复制它们就可以了。然而,在 Linux 上,从 ext4 文件系统复制的文件最终不会按照读取和复制的顺序到达 FAT FS,大概是因为存在缓冲机制,该机制提高了效率,但并没有提高效率。过于担心文件最终在目标设备上的物理顺序。

我还尝试在 Virtual Box VM 中使用 Windows,但文件最终的写入顺序仍然与从 Linux 文件系统读取的顺序不同。

有没有一种方法(不需要手动将它们逐个复制并等待所有写入缓冲区被刷新)来确保文件最终按照从 ext4 文件系统读取的顺序出现在 FAT SD 目标上?

答案1

根据我的经验,将文件按正确的顺序移动到位(例如移动文件 A然后如果您想要顺序“ACB”,则先文件 C,然后文件 B)有效只要你一次完成所有的事情

换句话说,如果您已经有文件然后添加更多文件,它们可能会被注入任何地方按顺序排列,这可能不是您想要的。

所以我的伎俩,当我添加目录中的文件,是先移动全部文件出来,然后按正确的顺序重新添加它们。我通常使用编号前缀对所有文件进行编号,这样我就可以按字母顺序排序,然后将它们一次性全部移回。

所以它看起来像这样:

mv 100newfileA 101newfileB folder/
cd folder
mkdir order
mv * order
mv order/* .

这完全是奇怪和反直觉的,但它对我的情况有效。

顺便说一句,在 Linux/UNIX 系统中,按实际磁盘顺序(而不是字母顺序)列出文件的可靠方法是使用ls -U(或ls --sort=none)。

答案2

我记得很久以前就问过这个问题(欢迎大家搜索)。我对这个漫长的未来时间的猜测是:使用选项安装设备sync(删除缓冲),对列表进行排序以确保它们按顺序复制。

相关内容