How to Read exFAT/NTFS External Drives on Arch Linux

How to Read exFAT/NTFS External Drives on Arch Linux

One of the common tasks for Linux users, especially those who dual-boot or transfer data between multiple systems, is accessing external storage drives formatted with exFAT or NTFS. These file systems are prevalent on Windows and macOS, and while Linux has matured to support them well, users on minimalist distributions like Arch Linux often need to set up support manually.

In this guide, we will walk through everything you need to read and write to exFAT and NTFS drives on Arch Linux, covering the necessary packages, mounting techniques, and useful tips for troubleshooting and automation.


📁 Understanding exFAT and NTFS

Before diving into the technical steps, it helps to understand what these file systems are:

  • NTFS (New Technology File System) is the default file system used by Windows. It supports large files, permissions, compression, encryption, and more.
  • exFAT (Extended File Allocation Table) is designed for flash storage devices and external drives. It’s simpler than NTFS and supported by both Windows and macOS, making it ideal for cross-platform portability.

While Linux can read/write FAT32 out of the box, NTFS and exFAT require additional drivers or packages, especially in Arch’s rolling-release ecosystem.


🔧 Step 1: Identify the Drive

Before mounting any drive, you need to know its device name. Plug in your external drive and run:

lsblk

This will output something like:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 465.8G  0 disk 
├─sda1   8:1    0   512M  0 part /boot
├─sda2   8:2    0    64G  0 part /
└─sda3   8:3    0 401.3G  0 part /home
sdb      8:16   1  58.8G  0 disk 
└─sdb1   8:17   1  58.8G  0 part 

Assume /dev/sdb1 is your external drive partition.

To detect the file system type, use:

sudo blkid /dev/sdb1

Sample output:

/dev/sdb1: LABEL="MYDRIVE" UUID="XXXX-XXXX" TYPE="exfat" ...

or:

/dev/sdb1: LABEL="MYDRIVE" UUID="XXXX-XXXX" TYPE="ntfs" ...

Now that you know the file system, let’s install the required tools.


📦 Step 2: Install Required Packages

2.1 exFAT Support

Arch uses the open-source exfatprogs and exfat-utils tools along with kernel modules for native support.

Install the required package:

sudo pacman -S exfatprogs

This package provides utilities like mkfs.exfat, fsck.exfat, etc.

Note: Kernel 5.7 and later (which Arch always provides) has built-in support for exFAT, so no third-party kernel module is needed.

2.2 NTFS Support

There are two main options for NTFS support:

  • ntfs-3g (FUSE-based and stable)
  • ntfsprogs (legacy, mostly merged into ntfs-3g)

We’ll go with ntfs-3g:

sudo pacman -S ntfs-3g

ntfs-3g enables full read-write capabilities for NTFS volumes and is very reliable.


📂 Step 3: Mount the Drive Manually

Let’s manually mount the external drive to verify everything is working.

3.1 Create a Mount Point

sudo mkdir -p /mnt/external

3.2 Mount exFAT Drive

sudo mount -t exfat /dev/sdb1 /mnt/external

If the file system is detected automatically, you can omit -t exfat:

sudo mount /dev/sdb1 /mnt/external

3.3 Mount NTFS Drive

Use ntfs-3g:

sudo mount -t ntfs-3g /dev/sdb1 /mnt/external

Or:

sudo mount /dev/sdb1 /mnt/external

After mounting, use:

ls /mnt/external

to list contents and verify access.


🛠 Step 4: Fixing Permissions

One common issue is that the drive mounts with root ownership, making it unwritable for normal users.

You can specify ownership using uid and gid options. First, find your user ID:

id -u
id -g

Then mount with options:

sudo mount -t exfat -o uid=1000,gid=1000 /dev/sdb1 /mnt/external

For NTFS:

sudo mount -t ntfs-3g -o uid=1000,gid=1000 /dev/sdb1 /mnt/external

This gives your user permission to read/write files.


🧩 Step 5: Automounting with fstab

If you frequently use the same drive and want it to mount automatically, you can add an entry in /etc/fstab.

5.1 Get the UUID

sudo blkid /dev/sdb1

Example UUID output:

UUID=XXXX-XXXX

5.2 Edit fstab

Open /etc/fstab:

sudo nano /etc/fstab

Add a line like this:

For exFAT:

UUID=XXXX-XXXX /mnt/external exfat defaults,uid=1000,gid=1000,noatime 0 0

For NTFS:

UUID=XXXX-XXXX /mnt/external ntfs-3g defaults,uid=1000,gid=1000,noatime 0 0

Save and test with:

sudo mount -a

🔄 Step 6: Using udisksctl (Optional)

If you prefer not to deal with manual mounts and permissions, udisksctl offers a simpler, user-friendly approach.

To mount an external drive:

udisksctl mount -b /dev/sdb1

To unmount:

udisksctl unmount -b /dev/sdb1

This method uses D-Bus and is designed to work well with desktop environments.


🧹 Step 7: Unmounting Safely

Always unmount your drive before unplugging to avoid data loss:

sudo umount /mnt/external

Or if using udisksctl:

udisksctl unmount -b /dev/sdb1

If the device is busy, you can check what’s holding it:

lsof | grep /mnt/external

Or use:

fuser -vam /mnt/external

Kill the process or wait for it to finish before unmounting.


🧪 Step 8: Troubleshooting

Here are common issues and fixes:

🧷 Mount: unknown filesystem type

  • Make sure you’ve installed exfatprogs or ntfs-3g.
  • Try mounting with the -t option explicitly.

🚫 Read-Only Mode

If the drive is marked dirty or has errors, Linux may mount it as read-only.

For NTFS, fix it on Windows:

chkdsk /f X:

Where X: is your drive letter.

For exFAT, try:

sudo fsck.exfat /dev/sdb1

🔐 Permission Denied

Make sure to use the uid/gid mount options or run as root. Also check if the files have restrictive permission bits.


💡 Bonus: Graphical Mounting Tools

If you use a desktop environment like GNOME, KDE, or XFCE, tools like GNOME Disks or KDE Partition Manager can manage and mount drives graphically.

Install them via:

sudo pacman -S gnome-disk-utility
# or
sudo pacman -S partitionmanager

These tools can even set mount options persistently.


✅ Conclusion

Reading and writing to exFAT and NTFS external drives on Arch Linux is straightforward once you install the proper packages and understand basic mounting principles. Arch’s philosophy of minimalism gives you full control, but also expects you to configure things yourself.

To recap:

  • Use exfatprogs for exFAT, and ntfs-3g for NTFS.
  • Mount manually with correct options or automate with /etc/fstab.
  • Use udisksctl or GUI tools for convenience.
  • Always unmount drives safely.

This setup ensures you can seamlessly exchange data across systems while staying fully in control of your Linux environment.