I use Linux and Mac OS X on a regular basis, and sometimes I have to use Windows. I need to use a flash drive on all three, and I need a filesystem that will work well on all of them. None of the ext's work on Mac or Windows, HFS+ doesn't work on Windows (or well on Linux), NTFS is read-only on Mac, and FAT sucks on all OSes. Is there a file system that would work reasonably well on all operating systems? I'd like it to work without drivers or additional installations, so it can be used on any computer.
UDF is a candidate. It works out-of-the-box on linux >= 2.6.31, Windows >= Vista, MacOS >= 9 and on many BSDs.
Note: UDF comes in different versions, which are not equally supported on all platforms, see Wikipedia - Compatibility.
UDF can be created on Linux with the tool
mkudffs from the package
Without troubles, use FAT32. There is no other compatible possibility. Linux since version 2.6.xy has no more problems with NTFS, but Mac OS does...Maybe you could make more partitions at your flash, but this is actualy not great solution.
Other solution: Try to imagine you have 4GB flash memory. Split it to 2 partitions. 1) FAT32 with freeware portable applications to access all other FS types. 2) Universal partition, which can be whatever you want - NTFS, ReiserFS (if you want real security and encryption) or whatever. Thanks first partition of your flash memory, you can easily read/write from whatever OS, because of programms you have stored at your FAT32 partition of your flash memory.
Better solution: Forget using a flash drive. Use Dropbox or something through network. They are one of the simplest ways of sharing files between machines.
edit: Thank you for correction: let me write one of comments here: " the maximum size depends on the selected cluster size. The limits really are from 2TB to 16TB for cluster sizes 512B to 4KB for FAT32 (also mentioned on the wikipage)." That is right, excuse my mistake.
Thank you peterph
Since you have cut it to the filesystems supported by OS X and Windows out of the box, I'm afraid the least common denominator is FAT32. exFAT might be an option if you can relax the requirement and accept using FUSE - it is patent encumbered and hence it isn't going to make it to kernel till 2029 or until Microsoft grants the patent on royalty-free basis, whichever happens first.
On the other hand, remember that lots of informed people would argue that exFAT trades of functionality for simplicity. Thus you will get something that is capable of storing data and works across various OSes, but feature-wise is rather rudimentary.
exFAT. Here's why:
- It works in RW everywhere (unlike NTFS, that's supported read only on Mac OSX), it's included in Windows since Windows XP and in Mac OSX since Mac OS X 10.6 (Snow Leopard), and afaik all the GNU/Linux distros out there includes packages for it in default repos.
Even Android devices, iOS devices (iPhones and iPads), and some smart TVs support it as of year 2017.
- It doesn't support permissions and ownership of files (unlike ext2/3/4, NTFS and HFS+), and it's a good thing, since they can be very annoying on a flash drive that you often connect to several, different, computers.
- It supports large disks and big file systems without wasting space, and supports files bigger than 4GB (unlike FAT32). It supports almost any unicode character in file and directory names (unlike FAT32
- It's simple enough to be fast (unlike NTFS) and reliable (unlike FAT32).
- With SDXC cards exFAT became the standard for SD and micro SD cards with storage bigger than 32 GB, so one can expect support for it in most recent cameras, camcorders, smartphones and game consoles. So even if you don't think to need it, maybe you already have one or more devices using it or ready for it.
Unfortunately, patents on exFAT prevent to include it in mainline Linux kernel, so you need to manually install an implementation of exFAT to add support for it in your system. Anyways, once you install it, the system will be able to mount or unmount it using normal mechanisms.
Most distros provide packages to install a FUSE implementation that works fine and flawlessly. I used it for flash drives, SD cards and external USB disks, and I'm happy with it.
I'd expect a FUSE file system to be slower than a native one, but most often the bottle neck is in the hardware, not in the file system (often flash drives themselves are slower than file system drivers), so for "normal" use it won't be a problem at all.
To use exFAT on Ubuntu and Debian you just need to install the
sudo apt-get install exfat-fuse exfat-utils