What it does
ntfs-3g provides reliable read/write access to NTFS volumes by mounting them via the Linux FUSE layer. Once mounted, NTFS behaves like a normal directory tree (files, permissions mapping, timestamps) so you can use standard tools (cp, rsync, tar, etc.).
You typically call it through mount as -t ntfs-3g, or directly as ntfs-3g with a device and mountpoint.
How it works (mechanical)
NTFS support is implemented in userspace. The kernel hands filesystem operations (open/read/write/rename, etc.) to a FUSE process. That process (ntfs-3g) interprets NTFS structures on disk, performs the requested action, and returns results back through FUSE to the calling program.
- Kernel handles device I/O + caching + FUSE plumbing.
- ntfs-3g interprets NTFS metadata (MFT, attributes, ACLs, journaling semantics).
- Linux permissions are mapped (not identical to Windows ACLs) using mount options.
10 Practical Examples
Tip: identify the partition first with lsblk / blkid.
# 1) See disks/partitions and filesystems lsblk -f blkid
# 2) Create a mount point and mount an NTFS partition read/write sudo mkdir -p /mnt/win sudo mount -t ntfs-3g /dev/sdb1 /mnt/win
# 3) Mount read-only (safe for recovery / unknown health) sudo mount -t ntfs-3g -o ro /dev/sdb1 /mnt/win
# 4) Allow non-root user access (common for desktop/external drives) # (replace 'craig' with your username) sudo mount -t ntfs-3g -o uid=$(id -u craig),gid=$(id -g craig),umask=022 /dev/sdb1 /mnt/win
# 5) Make everything readable/writable by your user only (more permissive for personal drives) sudo mount -t ntfs-3g -o uid=$(id -u),gid=$(id -g),umask=007 /dev/sdb1 /mnt/win
# 6) Mount by UUID (more stable than /dev/sdX names) # find UUID with: blkid sudo mount -t ntfs-3g UUID=1234-ABCD /mnt/win
# 7) Add a persistent /etc/fstab entry (mount on boot) # Example line (edit UUID + mountpoint + options to match your needs): UUID=1234-ABCD /mnt/win ntfs-3g defaults,uid=1000,gid=1000,umask=022 0 0
# 8) If Windows "fast startup" left the volume hibernated, mount read-only to copy data sudo mount -t ntfs-3g -o ro /dev/sdb1 /mnt/win # then copy data out: rsync -aH --info=progress2 /mnt/win/Users/You/Documents/ ~/recovered-docs/
# 9) Attempt to clear a dirty NTFS flag / minor repair (NOT a full chkdsk replacement) # Unmount first if mounted: sudo umount /mnt/win sudo ntfsfix /dev/sdb1
# 10) Safely unmount when done (especially before unplugging USB drives) sudo umount /mnt/win # desktop-friendly alternative: udisksctl unmount -b /dev/sdb1
Notes & Gotchas
- Hibernation / Fast Startup: If Windows hibernated the NTFS volume, Linux may refuse RW mounts or mount read-only. Best fix is to fully shut down Windows (disable Fast Startup) and run chkdsk if needed.
- Performance: FUSE adds overhead. For large sequential transfers it can be “fine,” but it’s usually slower than native kernel filesystems.
- Permissions mapping: NTFS ACLs ≠ Linux mode bits. Use uid/gid/umask (or fmask/dmask) options to avoid surprises.
- Case behavior: NTFS is case-preserving, historically case-insensitive by default. Linux apps may assume case sensitivity.
- Do not run fsck on NTFS: Use Windows chkdsk for real repairs; ntfsfix is limited and mainly clears flags.
- Encryption: BitLocker volumes require separate tooling (e.g., dislocker) before mounting.
Modern equivalent
Many modern Linux distributions include the in-kernel NTFS driver ntfs3 (not the same as ntfs-3g). When available, it can offer better performance because it runs in kernel space.
# If your system supports it, you can try: sudo mount -t ntfs3 /dev/sdb1 /mnt/win # Or in /etc/fstab: UUID=1234-ABCD /mnt/win ntfs3 defaults,uid=1000,gid=1000,umask=022 0 0
If you’re just moving files between OSes and don’t need NTFS specifically, consider exFAT for removable drives (simple, widely supported).
Historical context (why ntfs-3g became the standard)
For many years, Linux’s in-kernel NTFS write support was limited or risky for general use. ntfs-3g became the de-facto solution because it delivered dependable read/write support in userspace via FUSE, making NTFS volumes practical for everyday Linux users—especially in dual-boot environments and on USB drives.
Related commands
- lsblk, blkid — identify devices, UUIDs, filesystem types
- mount, umount — mount/unmount filesystems
- ntfsfix — clear NTFS “dirty” flags / basic fixes (limited)
- fdisk, parted — partition management
- udisksctl — desktop-friendly mount/unmount operations
- chkdsk (Windows) — the real NTFS repair tool