-
Notifications
You must be signed in to change notification settings - Fork 149
NTFS 3G Release History
Jean-Pierre André edited this page Oct 31, 2022
·
8 revisions
- Rejected zero-sized runs
- Avoided merging runlists with no runs
- Improved defence against maliciously tampered NTFS partitions
- Improved defence against improper use of options
- Updated the documentation
- Fixed compile error when building with libfuse < 2.8.0
- Fixed obsolete macros in configure.ac
- Signalled support of UTIME_OMIT to external libfuse2
- Fixed an improper macro usage in ntfscp.c
- Updated the repository change in the README
- Fixed vulnerability threats caused by maliciously tampered NTFS partitions
- Used kernel cacheing on read-only mounts or with lowntfs-3g
- Avoided information leak when processing garbled compressed data
- Defined option posix_nlink to compute a Posix compliant st_nlink
- Recovered space when an index root is shortened
- Replaced ENODATA with ENOATTR in xattrs functions for macOS
- Added support for 'position' argument in macOS xattr functions
- Changed default xattr access method to 'openxattr' for macOS builds
- Allowed redefining the target location of the ntfsprogs tools
- Fixed updating the allocated size when attribute lies in an extent
- Enabled actions on directories in reparse plugins
- Inserted the reparse tag in the bad reparse symlink
- Supported use of WSL special files
- Dropped rejecting having both EA and reparse data
- Enabled Creating special files the same way as WSL
- Checked the locations of MFT and MFTMirr at startup
- Processed the request argument of ioctl() as unsigned
- Accepted alternative recording of cluster size
- Fixed a poorly sized string in ntfsinfo
- Fixed ntfsfallocate on a void file
- Decoded execlink reparse points
- Fixed object type returned in readdir() for reparse points
- Exported the translations of Windows paths to current ones
- Fixed reporting an error when failed to build the mountpoint
- Reverted accessing reparse directory through internal plugins
- Cleaned object ids beyond the updated part
- Fixed reacting to missing plugin
- Returned a low level error when an ioctl fails
- Truncated SSD trimming zones to granularity supported by the device
- Made sure log file buffers are properly aligned
- Made reparse directories visible through internal plugins
- Added an option to ntfscp to copy the modification time
- Renamed undeleted files to avoid overwriting existing ones
- Extended the allowed cluster size to 2MB
- Allocated full clusters for reading and rescuing in ntfsclone
- Prevented locally defined headers from interfering with ntfs-3g ones
- Attempted mounting read-only after failed permission to read-write
- Fixed collecting the label argument in mkntfs
- Made sure log file buffers are properly aligned
- Checked log file blocks more recent than temporary ones
- Processed redo log actions associated to undoing a CompensationlogRecord
- Allowed setting a file object id without defining its birth ids
- Documented read-only mount when Windows is hibernated
- Stopped checking matches of MFTMirr against MFT at record 16
- Filtered out reparse flags for selecting plugins
- Delayed updating the MFT runlist when resizing in read-only mode
- Double-checked whether record 15 is an extent of MFT
- Checked whether the device to mount was forced read-only
- Bypassed cluster allocation errors using --ignore-fs-check in ntfsclone
- Upgraded ntfsrecover to support log files for Windows 10
- Fixed the computation of highest_vcn when applying a runlist fixup
- Fixed updating the vcn of subtree in ntfsrecover
- Relaxed checks on security descriptors
- Enabled directory operations in plugins
- Decoded more reparse tags in ntfsinfo
- Logged falling back to mounting read-only
- Fixed compiling on MacOSX (Erik Larsson)
- Changes to NTFS-3G:
- Delegated processing of special reparse points to external plugins
- Allowed kernel cacheing by lowntfs-3g when not using Posix ACLs
- Enabled fallback to read-only mount when the volume is hibernated
- Made a full check for whether an extended attribute is allowed
- Moved secaudit and usermap to ntfsprogs (now ntfssecaudit and ntfsusermap)
- Enabled encoding broken UTF-16 into broken UTF-8
- Autoconfigured selecting <sys/sysmacros.h> vs <sys/mkdev>
- Allowed using the full library API on systems without extended attributes support
- Fixed DISABLE_PLUGINS as the condition for not using plugins
- Corrected validation of multi sector transfer protected records
- Denied creating/removing files from $Extend
- Returned the size of locale encoded target as the size of symlinks
- Changes to NTFS-3G:
- Write as much data as possible in compressed attribute pwrite
- Fixed getting space for making an index non resident
- Alleviated constraints relative to reparse points
- Fixed special case of decompressing a runlist
- Fixed returning the trimming count to fstrim()
- Fixed the range of valid subauthority counts in a SID
- Updated the read-only flag even when the security attribute was cached
- Defended against reusing data from an invalid MFT record
- Simplified NTFS ACLs when group same as owner and same permission as world
- Packed/unpacked st_rdev transported as 32-bits on Solaris 64-bits
- Zero uninitialized bytes before writing compressed data
- Clear the environment when starting mount or umount
- Implemented rewinding a directory in lowntfs-3g
- Use incremental offsets when reading a directory in lowntfs-3g
- Changes to Ntfsprogs:
- Changes to mkntfs: a) Make installing mkntfs /sbin symlinks dependent on ENABLE_MOUNT_HELPER b) Mention the starting sector when it overflows in mkntfs c) Upgraded the upper-case table to same as Windows 7, 8 and 10
- Changes to ntfsresize: Fixed relocating the MFT runlists, decode the full list of bad clusters & fixed resizing an extended bad cluster list
- Changes to ntfsclone: Decoded the full list of bad clusters
- Changes to ntfsinfo: Displayed reparse point information
- Changes to ntfsdecrypt: Fixed DESX decryption
- Changes to ntfswipe: Added clarifications about several options to the manual
- New ntfsprogs tool: Included ntfsrecover to recover the updates committed by Windows (experimental)
- Overall: Made a general cleanup of endianness types for easier checks
- Changes to NTFS-3G:
- Fixed inserting a new ACL after wiping out by chkdsk
- Fixed Windows-type inheritance
- Fixed ignoring the umask mount option when permissions are used
- Fixed checking permissions when Posix ACLs are compiled in but not enabled
- Disabled option remove_hiberfile on read-only mounts
- Implemented an extended attribute to get/set EAs
- Avoid full runlist updating in more situations
- Update ctime after setting an ACL
- Use MFT record 15 for the first extent to MFT:DATA
- Ignore the sloppy mount option (-s)
- Implemented FITRIM (fstrim) ioctl
- Reengineered the compression algorithm
- Changes to ntfsprogs:
- Return success from ntfsprogs utilities with options –version and the like
- Implemented configure option –enable-quarantined for non functional utilities
- Added manuals for ntfsdecrypt, ntfswipe, ntfstruncate and ntfsfallocate
- libntfs: added use of hd library to get the legacy BIOS geometry
- libntfs: switched to /proc/mounts for checking existing mounts
- libntfs: fixed usa checking by ntfsck on 4K sector disks
- libntfs: fixed processing compressed data beyond file size (Windows 8 compliance)
- libntfs: fixed expanding a resident attribute without inserting holes
- libntfs: allow DACLs to not have any ACE
- libntfs: ignore unmapped regions when checking whether sparse
- libntfs: upgraded the Win32 interface for use with ntfsprogs
- ntfsresize: enabled relocating the MFT when shrinking a volume
- ntfsresize: fixed trying to update the MFT and Bitmap on a test run
- ntfsresize: fixed updating all the MFT runs in a relocated MFT
- ntfsresize: set the backup boot sector when the size is reliable
- ntfsresize: reserved a single sector for the backup boot sector
- ntfsundelete: output the modification time when scanning files
- ntfsundelete: ported to Windows
- ntfsclone: fixed wiping fragmented metadata when creating a metadata image
- ntfsclone: allowed cloning a file system despite allocation errors
- ntfsclone: fixed bad copying of the backup boot sector
- ntfsclone: ported to Windows
- ntfsdecrypt: made compatible with libgrypt-1.6
- ntfs-3g: fixed returned files types in readdir()
- ntfs-3g: force option ‘ro’ when mounting a read-only device
- ntfs-3g: keep the name of a deleted file in place for easier undeletion
- ntfs-3g: accept multiple read-only mounts
- ntfs-3g: improved Windows-type ACL inheritance, as needed by Windows 8
- ntfs-3g: avoid unnecessary runlist update when appending data to a file
- ntfs-3g: added inheritance of the set-group-id flag
- ntfs-3g: deny mounting when fast restart mode of Windows 8 is detected
- ntfs-3g: reject getting/setting DOS names on hard linked files
- ntfsclone: fixed wiping user data when creating metadata images
- ntfsclone: implemented a new option to set a new serial number
- ntfsfix: implemented fixing the backup boot sector
- ntfsfix: fixed clearing the bad cluster list
- ntfsinfo: added allocation data to the volume parameters summary
- ntfsinfo: output the numbers of runs and fragments for the selected file
- ntfslabel: implemented a new option to set a new serial number
- ntfswipe: added optional wiping of file tails and undelete data
- mkntfs: insert an $Info stream in $UpCase to comply with Windows 8
- openindianas: merged OpenIndiana requirements into the driver and fuse-lite
- ntfs-3g: fixed device path canonicalization for use by devmapper
- ntfs-3g: fixed setting DOS names when defined with lower-case chars
- ntfs-3g: fixed attribute flags controlling recursive writes
- ntfs-3g: fixed compilation on OpenIndiana
- ntfs-3g: fixed options parsing on OSes with no extended attributes
- ntfs-3g: fixed relatime as a default mount option
- ntfs-3g: fixed endless recursion when MFT extents are described by themselves
- ntfs-3g: fixed the description of inherit option
- ntfs-3g: fixed overwriting a truncated file
- ntfs-3g: fixed truncation of DOS file names (12 ntfschars, not 12 utf8 chars)
- ntfs-3g: fixed the setting of attributes by secaudit (index not synced)
- ntfs-3g: faster compression
- ntfs-3g: new option delay_mtime to delay updates of mtime+ctime
- ntfsfix: new option -d to clear the dirty flag if fix is successful
- ntfsfix: fixed volume dirty flag test
- ntfsfix: new option to clear the list of bad sectors
- ntfsfix: fixed compilation on Sparc
- ntfsfix: fixed a bug causing a segmentation violation
- ntfsfix: repair self-located MFT data bug
- ntfscp: fix free space calculation
- ntfscp: support compression
- ntfsresize: implemented expanding runlists
- ntfsresize: updated the description of the -f option
- ntfsresize: expand an NTFS volume downwards
- ntfsclone: backup bootsector not be to accounted for
- ntfsclone: creating/restoring a metadata image
- ntfsundelete: try to recover the file name when undeleting
- ntfsundelete: use inode number to name unnamed files
- ntfswipe: Big endian and other fixes
- secaudit: prefixed owner and group SID in ACL display
- library: fixed big cluster support using 4kB sector disk
- library: fixed huge data writes
- library: use transparent compression by default
- library: fixed several bad returns in error conditions
- library: enabled getting the sector size on FreeBSD and MacOSX
- build: fixed “make libs” to only build libraries
- ntfs-3g: fixed device path canonicalization for use by devmapper
- ntfs-3g: fixed setting DOS names when defined with lower-case chars
- ntfs-3g: fixed attribute flags controlling recursive writes
- ntfs-3g: fixed compilation on OpenIndiana
- ntfs-3g: fixed options parsing on OSes with no extended attributes
- ntfs-3g: fixed relatime as a default mount option
- ntfs-3g: fixed endless recursion when MFT extents are described by themselves
- ntfs-3g: fixed the description of inherit option
- ntfs-3g: fixed overwriting a truncated file
- ntfs-3g: fixed truncation of DOS file names (12 ntfschars, not 12 utf8 chars)
- ntfs-3g: fixed the setting of attributes by secaudit (index not synced)
- ntfs-3g: faster compression
- ntfs-3g: new option delay_mtime to delay updates of mtime+ctime
- ntfsfix: new option to clear the list of bad sectors
- ntfsfix: fixed compilation on Sparc
- ntfsfix: fixed a bug causing a segmentation violation
- ntfsfix: repair self-located MFT data bug
- ntfsresize: implemented expanding runlists
- ntfsresize: updated the description of the -f option
- ntfsresize: expand an NTFS volume downwards
- ntfsclone: backup bootsector not be to accounted for
- ntfsclone: creating/restoring a metadata image
- ntfsundelete: try to recover the file name when undeleting
- ntfsundelete: use inode number to name unnamed files
- library: fixed several bad returns in error conditions
- library: enabled getting the sector size on FreeBSD and MacOSX
- build: fixed “make libs” to only build libraries
- ntfs-3g: fixed possible wrong hole size when overwriting compressed data.
- ntfs-3g: fixed listxattr() to environments with extended attributes.
- ntfs-3g: fixed ENOSPC when making an index non-resident.
- ntfs-3g: fixed partial mapping ahead of mapped runlist.
- ntfs-3g: enabled forensic mounting (currently same as read-only).
- ntfs-3g: expand an attribute without creating a hole.
- ntfs-3g: improved appending data to a long hole.
- ntfs-3g: deny direct modifications to metadata files.
- ntfs-3g: option ‘acl’ to request the use of Posix ACLs.
- ntfsclone: fixed reading old big-endian ntfsclone images.
- ntfsclone: avoided writing beyond allocated variable.
- ntfsclone: close volume and cleanup when exiting.
- ntfsclone: new option not to clear the timestamps.
- ntfsclone: sync created image before remounting.
- ntfsclone: use a stream to produce aligned writes during image creation.
- ntfsinfo: display times in UTC.
- mkntfs: don’t store full bitmap and logfile in memory.
- mkntfs: set a volume UUID if option -U.
- mkntfs: fixed $MFT allocated size.
- mkntfs: fixed allocated size of resident unnamed data.
- ntfsfix: new option -n for no action.
- ntfsfix: try alternate boot sector if cannot start up.
- ntfsfix: check and fix the upcase table.
- ntfsfix: try to fix file systems with incorrect size.
- ntfsundelete: fixed a segfault.
- ntfsresize: new option –info-mb-only.
- ntfsresize: new option –check.
- ntfs-3g: fixed possible wrong hole size when overwriting compressed data.
- ntfs-3g: fixed listxattr() to environments with extended attributes.
- ntfs-3g: fixed ENOSPC when making an index non-resident.
- ntfs-3g: fixed partial mapping ahead of mapped runlist.
- ntfs-3g: enabled forensic mounting (currently same as read-only).
- ntfs-3g: expand an attribute without creating a hole.
- ntfs-3g: improved appending data to a long hole.
- ntfs-3g: deny direct modifications to metadata files.
- ntfs-3g: option ‘acl’ to request the use of Posix ACLs.
- ntfsclone: fixed reading old big-endian ntfsclone images.
- ntfsclone: avoided writing beyond allocated variable.
- ntfsclone: close volume and cleanup when exiting.
- ntfsclone: new option not to clear the timestamps.
- ntfsclone: sync created image before remounting.
- ntfsclone: use a stream to produce aligned writes during image creation.
- ntfsinfo: display times in UTC.
- mkntfs: don’t store full bitmap and logfile in memory.
- mkntfs: set a volume UUID if option -U.
- mkntfs: fixed $MFT allocated size.
- mkntfs: fixed allocated size of resident unnamed data.
- ntfsfix: new option -n for no action.
- ntfsfix: try alternate boot sector if cannot start up.
- ntfsfix: check and fix the upcase table.
- ntfsfix: try to fix file systems with incorrect size.
- ntfsundelete: fixed a segfault.
- ntfsresize: new option –info-mb-only.
- ntfsresize: new option –check.
- New: implemented fsync() and fsyncdir().
- New: implemented the ‘sync’ mount option.
- New: sanity check upcase table.
- New: added a big-endian extended attribute name for attrib and times.
- New: added an extended attribute name for creation time.
- New: enable renaming of system extended attributes.
- Change: improved appending data to fragmented files.
- Change: improved rebuilding a runlist.
- Change: improved comparing filenames on big-endian CPUs.
- Fixed stat(2) for system files with no data.
- Fixed alignment on cached structures.
- Fixed Posix ACLs for big-endian CPUs.
- Fixed deleting files using ignore_case option.
- Fixed allocated size when an attribute update causes unnamed data to be expelled.
- Fixed filename encoding when standard functions are not available.
- Fixed checking mounted device status on some non-Linux platforms.
- Fixed mounting with SELinux context.
- Fixed -n and –no-mtab mount option handling, needed by automount.
- Improved consistency checks of POSIX ACLs.
- NTFS-3G manual update.
- New: Full, transparent, read-write compression support.
- New: Two new mount options: compression and nocompression (default).
- New: Introduced windows_names mount option to enforce only Windows names.
- Change: Re-enabled compression in root directory.
- Change: Reversed default for showing/hiding hidden files.
- Change: Redefined default user mapping.
- Change: Marked files whose name has a dot initial as “hidden” if option hide_dot_files is used.
- Change: Renamed option default_permissions to permissions.
- Fixed use of utimensat() with external fuse older than 2.8.
- Fixed a hang when reading a corrupt compressed file.
- Fixed a possible crash when creating a stream.
- Fixed all reported and found compressed write related bugs.
- Fixed partially overwriting sparse clusters on highly fragmented volumes.
- Fixed checking write errors in setxattr().
- Fixed processing end of partial runlist for compressed files.
- Fixed updating file compressed sizes.
- Fixed checking the device mount state.
- Fixed processing of options silent and no_def_opts.
- Fixed excessive cluster allocation within big holes.
- Fixed creating empty encrypted extended attributes.
- Fixed too permissive sanity check before compressing.
- Fixed error returns when writing compressed data.
- Fixed sanity checked when closing a compressed file.
- Fixed zeroing the end of an ex-hole cluster of compressed files.
- Improved sanity checks on security descriptors.
- Fixed partially overwriting sparse clusters on highly fragmented volumes.
- Fixed checking write errors in setxattr().
- Fixed processing end of partial runlist for compressed files.
- Fixed updating file compressed sizes.
- Fixed checking the device mount state.
- Fixed processing of options silent and no_def_opts.
- Fixed excessive cluster allocation within big holes.
- Fixed creating empty encrypted extended attributes.
- Fixed too permissive sanity check before compressing.
- Fixed error returns when writing compressed data.
- Fixed sanity checked when closing a compressed file.
- Improved sanity checks on security descriptors.
- New: Full, transparent, read-write compression support.
- New: Two new mount options: compression and nocompression (default).
- New: Introduced windows_names mount option to enforce only Windows names.
- Change: Re-enabled compression in root directory.
- Change: Reversed default for showing/hiding hidden files.
- Change: Redefined default user mapping.
- Change: Marked files whose name has a dot initial as “hidden” if option hide_dot_files is used.
- Change: Renamed option default_permissions to permissions.
- Fixed use of utimensat() with external fuse older than 2.8.
- Fixed a hang when reading a corrupt compressed file.
- Fixed a possible crash when creating a stream.
- Fixed all reported and found compressed write related bugs.
- Fixed build to create missing usermap and secaudit.
- Fixed a compilation issue with uClibc.
- Fixed modifying the read-only flag on a directory.
- Fixed a bug in ACL inheritance.
- Fixed a bad condition for security descriptor upgrade.
- Fixed a possible index block with no key in $SII.
- Fixed the condition for executing utime() and utimensat().
- Fixed wrong flags when uid/gid are forced in mount options.
- Fixed a bad error checking when closing a compressed file.
- Fixed compiler warnings on OpenSolaris.
- Fixed conditional code for self-test in secaudit.
- New: Support Object Identifiers which are used by Windows for shortcuts and caused CHKDSK warnings when the target was deleted.
- New: Nanosecond resolution file timestamps support.
- New: Selective file timestamp modification by utimensat(2).
- New: Make non-resident TXF_DATA attribute of root directory resident so Vista and later won’t complain about RAW partition.
- New: Caching inodes.
- New: More efficient UTF8/UTF16 translations.
- Fixed setting archive bit on file and alternated data stream creation.
- Fixed setting reparse tags in parent directories.
- Fixed enabling permissions when no UserMapping file is found.
- Fixed an error return code in the main mount function.
- Fixed setting timestamp via extended attributes to be consistent between Windows and Linux view.
- Fixed option processing when uid, gid, fmask or dmask are present.
- New: Support Object Identifiers which are used by Windows for shortcuts and caused CHKDSK warnings when the target was deleted.
- New: Nanosecond resolution file timestamps support.
- New: Selective file timestamp modification by utimensat(2).
- New: Make non-resident TXF_DATA attribute of root directory resident so Vista and later won’t complain about RAW partition.
- New: Caching inodes.
- New: More efficient UTF8/UTF16 translations.
- Fix: Setting timestamp via extended attributes was not consistent between Windows and Linux view.
- Fix: Vista, Windows Server 2008 and Windows 7 couldn’t access a volume, file or directory if it had a non-resident TXF_DATA attribute despite being allowed by the NTFS $AttrDef attribute specification file. Solution is also available from Microsoft, please see KB974729. Upgrade is recommended!
- Fix: NTFS-3G may crashed if a junction point referred to a non-ASCII filename.
- Fix: Compilation errors on Mac OS X, OpenSolaris and openSUSE.
- New: Full file ownership and permissions support. The ownership and permissions of files are interoperable with Windows and conforms to the POSIX rules.
- New: POSIX ACL support. The ACLs are an extension to ownership and permissions as defined in POSIX.
- New: Optional Windows-type inheritance of ACLs.
- New: Full extended attributes support for all namespaces: user, system, security and trusted.
- New: Junction points support. The junction points and symbolic links created by Windows are seen as symbolic links.
- New: Access is possible to NTFS internal data like Windows style archive bit and file attributes. They are mapped to extended attributes for easier access.
- New: Compression write support: sequential writing to compressed files is supported.
- New: Support copying and restoring encrypted files without decrypting them.
- New: Support getting and setting high-resolution file timestamps.
- New: Support to get, set and remove DOS filenames.
- New: Tools for managing ownership, permissions and ACLs: ntfs-3g.secaudit checks the integrity of ownership, permissions and ACL, ntfs-3g.usermap gives help to configure ownership.
- New: Implemented setchgtime() on Mac OS X.
- Fix: Improved Windows junction and symlink handling.
- Fix: Improved ACL handling.
- Fix: Unicode normalization on Mac OS X.
- Fix: Implemented true fsync() on Mac OS X
- Change: Performance optimizations. Frequently used data are cached to improve speed. Space allocation for fragmented and sparse files has been improved.
- New: Full file ownership and permissions support. The ownership and permissions of files are interoperable with Windows and conforms to the POSIX rules.
- New: POSIX ACL support. The ACLs are an extension to ownership and permissions as defined in POSIX.
- New: Optional Windows-type inheritance of ACLs.
- New: Full extended attributes support for all namespaces: user, system, security and trusted.
- New: Junction points support. The junction points and symbolic links created by Windows are seen as symbolic links.
- New: Access is possible to NTFS internal data like Windows style archive bit and file attributes. They are mapped to extended attributes for easier access.
- New: Compression write support: sequential writing to compressed files is supported.
- New: Support copying and restoring encrypted files without decrypting them.
- New: Support getting and setting high-resolution file timestamps.
- New: Support to get, set and remove DOS filenames.
- New: Tools for managing ownership, permissions and ACLs: secaudit checks the integrity of ownership, permissions and ACL, usermap gives help to configure ownership.
- Change: Performance optimizations. Frequently used data are cached to improve speed. Space allocation for fragmented and sparse files has been improved.
- Fix: Mount and system boot could hang if Linux kernel audit was enabled.
- Fix: Volume could be potentially corrupted or the driver may crashed after a partial write or hardware error.
- Fix: The driver could crash handling highly fragmented files.
- Fix: Some defragmenters reported NTFS-3G created directories unmovable.
- Fix: The Windows NTFS file system checker, CHKDSK, may reported “free space marked as allocated in the master file table (MFT) bitmap”.
- Fix: The driver may returned “No space left on device” error when there was still free space on the NTFS volume.
- Fix: A file may got corrupted when the STANDARD INFORMATION attribute was moved to an extent MFT record. Only the already fixed Advanced NTFS-3G Driver had this problem, not the Stable NTFS-3G Driver.
- Change: 10-50% faster file and directory creation, removal, copy, unpackaging performance.
- Change: 500-1000% faster mount time. This is mostly noticable on multi-TB volumes and embedded devices. Please note, a generally 10-20 times faster performing NTFS-3G driver is available for embedded devices separately.
- Change: Improved multi-cluster allocation, non-aligned file write performance.
- Change: Improved volume consistency and recovery if the storage device was unsafely detached or powered down.
- Change: Less disk space usage.
- New: The version/-V command line option has been added.
- New: The ‘recover’ and ‘norecover’ mount options were introduced. The former option will cause the driver to recover and repair a corrupted or inconsistent NTFS volume if it’s possible. The default behaviour is ‘recover’.
- Fix: The driver may crashed when it tried to read a highly fragmented file or directory which was either corrupted or it was unreadable due to a hardware error. Upgrade is recommended.
- Fix: The driver incorrectly returned ‘Permission denied’ error message if a requested extended attribute namespace wasn’t supported.
- Fix: The lack of file backup timestamp support confused some applications on OS X.
- Change: The user extended attribute namespace is supported by default on Linux.
- Change: A volume having unclean journal file is recovered and mounted by default. The ‘norecover’ mount option can be used to disable this behavior.
- New: Built-in, transparent UTF-8 conversion support. This solves all the problems, described here, and even more with hidden and inaccessible filenames having national characters.
- New: Support getting/setting the file creation timestamp on OS X.
- Fix: An extended attribute got corrupted if the new attribute size was smaller than the original size.
- Fix: Memory leaked if an extended attribute or alternate data stream couldn’t be opened.
- Fix: Report an error if a filename can not be listed during reading a directory.
- Change: The ‘locale=’ mount option is not used anymore for filename characterset conversion. Instead filenames are always converted to UTF-8.
TEST Version 1.5222-RC (December 22, 2008) — Release Notes
- New: Built-in, transparent UTF-8 conversion support.
- Fix: Report an error if a filename can not be listed during reading a directory.
- Change: The ‘locale=’ mount option is not used anymore for filename characterset conversion. Instead filenames are always converted to UTF-8.
- Fix: Reading a data storage with permanent or temporary physical damage, or a partial read(2) system call could result ignoring the low level hardware error and returning invalid data. Upgrade is recommended.
- Version 1.2926-RC is released unchanged as stable. The NTFS-3G driver is able for unlimited file and directory creation and removal as the result of 13 years continuous development with the help of hundreds of contributors over these years. Congratulations And Thank You To Everybody Who Made It Happen!
- New: Support unlimited file and directory creation. Successfully tested the creation of 54 million (54,000,000) files in a single directory, besides the other test cases.
- Fix: A corrupted directory index entry could hang the driver instead of returning “I/O error”.
- Fix: The allocation size of an attribute may got corrupted if the attribute size change failed.
- Fix: An MFT record could leak on big-endian CPUs if adding a new attribute failed.
- Fix: The system log was flooded if a transparently compressed or encrypted file was tried to be updated repeatedly.
- New: Solaris support.
- New: Libtool-2 support.
- Change: No external dependency on librt anymore when internal FUSE is used (default on Linux).
- Change: The default compiler is gcc.
- Change: Internal FUSE further shrank by 10%.
- Fix: A corrupted size directory or a directory over tens of million files may hang the driver. If NTFS-3G is compiled with an external FUSE library (non-default on Linux) then FUSE CVS is needed until FUSE 2.8.0 is released.
- Fix: Removing alternate data streams and extended attributes leaked memory.
- Fix: Mount could fail with some mount(8) utilities (e.g. busybox one) if the /etc/mtab file didn’t exist or was on a read-only file system. This fix should solve most of the “/bin/mount: invalid option -i” mount problems. If NTFS-3G is compiled with an external FUSE library (non-default on Linux) then FUSE CVS is needed until FUSE 2.8.0 is released.
- Fix: The driver always returned “I/O errors” if the standard file descriptors were closed during mount, e.g. via some usage of udev, hotplug, etc.
- Fix: Building the driver failed if the –prefix=/ configure option was used.
- Fix: Driver compilation may failed with ‘PATH_MAX undeclared’ error message in some (cross)-compilation environments.
- Fix: Mount failed with “Invalid argument” error message if the mountpoint was a symlink. If NTFS-3G is compiled with an external FUSE library (non-default on Linux) then FUSE CVS is needed until FUSE 2.8.0 is released.
- Fix: A corrupted directory could hang the driver.
- Fix: Mount could hang if the block allocation map was corrupted.
- Fix: The driver could hang or misbehave when compressed, sparse or encrypted file attribute flags were corrupted.
- Fix: The driver could crash when both an MFT attribute offset and the allocated bytes were corrupted.
- Fix: Building the driver failed if the –exec-prefix configure option was used without –sbindir=/sbin.
- Fix: Parallel ‘make install’ may failed.
- New: Support building the driver in a separate directory.
- New: Added –enable-mount-helper configure option which installs /sbin/mount.ntfs-3g, so mount via mount(8) and /etc/fstab can work on Linux. The default is enabled on Linux and disabled on all other operating systems.
- Fix: In certain, rare circumstances, any area of the NTFS volume, except the NTFS boot sector, could get corrupted. The chance for this to happen is higher for close to full disk utilisation and using one of the more uncommon, less than 4096 byte cluster sizes. The cluster size is logged under the /var/logs directory usually in the ‘messages’ or ‘daemon.log’ log file, as the blksize mount parameter. All stable releases have this issue since version 1.328. Upgrade is strongly recommended from all NTFS-3G releases.
- Fix: The total file system depth was limited to 4095 characters by FUSE and trying to access files and directories deeper gave “No such file or directory” error. If NTFS-3G is compiled with an external FUSE library (non-default on Linux), then FUSE CVS is needed until FUSE 2.8.0 is released.
- Fix: The symlink(2) system call failed or the size was truncated at modulo 256 if the old path was over 255 bytes.
- Fix: Unprivileged mount may have been denied because supplementary groups were dropped too early as a security measure.
- Fix: Unprivileged mount may have been denied if the /etc/fuse.conf file wasn’t properly configured. This was redundant and the /etc/fuse.conf file is not required anymore.
- Fix: Updating hard link attributes was delayed by one second which resulted softwares seeing their file sizes and timestamps incorrectly during this time interval.
- Fix: The ‘noatime’ mount option additionally and unconditionally was passed to FUSE.
- Fix: The driver crashed when one tried to open a non-existent file which had at least twice as long file name as the one allowed by the NTFS specification.
- Fix: Windows CHKDSK may reported minor inconsistencies because the data and allocation size of some special purpose resident unnamed $DATA attribute in the index and inode FILE_NAME attributes could be incorrect.
- Fix: Unprivileged mount failed if user had rights for everything except the FUSE device file.
- Fix: The ‘dev’ and ‘suid’ mount options didn’t work.
- Change: The rmdir(2) system call returns ENOTEMPTY instead of EEXIST because the GNOME glib library and the Nautilus file browser couldn’t handle the also standard EEXIST value which resulted an error message when for instance one tried to remove a directory containing files.
- Change: The ‘dev’ and ‘suid’ mount options are the default from now on for root mounts, similarly as other file systems behave. These options are always denied for setuid-root and unprivileged mounts.
- Fix: File and directory removal, rename and move may have been denied with an “Operation not supported” error message.
- Fix: Setuid-root ntfs-3g had a local root exploit and other security problems. From now on unprivileged mounts of block devices are possible only with using the integrated FUSE library (default on Linux) which has no known security problem.
- Fix: Unprivileged unmount didn’t always work.
- Fix: Create mount.ntfs-3g symlink always in /sbin where mount(8) needs it.
- New: Added ‘remove_hiberfile’ mount option to be able to read/write mount hibernated volumes for recovery and troubleshooting purposes.
- Change: Keep shrinking driver size.
- Version 1.2125-RC is released unchanged as stable.
- Fix: the 1.2121-RC test release didn’t compile on 64-bit architectures.
- New: Added ntfs-3g.probe utility which probes a volume for read-only or read-write mountability.
- New: To facilitate the use of the NTFS-3G driver in scripts, an exit code is returned to give an indication of the mountability status of the volume. Zero value means success, and all other ones mean an error. The unique error codes are documented in the ntfs-3g.probe manual page.
- New: Built-in FUSE support by using a stripped down, integrated FUSE library. Linux uses this by default which means NTFS-3G doesn’t require the installation of the FUSE package, only FUSE kernel support.
- New: The –with-fuse=external configure option makes NTFS-3G to be compiled with an external FUSE library. For non-Linux operating systems this is the default and the only compilation option.
- New: README file is installed as documentation.
- New: The –enable-ldscript configure option uses ldscript instead of .so symlink.
- New: Added libntfs-3g.pc.in pkg-config and libntfs-3g.script.so.in ldconfig files.
- Change: Rewritten, backwards compatible build system.
- Change: Use ‘make install-strip’ instead of ‘make strip’.
- Fix: The SIGTERM signal may caused deadlock which could block for instance the shutdown process. If NTFS-3G is used with an external FUSE library, which is not the default, then FUSE 2.7.2 package is required.
- Fix: Successful hard link removal may reported “Input/Output error”.
- Fix: Listing the content of a single directory having over 600,000 files and subdirectories may returned “Input/Output error” or truncated directory listing.
- Fix: The atime mount option didn’t work.
- Fix: POSIX file time updates (file access and modification times, inode change time). Please note, though NTFS-3G updates the times correctly now, FUSE may keep caching old, invalid time attributes for a short time after rename(2), creat(2), and some file operations which involve hard links. FUSE has fixed already the first two cases and they may be included in the Linux kernel 2.6.24 release.
- Change: 10-20% write performance improvement.
- New: relatime support was added and made the default file access time update method.
- Fix: Reads over the end of a file could return “invalid argument” error using recent kernels. This problem may have caused Thunderbird to hang.
- Fix: Some versions of the gcc compiler have crashed during compilation.
- Fix: The utimes(2) system call may incorrectly updated the last status change filestamp.
- Change: The ntfs.streams.list extended attribute enumerates Alternate Data Streams (ADS) ‘\0’ separated.
- Fix: big-endian problems exposed by the NTFS-3G Test Suite.
- Fix: free space calculation may was wrong for >1 TB volumes.
- Fix: some faulty Thunderbird versions caused system log flooding.
- Fix: uClibc and uClinux improvements.
- Fix: logging improvements.
- Fix: many other minor fixes.
- Fix: unwritten sparse file regions could get corrupted if the end of a write wasn’t aligned to cluster boundary. Sparse files are very rarely used, most typically by bittorent clients.
- Fix: creation of read-only files failed.
- Change: free inode calculation was CPU intensive during write activity. This could reduce write performance when millions of files are used if a file manager or desktop applet regularly polled for disk space usage. Now the statfs() system call is constant time.
- Change: file creation performance is improved by 40-80%.
- Change: smart directory traversal is 20-200% faster for disk based and 300-600% faster for memory cache based traversals.
- Fix: hibernation check was too rigid and mount was refused in read/write mode unnecessarily in some cases.
- Change: free disk space calculation was highly CPU intensive during write activity. This could reduce write performance severely, especially for huge volumes if a file manager or desktop applet regularly polled for disk space usage. Now the calculation is constant time, around only 10 microseconds on a typical desktop, and it’s completely independent of the volume size.
- All performance improvements are included unchanged from the 1.910-RC test release. Please see those details below.
- Change: significantly improved the performance of writing many files, typically by 50-1000% (copying files, unpacking, untarring packages, compilation, directory synchronization, …).
- Change: improved the performance of writing multi-GB size files, particularly after the creation of many thousands of other files. Previous disk space defragmentation is highly advised for the best possible speed. File level defragmentation is not enough.
- Change: improved concurrent write performance.
- Fix: utime() also updated the timestamp of the parent directory but it shouldn’t have (rsync, backup tool problems).
- Fix: ignore the “volume dirty” bit because its real meaning is “check the volume”. The fact of the real dirtiness is stored in the NTFS logfile which is already checked for.
- Fix: compilation failed with glibc 2.7.
- New: the –disable-library ‘configure’ option can be used not to install but link libntfs-3g into the ntfs-3g binary. This decreases the binary size by about 10-15% and increases performance by about 2-5%.
- Fix: file rename may updated the modification time of some files and directories which caused some backup tools, like rsync, not to preserve always this timestamp.
- Fix: unmount (fusermount -u) was denied for an unprivileged user who was allowed to mount a block device. FUSE 2.7.0+ user space package is required for the full fix.
- Fix: the driver could hang if there wasn’t enough memory during reading a large directory
- Fix: reading a directory may reported success when there was an error.
- Fix: metadata update error was ignored in some very rare cases during writing a file.
- Fix: permissions checking was turned on if umask, fmask and dmask was set to the default 000 value.
- Change: manual update, added Windows filename compatibility section.
- Change: lots of logging improvements.
- Fix: move, rename and hard link could return “input/output error”.
- Fix: very rare, recoverable directory corruption.
- Fix: portability improvements.
- Change: more troubleshooting hints if a volume can’t be mounted.
- Change: logging improvements.
- Version 1.612-RC is released as stable.
- New: install executables to the root file system otherwise mount could fail during boot.
- Fix: any kind of file size change failure returned “Operation not permitted”.
- Fix: file close failure was not always reported.
- Fix: unmount failure was not always reported.
- Fix: file creation always gave “input/output error” if the $MFT Bitmap wasn’t up-to-date.
- Fix: converting very long file names to Unicode may failed.
- Fix: syslog messages didn’t show the low level error detail.
- Fix: compilation improvements on Mac OS X and NetBSD.
- Fix: Linux security exploit if ntfs-3g was setuid and the FUSE kernel driver wasn’t loaded yet during mount.
- Fix: mount failed if the -v (verbose) command line option was passed by mount(8).
- Fix: parsing of the first mount option could fail in the 1.411-RC test release.
- New: read-write mount is supported using the “force” mount option if the logfile is unclean.
- New: libntfs-3g is versioned.
- Fix: default ownership of files weren’t always set to the mounting user.
- Fix: mount was denied if the NTFS Master File Table copy had non-standard size.
- Fix: catch and deny all junction/reparse point write operations.
- Fix: multiply -o options weren’t allowed (FreeBSD’s mount(8) requires this).
- Fix: don’t try to run Linux specific code on non-Linux OSes.
- Change: document and release version update to stable status.
- Fix: fakeraid/softraid detection was incorrect.
- Change: major performance improvement for writing large files (new block allocator).
- Change: manual update, added access handling, security section.
- New: use the ‘nonempty’ FUSE mount option by default, so the driver behaves as the in-kernel file systems.
- New: –disable-ldconfig configure option.
- Change: document and release version update to stable status.
- New: the driver is in release candidate status.
- New: warn if the deficient FUSE 2.6.2 kernel module is used.
- Fix: a bug in chkdsk could result the removal of highly fragmented, valid files.
- Fix: Mac OS X portability improvements.
- Change: full file permission checking if any of the uid, gid, umask, fmask, or dmask mount option is used.
- New: top request: setuid root support, the driver can run unprivileged.
- Fix: the ‘user’ and ‘users’ fstab mount options didn’t work (requires setuid root ntfs-3g).
- Fix: time of last file modification and status change weren’t updated.
- New: top request: support old FUSE kernel modules.
- Fix: ActiveSync didn’t work via Samba 3.0.
- Fix: writing large files could be very slow.
- Fix: writing several files at the same time could be very slow.
- Fix: writing at several places into a file at the same time could be very slow.
- Fix: invalid argument error when writing randomly into sparse files.
- Fix: heavy memory usage with sparse files (p2p, bittorrent client problems).
- Fix: inode number wasn’t filled in the dirent structures (CVS, getcwd, gnulib problems).
- Fix: 2-8% speed increase due to using pread/pwrite instead of lseek+read/write.
- Fix: fuse 2.6.x kernel module detection wasn’t reliable.
- Fix: directories were inaccessible on Windows if the cluster size was bigger than 4kB.
- Fix: static linking failed with FUSE 2.6.0.
- Fix: ‘make install’ failed if ldconfig wasn’t in the $PATH.
- Change: more verbose error reporting, explanations, hints for solutions.
- Fix: unmount was unsafe for removable devices.
- Fix: the code wasn’t endian safe.
- Fix: mount arguments were omitted on the 2nd fuse mount attempt.
- New: FUSE 2.6.0 is required to ensure maximum reliability.
- New: bmap() implemented: safe swap file support, LILO bootability.
- Change: the file system type is ‘fuseblk’ instead of ‘fuse’ for block devices.
- Fix: unmount was asynchronous; full fix requires FUSE 2.6.0 as well.
- Fix: mount was denied if $MFTMirr was too small.
- Fix: option parsing was incorrect if there was no space between name & argument.
- Change: new software versioning.
- Fix: file creation at disk-full may lead to i/o errors.
- Fix: statistic of inodes and free inodes was incorrect (df -i).
- Fix: the ‘umask’ option wasn’t always parsed as an octal number.
- Fix: “too long filename” handling wasn’t POSIX compliant.
- Fix: mount was denied if $MFTMirr had unused garbage at the file end.
- Fix: rename was always denied if the target file or directory existed.
- Fix: renaming like ‘foo’ -> ‘FOO’ was denied in the WIN32 namespace.
- Fix: fuse kernel module is automatically loaded, no need for config.
- Fix: verbose mount error messages with hints for solutions.
- Fix: compilation failed with gcc 2.96.
- Change: top request: full read-write access to everybody by default.
- Change: file lookups are always case-sensitive.
- Fix: case-insensitive directory rename to itself may failed.
- Fix: some regular files weren’t accessible on Linux.
- Fix: files created on Linux may not had enough permissions on Windows.
- Fix: directory couldn’t be renamed if it had both WIN32 and DOS name.
- Fix: collision with ntfsprogs header files.
- Fix: improved large file write performance.
- Fix: better consistency if NTFS wasn’t cleanly unmounted.
- Fix: write(2) may created holes.
- Fix: show mounted device names instead of /dev/fuse.
- First NTFS-3G BETA release.
NTFS-3G project is sponsored by Tuxera Inc.