72

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.

14
  • 3
    Here is the answer: Cross-platform file system
    – Marco
    Dec 27, 2012 at 16:24
  • @Marco I'd like it to work without drivers or additional installations, so it can be used on any computer.
    – tkbx
    Dec 27, 2012 at 16:25
  • 2
    If you want files larger than 4GiB there's just one choice, UDF.
    – Marco
    Dec 27, 2012 at 16:27
  • @Marco I don't see that in GParted, how can I make a UDF partition?
    – tkbx
    Dec 27, 2012 at 16:33
  • 1
    With mkudffs from the package udftools.
    – Marco
    Dec 27, 2012 at 16:46

5 Answers 5

34

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 udftools.

8
  • 1
    Wait, Vista and later will recognize UDF on flash or regular hard disks? Last time I tried that I guess it was XP thought it was only for optical media. That's good news.
    – psusi
    Dec 27, 2012 at 21:05
  • I don't have a windows to test, but I would assume that it works for both. If the OS contains a driver to read UDF what would be a reason to not use it for a particular storage backend technology? And what would happen if the regular disk is a flash drive? Well, I guess in that case it works just sometimes.
    – Marco
    Dec 27, 2012 at 21:49
  • 1
    I assumed the same thing but last time I tried it, Microsoft stupidly refused to recognize it on a hard disk/flash drive, even though they could on a cdrom.
    – psusi
    Dec 27, 2012 at 22:52
  • 2
    @Marco I'm afraid that for Windows the implication "have a fs driver" => "will work on any media" is not guaranteed. Why that is is another question, but I just wouldn't take it for granted. It would expect it to work for DVD-RAM for though.
    – peterph
    Dec 28, 2012 at 9:30
  • 9
    Since September 2006 due to CVE-2006-4145 kernel has disabled writing extents larger than 1Gb in size. In order to write files larger than 1Gb UDF driver should be updated to write more extents for a file. This has not happened till present (2015), so on linux UDF has been even worse than FAT32 for years.
    – Zart
    Mar 21, 2015 at 10:05
17

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

6
  • 5
    No, that is not truth. FAT32 limits only maximum filesize to 4GB, but I have seen FAT32 partitions sizes more than 200GB. So maximum size of FAT32 is 512GB per partition. look here: en.wikipedia.org/wiki/File_Allocation_Table
    – MIrra
    Dec 28, 2012 at 0:52
  • 1
    @MIrra but a 640GB HDD of mine came as FAT32...
    – tkbx
    Dec 28, 2012 at 3:28
  • 4
    @MIrra 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).
    – peterph
    Dec 28, 2012 at 9:22
  • 2
    Anyone at this skill level should never ever have to touch any untrusted 3rd party storage like Dropbox. Just use sshfs on your server, which should work out of the box, and be done with it. Yes, there are many SSHFS clients for Windows, offering normal mounting abilities.
    – anon
    Dec 22, 2015 at 19:19
  • 1
    Yes, you are right. Dropbox is no more secure solution, as we know better solution might be for example owncloud installed on your own server, or to use sshfs client as Evi1m4chine said.
    – MIrra
    Mar 25, 2016 at 20:11
12

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.

Update: Microsoft publicly released the exFAT specification in 2019 and exFAT is available as kernel driver in Linux 5.4+. For additional information see wikipedia, MS blog.

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.

