This is a major new release. Update is strongly recommended. Onto
the release notes:
* Directory index handling code was merged from ntfs-3g to libntfs.
It was the only missing part for full basic read/write in ntfsmount.
* Cryptographic code is now integrated into libntfs, thus ntfscat and
ntfsmount can now read encrypted files. See "man 8 libntfs" for
details.
* ntfsresize (and the entirety of ntfsprogs/libntfs in fact) now have
full support for Windows Vista.
* ntfsprogs and libntfs are now entirely endian safe and more over we
now have checks that automatically report endian errors.
* ntfsmount now properly updates time according to POSIX/SUSv3
(Single UNIX Specification).
* We no longer use CVS for revision control. We use git. A public
git repository will be made available soon.
* ntfsmount/libntfs speed is seriously improved (especially for
fragmented volumes). Some benchmarks below:
Test with bonnie++ -s0:
ntfs-3g-CVS-28.09.2007:
Version 1.93c ------Sequential Create------ --------Random
Create--------
pc299 -Create-- --Read--- -Delete-- -Create-- --Read---
-Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %
CP /sec %CP
16 3739 11 14802 15 4179 8 3940 9 16372
19 4439 12
Latency 12412us 5764us 29314us 9835us
5682us 9881us
1.93c,
1.93c,pc299,1,1191014553,,,,,,,,,,,,,,16,,,,,3739,11,14802,15,4179,8,394
0,9,16372,19,4439,12,,,,,,,12412us,5764us,29314us,9835us,5682us,9881us
ntfsmount-2.0.0:
Version 1.93c ------Sequential Create------ --------Random
Create--------
pc299 -Create-- --Read--- -Delete-- -Create-- --Read---
-Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %
CP /sec %CP
16 6536 22 20537 31 8449 18 6972 14 26902
29 8325 15
Latency 6116us 1809us 28863us 1874us
1173us 1384us
1.93c,
1.93c,pc299,1,1190994522,,,,,,,,,,,,,,16,,,,,6536,22,20537,31,8449,18,69
72,14,26902,29,8325,15,,,,,,,6116us,1809us,28863us,1874us,1173us,1384us
ntfsmount is 1.75 times faster than ntfs-3g in file creation.
Copying 700MB file from reiserfs to empty ntfs volume:
ntfs-3g-CVS-28.09.2007:
0,07s user 3,04s system 7% cpu 39,726 total
ntfsmount-2.0.0:
0,06s user 2,76s system 8% cpu 31,454 total
ntfsmount is 1.25 times faster than ntfs-3g.
Copying 70MB file to very-very fragmented (bitmap is close to
010101...) ntfs:
ntfs-3g-CVS-28.09.2007:
0,00s user 0,26s system 0% cpu 2:59,01 total
ntfsmount-2.0.0:
0,00s user 0,21s system 4% cpu 4,919 total
ntfsmount 36.38 times (this is not a typo!!!) faster than ntfs-3g.
Also a lot of regressions comparing to ntfs-3g are fixed in the release:
* ntfs-3g ignores dirty volume bit. It is set to enforce windows to
perform chkdsk on next boot and ignoring it may lead to data loss.
* ntfs-3g always acts as if noatime option was supplied to it.
* It is not possible to mount block device with not set-uid-root
ntfs-3g even if the user has rw rights to the device and vice-versa
it is possible to mount any block device under any user if ntfs-3g is
set-uid-root.
* ntfs-3g does not validate options.
* Only case sensitive mounts are supported by ntfs-3g.
* A lot of regressions in logic of libntfs functions are present in
ntfs-3g. Not all are noticeable right now, but they make ntfs-3g
very fragile which will lead to serious problems in the future.
* A lot of others we forgot about.
You can download source code of the 2.0.0 release here:
http://www.linux-ntfs.org/content/view/19/37/
Note no binary RPMs yet. We are working on making binary RPMs
available. Oops. I appear to have broken the above web page. Until
it is fixed you can download everything directly from sourceforge here:
http://sourceforge.net/project/showfiles.php?
group_id=13956&package_id=14232
Soon you will also be able to use the Linux-NTFS git repository if
you want to stay on top of the latest and greatest but we are still
working on making that available at the moment. Once it is ready, we
will put up information about it here:
http://www.linux-ntfs.org/content/view/18/36/
Note the CVS repository is now out of date and does not contains the
latest 2.0.0 release source code.
ChangeLog since 1.13.1 release:
- ntfsmount now creates files and directories with security descriptor
that grant full access to everyone. (Yura)
- Fix typo that lead to incorrect sparse file size calculation. (Yuval)
- Fix long standing stupendously stupid bug in libntfs/attrib.c::
ntfs_external_attr_find() and also port a bugfix from the advanced
ntfs kernel driver to the same function. (Anton)
- Add new API ntfs_attr_exist() that checks whether attribute with
selected type and name already present in inode. (Szaka)
- Extend ntfs_index_{add_filename,rm} to support almost all cases of
index operations. (Szaka)
- Support index operations when index root is in the base MFT
record. (Yura)
- calloc/malloc -> ntfs_{calloc,malloc} conversions. (Szaka)
- ntfsclone: don't create image files with executable bit set. (Szaka)
- ntfsclone: metadata cloning: write out extent records. (Szaka)
- ntfsclone: fix sometimes missing error messages and be more
detailed. (Szaka)
- ntfsclone: fix crash in wipe_index_allocation_timestamps(): don't
dump empty index allocation attribute. (Szaka)
- ntfscmp: fine grained AT_INDEX_ALLOCATION comparison. (Szaka)
- ntfsinfo: rename 'Flags:' fields to be unique. (Szaka)
- ntfsinfo: add ntfs_dump_index_header(); dump full index attribute
INDEX_HEADER. (Szaka)
- ntfsinfo: add ntfs_dump_index_block() and use it. (Szaka)
- ntfsinfo: fix output indenting. (Szaka)
- ntfsinfo: make stdout line buffered. (Szaka)
- ntfsinfo: fix segfaults when SDS has absolute security
descriptor. (Szaka)
- ntfsinfo: redirect stderr to /dev/null if --debug isn't used in
debug mode. (Szaka)
- ntfsinfo: fix segfaults on corrupt index blocks. (Szaka)
- ntfsinfo: dump number of entries per block in index allocation
attributes. (Szaka)
- ntfsinfo: dump ATTR_LIST_ENTRY padding in verbose mode. (Szaka)
- ntfsinfo: dump all VCN's in the same numeral system. (Szaka)
- ntfsinfo: dump the FILE_ATTR_DIRECTORY flag. (Szaka)
- ntfsinfo: dump padding between the Update Sequence Array and the
first attribute in verbose mode. (Szaka)
- ntfsinfo: Fix endianness. (Yura)
- ntfsinfo: Make more resilient to corrupt index entries in an index
node. (Anton)
- ntfsinfo: Print in both decimal and hexadecimal where it makes sense
and is useful. (Anton)
- ntfsclone: Define endianness safe image format. (Anton)
- ntfsclone: Redefine image format version number to be the image
format version and not the NTFS version of the imaged volume which is
totally useless. (Anton)
- ntfsclone: Make ntfsclone image format extensible. (Anton)
- ntfsclone: Fix endianness problems. (Anton)
- Allow ntfscp to create the destination file if it does not already
exists by calling ntfs_create(). (Hil)
- Fix GUID to string conversion. (Anton)
- Multiple big-endianness fixes. (zhanglinbao, Yuval)
- Spelling mistake fixes. (Yuval)
- Remove inline keywords from static non-one-liners. (Szaka, Yuval)
- Memory leak fixes. (Yura, Yuval)
- Change ntfs_collate()'s signature to take size_t's. (Yuval)
- Move ntfs_is_collation_rule_supported() from collate.h to collate.c
and rewrite it to be clearer. (Yuval)
- Move ntfs_index_entry_mark_dirty() to index.c. (Szaka)
- Introduce misc.c. Move ntfs_[mc]alloc there. (Szaka)
- Change malloc() calls to ntfs_malloc(). (Szaka)
- ntfsmount: require FUSE version >= 2.6.0 for build. Fixes fusermount
lookup problem and allows to drop compatibility code. (Yura)
- Rewrite ntfs_attr_add() algorithm to be faster and cleverer. (Yura)
- Rename MS_{RDONLY,NOATIME} to NTFS_MNT_{RDONLY,NOATIME}. Introduce
NTFS_MNT_CASE_SENSITIVE. (Yura)
- Treat filenames in POSIX namespace as case insensitive in case of
case insensitive mounts. (Anton, Yura)
- Windows cares only about first 4 records in $MFTMirr and ignores
everything beyond them. Update libntfs behaviour to be like in
windows. (Yura)
- ntfsmount: Fix free clusters and MFT records calculation. (Yura)
- ntfsmount: Fix st_blocks calculation for resident files. (Yuval,
Yura)
- ntfsmount: Umount volume in DESTROY. This is guarantees that all
data would be synced before umount return for volumes mounted with
blkdev option. (Yura)
- Introduce MNT_NTFS_NOT_EXCLUSIVE mount option that tells libntfs do
not open volume exclusively. Useful if libntfs user cares about this
himself, eg. FUSE with blkdev option. (Yura)
- Empty the journal at mount time. (Anton)
- Set the volume dirty bit at mount time (if it is not set already and
clear it again at umount time but only if it was not set to start
with. (Anton)
- Introduce NTFS_MNT_FORENSIC mount option for logfile dumping for
example otherwise the logfile gets wiped out by the mount attempt if
it is not read-only. Also use it for ntfsresize as it wishes to do
its own logfile emptying and volume dirtying. (Anton)
- Raise FUSE dependence to 2.6.1 (the most stable and featured ATM),
rename --enable-fuse-module to more clear --enable-ntfsmount and
cleanup autotools scripts a bit. (Yura)
- ntfsclone: don't check free space if output file is FIFO. (Andree
Leidenfrost)
- Turn ntfs_pathname_to_inode() into ntfs_pathname_to_inode_num() which
returns ntfs inode number instead of opened inode itself.
Reimplement ntfs_pathname_to_inode() as wrapper to new API. (Yura)
- ntfsmount: fix rename if destination already exists. (Yura)
- ntfsfix: do not set VOLUME_MOUNTED_ON_NT4 flag as it causes Vista to
not boot any more.
- Implement ntfs_pread() and ntfs_pwrite() in terms of device
operations pread() and pwrite() respectively and fall back to using
seek() + read()/write() if no pread()/pwrite() device operation is
supplied or the OS does not support the pread()/pwrite() system call.
Adapt unix_io pread()/pwrite() device operations to use pread()/
pwrite() system call and adapt win32_io device operations to not
supply pread()/pwrite(). (Csaba Henk, Anton)
- mkntfs: Generate a random DCE compliant UUID for the created volume
and include --with-uuid[=PFX] and --without-uuid options. (Anton)
- configure.ac: Set language to C. (Anton)
- mkntfs: Always set default cluster size to 4096 bytes regardless of
volume size. This is what Windows Vista does and it makes perfect
sense from a performance point of view. (Anton)
- mkntfs: As announced, remove the deprecated support for creation of
NTFS 1.2/3.0 volumes. We now create NTFS 3.1 volumes only. (Anton)
- mkntfs: Remove lots of unused/unneeded debugging code. (Anton)
- libntfs: Add support for FreeBSD 5.0+ sector aligned access
requirements. (Max Khon)
- mkntfs: Create more Vista like volumes. We now match the security
descriptor attributes (but not yet the security descriptors stored in
$Secure). (Anton)
- libntfs: Rewrite ntfs_upcase_table_build() to generate a Vista
compatible upcase table ($UpCase). (Anton)
- mkntfs: Remove own generation of upcase table, i.e. delete
ntfsprogs/upcase.[ch] and use ntfs_upcase_table_build() supplied by
libntfs. (Anton)
- Upgrade ntfsmount to new FUSE option parsing API. (Yura)
- ntfsmount: Remove "show_sys_files" as potential harmful and
introduce new "case_insensitive" option to support both case
sensitive and insensitive mounts. (Yura)
- ntfsmount: st_block calculation was wrong. (Yuval)
- mkntfs: Use Vista $Boot rather than XP one. (Anton)
- ntfsmount: use utimens() instead of deprecated utime(). (Yura)
- libntfs: Ignore bootsector checksum inconsistencies as too many 3rd
party utilities update the boot sector without correcting the
checksum. Ported change from kernel driver. (Anton)
- ntfsdecrypt: Major improvement! We now validate the .pfx file to be
the right type of RSA key and we also determine the thumbprint and
compare the one in the keys to the one in the .pfx file thus we only
try to decrypt the FEK once we have the correct key. Several other
bug fixes leading to crashes. Also make compilation work on OS X
when gnutls is otherwise not found. (Anton, Yura)
- ntfsmount: fix errno in truncate() operation. (Yura)
- Add new API: __ntfs_attr_truncate that allow user to select whether
holes should be created or clusters allocated. (Yura)
- Add new API: ntfs_attr_map_runlist_range to map part of runlist from
selected VCN to selected VCN. (Yura)
- Make ntfs_attr_update_mapping_pairs to be mostly O(1) for normal
files. (Yura)
- Introduce sparse bitwise annotations to automatically catch endian
bugs. Adopt libntfs (and fix 2 bugs) and ntfsprogs (and fix lots of
bugs). (Yura)
- ntfsinfo: nicely dump special LCN values. (Yura)
- Transparently integrate reading of encrypted files into library.
This adds crypto.[ch], several exported functions that you are not
interested to use and dependency on >=libconfig-1.0.1 to read list of
PFX files with keys. See libntfs/config for example configuration
file. (Yura)
- Add new API ntfs_attr_get_name - returns pointer to unicode name of
attribute. (Yura)
- ntfsinfo: Dump raw content of LOGGED_UTILITY_STREAM in verbose
mode. (Yura)
- Export NTFS_EFS string. (Yura)
- Merge --enable-debug and --enable-debug-logging. (Yura)
- Add --enable-sparse configure option. (Yura)
- Fix corner case in hole instantiating in ntfs_attr_pwrite(). (Szaka)
- Fix heavy memory usage during whole instantiating and add new API:
ntfs_rl_fill_zero. (Szaka, Yura)
- ntfs_delete() now takes pointer to pointer to ntfs_inode for file to
delete and closes inode only in cases there are no more hard links
left to file. (Yura)
- Library no longer perform time updates, only provides API for
performing time updates. Remove ntfs_inode_update_{a,}time() and
introduce ntfs_inode_update_times(). Make ntfsmount update time
according to SUS. (Yura)
- Fix cache handling in utils_attr_get_name. (Bogdan, Yura)
- ntfsmount: Submit inode number during readdir. (Ted Anderson, Szaka)
- Fix syslog logging handler to respect all logging flags. (Yura)
- ntfs_readdir, ntfs_fuse_filler: return with error if FUSE filler
failed. (Szaka, Yura)
- Fix rare directory corruption in index code. (Szaka, Yura)
- ntfsmount: Mount block devices with blkdev mount option. (Yura)
- ntfsmount: Add set-uid-root binary support. (Yura)
- ntfsmount: Implement {no,}relatime (relative atime) options. (Yura)
- Make libntfs keep track number of free clusters and MFT records.
Thanks to David Fox and Szabolcs Szakacsits for idea. (Yura)
- ntfsmount: Add bmap support. (Szaka, Yura)
- Introduce NTFS_MNT_FORCE instead of third parameter (force) of
utils_mount_volume. (Yura)
- ntfs_attr_pwrite: Write 4096 bytes blocks when possible. (David Fox,
Szaka, Anton, Yura)
- Allow mounting volumes with non-clean logfile with force mount
option. Thanks to Szaka for idea. (Yura)
- libntfs: Attach opened inodes to volume. (Yura)
- libntfs: Attach opened attributes to inode. (Yura)
- ntfsmount: Save pointer to ntfs_attr in (fuse_file_info *)->fh and
use it in ntfs_fuse_{read,write}. (Yura)
- ntfsmount: Implement .create(), .ftruncate(), .fgetattr(). (Yura)
- libntfs: Sync and warn about not closed inodes in ntfs_umount. (Yura)
- ntfsmount: Cache directory in which was performed last
operation. (Yura)
- Install mount.fuse.ntfs symbolic link. (Yura)
- ntfsmount: Fill .st_mode in readdir(). (Szaka, Yura)
Best regards,
Anton
--
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK
Linux NTFS maintainer, http://www.linux-ntfs.org/
|