The Linux vfat driver seems to disallow certain characters in vfat long file names: ?<>\:*|". I understand that Windows doesn't support these characters, but Wikipedia seems to indicate that the filesystem, itself, supports any non-null 16-bit unicode character. If that is this the case, why does the Linux driver restrict the usable characters? Is it simply for compatibility, or is there actually a technical limitation that's not mentioned on the Wikipedia page? If the former, is there anyway to override this limitation?

NTFS-3g supports writing these characters to NTFS, which is very nice when I'm moving files between Linux systems with my external hard drive. It'd be great if I could do the same with VFAT.

  • And how do you think windows will read such files? If you wanna use any characters in filenames, don't use such filesystems. Why you don't want to format your flash/USB-HDD into ext2 or other linux filesystem? Another variant is to create a 4GB file with ext2 and mount in through loop-device. – Eddy_Em Sep 26 '13 at 5:58
  • I would expect it to work the same way it does with NTFS: Windows wouldn't be able to read those specific files, but it would be able to read others on the drive. I don't want to use a Linux-only filesystem on my flash drive because occasionally I do need to transfer files to/from a Windows or OS X machine. – rkjnsn Sep 26 '13 at 6:39
  • Then add there a 4GB file with ext2 or make tar archive with your files. Anyway, vfat can't work with access rights, so you won't be able to transfer files between linux machines on that flash. – Eddy_Em Sep 26 '13 at 6:41
  • Yes, I am aware that there are many possible workarounds. I'm not asking how to transfer files, I'm asking specifically why those characters aren't allowed by the Linux driver. – rkjnsn Sep 26 '13 at 6:59

If I'm not mistaken any filesystem supported by Windows (FAT/VFAT/FAT32/NTFS) should meet some standard naming conventions for valid file and directory names. The aforementioned list of characters are reserved characters which can't be used even with Unicode characters.

I would say that Linux implementation of fat/vfat filesystems tries to be compliant with this kind of "Windows standard". Perhaps, this article can bring more details regarding it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.