4
  • 6
    Now, I just have to wonder why Apple and Microsoft can't get off their proprietary horse and support ext.
    – tkbx
    Dec 27, 2012 at 16:48
  • @tkbx It would mean more work for them (to get such code from scratch up to their standards), and not many users are complaining, I guess (and by "many" I mean "big corporate users that could cause bad publicity"). Those that do complain usually decide to use some open-source solution as an add-on (i.e. thay don't have the requirement for it to work without any additional software).
    – peterph
    Dec 27, 2012 at 16:55
  • 13
    Also, let's hope there isn't a Windows in 2029.
    – tkbx
    Dec 28, 2012 at 3:34
  • 2
    @tkbx If I remember correctly people stopped using it in 2033, and they were then just a cloud platform provider. However the use of 3 character file-name extensions carried on for years at least to 2099. Jan 8, 2021 at 7:29
8

I'd suggest 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 exfat-fuse and exfat-utils packages:

sudo apt-get install exfat-fuse exfat-utils
5
  • 1
    The exfat driver for macos is not as full-featured as on windows, and on mac the drive often gets the dirty flag set, as result you might need to to wait for hours (on multi-TB drives) the next time you plug it it because fsck_exfat has to finish checking it. The linux driver for exfat is userland and often leads to high CPU. There is a kernel-mode exfat linux driver but that's not official and can be buggy.
    – ccpizza
    Oct 12, 2019 at 23:05
  • It's true, exfat is proprietary (but recently Microsoft seems to be willing to solve this), and current Linux and MacOS implementations have limitations, but imho it's still the best modern file system for interoperability.
    – gerlos
    Oct 13, 2019 at 10:18
  • 2
    Agreed, given the lack of a better alternative exfat is currently the lowest common denominator and works even with android devices (with a OTG cable you can connect flash and hdd drives formatted as exfat). It lacks symlinks and permissions support, is not compatible with NFS but otherwise is ok for data storage. On Mac it can be problematic when the dirty bit gets set; I've described a workaround here: superuser.com/a/1491743/65975
    – ccpizza
    Oct 13, 2019 at 10:32
  • 1
    The fact that exFAT is also accessible to Android and even iOS is a great plus.
    – cipricus
    Feb 5, 2021 at 21:43
  • 3
    Patents problems seems to be solved, and since Linux 5.7 (2020-04) good exfat file system support is included in the kernel, so now there isn't any reason to not use it. See phoronix.com/…
    – gerlos
    Feb 6, 2021 at 22:53
1

Which filesystem to use for Windows, Mac, and Linux?

Quick summary:

exFAT on an SSD, with 8 KiB cluster size. exFAT is natively read/writable on all 3 OSs, without any additional installation, configuration, or work. And the 8 KiB cluster size is a good tradeoff between speed and wasted space (study the plots I produced at the bottom of this answer).

You can also consider NTFS, but it requires extra drivers for MacOS to write on it. See the bottom of my answer for links.

More detail:

  1. Linux only: ext4
  2. Windows only: ntfs
  3. MacOs only: apfs
  4. Linux & Windows: ntfs
  5. Mac & Windows: exFAT
  6. Linux & Mac: exFAT
  7. Windows, Mac, & Linux: exFAT

Long answer:

Here's what I recommend you format your filesystem to for Linux, Windows, and Mac.

  1. For single OS use:
    1. For Linux use only, including on external hard drives, format your filesystem as ext4 via the gparted GUI. EXT4 is a Linux file format. This is what I use the most, even on external hard drives, since I'm a heavy Linux user.

      1. For optional encryption, use LUKS, which can be configured through the Gnome Disks GUI.
    2. For Windows use only, format the filesystem as ntfs via the gparted GUI.

      1. For optional encryption, use a VeraCrypt container stored on the NTFS partition. If running the NTFS filesystem in Windows, you can encrypt your whole disk using VeraCrypt, but that works for Windows only with this tool.
    3. For MacOS use only, format the filesystem as apfs (Apple Filesystem). This must be done on a Mac via the Mac Disks utility. There are several format options available in this utility, as shown here, including "APFS", "APFS (Encrypted)", "APFS (Case-sensitive)", "APFS (Case-sensitive, Encrypted)": enter image description here

      1. There is currently no fully-functional APFS open source implementation available on any operating system today, that I am aware of, as Apple wants. They like to have their equipment be as incompatible as possible. You can see some tools here though: Super User: How to mount APFS on Linux or Windows?
      2. For optional encryption, turn on the File Vault encryption inside the MacOS security settings.
  2. For shared OS use:
    1. For sharing files between Linux and Windows, use ntfs, formatted via the gparted GUI. NTFS is a Microsoft file format, but Linux, such as Linux Ubuntu, fully supports both reading and writing to it with no additional configuration.
      1. For optional encryption, use a VeraCrypt container stored on the NTFS partition.
    2. For sharing files between Mac and Windows, Linux and Mac, Windows and Mac, or Windows, Mac, and Linux, use exFAT, formatted via the command-line on Linux, as I show in my article on my website here: exFAT filesystem speed and disk usage based on cluster size - Formatting an exFAT drive on Linux Ubuntu.
      1. ExFAT is a Microsoft file format, but its specifications have apparently been fully released, and Windows, Mac, and Linux all support reading and writing to it without additional configuration on any system. Both Mac and Windows have exFAT as a format option in their disk GUI utilities as well, and Linux supports formatting to this type as well via the Gnome Disks utility and the command line, which I show below. You can also use FAT32, but it is much more limited than exFAT, particular with its 4 GiB maximum file size limit, as shown in the "Limits" table from Microsoft here, so I strongly recommend exFAT instead.
      2. For optional encryption, use a VeraCrypt container stored on the exFAT partition.

Note: when formatting your exFAT partition, I recommend a cluster size of 8 KiB. 128 KiB gets you slightly better speed, but wastes a lot more disk space if you have a lot of small files. Don't go higher than that or else you waste a ton of disk space when you have small files.

See my plots here for details:

enter image description here

Read more here:

  1. My answer: Is it best to reformat the hard drive to exFAT using 512kb chunk, or smaller or bigger chunks?
  2. My website article: https://gabrielstaples.com/exfat-clusters/
  3. My full Python matplotlib/numpy plotting code is here: https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/blob/master/stack_exchange/format_exFAT_PLOTS.py

NTFS drivers for MacOS:

exFAT's big downside is it doesn't support symlinks. In that case, maybe consider NTFS. It's compatible natively with Windows and Linux, and with some extra drivers you can make it work for writing on MacOS. Ex: https://toolbox.easeus.com/ntfs-for-mac/index.html Or a free tool is mentioned here: https://superuser.com/a/45144/425838

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .