WriteSupportForNTFS

Please check the status of this specification in Launchpad before editing it. If it is Approved, contact the Assignee or another knowledgeable person before making changes.

Summary

The aim of this specification is to make NTFS read/write support a reality in Ubuntu. It separates the implementation in two stages:

  • Make NTFS read/write support available for mounting internal & external device.

  • Make NTFS read/write support default for all device.

Rationale

Newcomers often ask how they can write to their NTFS partitions. This is a known barrier to entry for many Windows users, for whom reformatting all their partitions as ext3 or FAT32 is not acceptable.

A lot of progress has been made in this area in the last few months, and a stable solution is now available to get full read/write access. It needs some integration work so that it can be usable for mounting internal and external devices. When this is done, it would be easy to make it the default.

Use cases

  • Bob just installed Ubuntu in dual boot and he is really happy with it. All his hardware was recognized, and he could even browse his Windows partition. Unfortunately, when he tries to reorganize his photo album, he discovers that he cannot move anything.
  • Stella has been a Linux user for many years. For her NTFS is evil and she will never format a partition in this format. However, not all her friends are Linux users. One day, one of them came with a new shiny USB external drive. She wanted to share some music with him, but unfortunately the external drive was formatted in NTFS.
  • Jeff is not yet a 100% Linux user, and still switches between Windows and Ubuntu. To make his life easier, he would like to share her thunderbird profile between Windows and Ubuntu, but he is struggling with some permission error he doesn't understand, due to the fact that he can't write on her NTFS partition.

Design

Review of the different drivers available

  • The kernel driver : The kernel NTFS driver takes the approach of reverse engineering filesystem data structures (and possibly ntfs.sys itself). Unfortunately after many years of its development it has not yet reached a state of reliable read-write access, although its read-only part is considered trustworthy. Apparently, some work is currently being done to implement the write part, but this will probably take a lot of time, and we can't judge its status since it is done in closed development.

  • Captive NTFS : Jan Kratochvil suggested to "emulate" the original Microsoft Windows ntfs.sys driver using something like wine and doing that in the userspace with FUSE. It leads to a theoretically 100% compatible driver, but the wrapper itself is known to have some bugs, and on top, the result is a really slow driver. Captive NTFS crashes and corrupts NTFS by running this simple test: for i in $(seq 1 200) ; do touch $i ; done. It's also officially unmaintained. Not much to say about it.

  • The FUSE driver ntfsmount/ntfs-fuse : In 2005, the linux-ntfs team released ntfsmount, a FUSE driver that relies on libntfs, a library that provides common NTFS access functions. The result is a driver a bit slower than the kernel one (because it resides in user-space), but with a lot more features. It implements some common writing functionality that is not 100% reliable, but because it uses FUSE, the process can be stopped before it can do something unsupported, leaving the device clean. However, this driver is far from being feature rich, and for example, creation of a directory may only succeed in 50% of the cases (test of the author).

  • The FUSE driver ntfs-3g : On 2006-07-14, a member of the linux-ntfs team, Szabolcs Szakacsits, presented a new version of ntfsmount and libntfs. This project, ntfs-3g (for third generation Linux NTFS driver), is a huge improvement to ntfsmount in functionality, reliability, quality and performance. It supports full read/write access to NTFS, excluding access to encrypted files, writing compressed files, changing file ownership, access right. The project is now separate from the linux-ntfs team, and is actively developed. Lots of people participated in its improvement, and even if the current status of the project is still beta, read/write support is stable. As of late December 2006 it is already used by some major Linux distributions and its usage is recommended by its maintainers. It is currently used successfully by hundreds of thousands of users.

Conclusion : ntfs-3g is the only driver that can accomplish the aim of this spec.

Approach

Stage 1: read/write support available for mounting internal and external devices

The first stage is to make ntfs-3g usable for mounting internal and external devices. This will require making some changes in gnome-mount and hal so that they support it.

At the end:

  • users will be able to mount external devices with ntfs-3g simply by setting "ntfs-3g" for File system in the Volume tab of nautilus.
  • users will be able to mount internal devices with ntfs-3g either with fstab, or using the same method as for external devices (see MountAllLocalFilesystems)

Stage 2: read/write support by default

Make ntfs-3g the default instead of the kernel driver.

Implementation

Stage 1

  • [Done] In hal : make it support fuse ( Bug 35354) : use a patch from upstream git attach in the bug report.

  • [Done] In hal : set locale= as volume.mount.valid_options for ntfs fs. ( Bug 78370)

  • [Done] In gnome-mount : set default settings for ntfs-3g to "locale=", and patch it so that it can handle the locale= option (Bug 78375). A patch is attach in the bug report to implement both changes.

Stage 2

  • [Done] Move fuse binaries fusermount and ulockmgr_server from /usr/bin to /bin

  • [Done] Move ntfs-3g binary to /, so that it can safely be linked into /sbin even when a separate /usr is in use and automounting NTFS during boot will work properly

  • [Done] Promote ntfs-3g to main and install it by default

  • [Done] Link /bin/ntfs-3g to /sbin/mount.ntfs

  • [Done] Change the specific options for ntfs in the mount manual to the one specific to ntfs-3g

  • [Done] Change /etc/init.d/mountall.sh to source /etc/default/locale if available before mounting filesystems, so that the system locale can be used for file name translation

  • [Done] For external devices, change gnome-mount default options for ntfs to the one already set for ntfs-3g.

Documentation

BoF agenda and discussion

I have been using this & works fine on my Ubuntu Edgy. However, a user needs to install the "locales" separately, to view/support Native Language characters (when appropriate). -dvarsam 2007-01-18

I don't think this is a problem : - locales is ubuntu-minimal. - configuring this option can be easily done. - gnome-mount for feisty support this option (see the current state of the implementation on the wiki page) -givre 01/18/07

Warning /!\ warning Warning /!\ ntfg-3g uses the ntfs partitions in the POSIX way, bacause it was built to be compatible with POSIX for interoperability. This is not explicitally told to the user which runs ntfs-config, and I think that most users does not know this. Anyway the windows user could (and really MUST) install (in windows) Windows Services for Unix, available for free (though microsoft say it is a security risk to use POSIX filesystems because case sensitivity might confuse the user which might run troyans instead of the wanted software). There is a discussion on this bug report #124480

Note that apparently fuse 2.7.0 is needed to make this work properly. --ColinWatson


CategorySpec

WriteSupportForNTFS (last edited 2008-08-06 16:17:54 by localhost)