Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | The Linux NTFS filesystem driver |
2 | ================================ | |
3 | ||
4 | ||
5 | Table of contents | |
6 | ================= | |
7 | ||
8 | - Overview | |
9 | - Web site | |
10 | - Features | |
11 | - Supported mount options | |
12 | - Known bugs and (mis-)features | |
13 | - Using NTFS volume and stripe sets | |
14 | - The Device-Mapper driver | |
15 | - The Software RAID / MD driver | |
2fe0ae78 | 16 | - Limitations when using the MD driver |
1da177e4 LT |
17 | - ChangeLog |
18 | ||
19 | ||
20 | Overview | |
21 | ======== | |
22 | ||
23 | Linux-NTFS comes with a number of user-space programs known as ntfsprogs. | |
c002f425 | 24 | These include mkntfs, a full-featured ntfs filesystem format utility, |
1da177e4 LT |
25 | ntfsundelete used for recovering files that were unintentionally deleted |
26 | from an NTFS volume and ntfsresize which is used to resize an NTFS partition. | |
27 | See the web site for more information. | |
28 | ||
29 | To mount an NTFS 1.2/3.x (Windows NT4/2000/XP/2003) volume, use the file | |
30 | system type 'ntfs'. The driver currently supports read-only mode (with no | |
31 | fault-tolerance, encryption or journalling) and very limited, but safe, write | |
32 | support. | |
33 | ||
34 | For fault tolerance and raid support (i.e. volume and stripe sets), you can | |
35 | use the kernel's Software RAID / MD driver. See section "Using Software RAID | |
36 | with NTFS" for details. | |
37 | ||
38 | ||
39 | Web site | |
40 | ======== | |
41 | ||
42 | There is plenty of additional information on the linux-ntfs web site | |
43 | at http://linux-ntfs.sourceforge.net/ | |
44 | ||
45 | The web site has a lot of additional information, such as a comprehensive | |
2fe0ae78 | 46 | FAQ, documentation on the NTFS on-disk format, information on the Linux-NTFS |
1da177e4 LT |
47 | userspace utilities, etc. |
48 | ||
49 | ||
50 | Features | |
51 | ======== | |
52 | ||
98b27036 AA |
53 | - This is a complete rewrite of the NTFS driver that used to be in the 2.4 and |
54 | earlier kernels. This new driver implements NTFS read support and is | |
55 | functionally equivalent to the old ntfs driver and it also implements limited | |
56 | write support. The biggest limitation at present is that files/directories | |
57 | cannot be created or deleted. See below for the list of write features that | |
58 | are so far supported. Another limitation is that writing to compressed files | |
59 | is not implemented at all. Also, neither read nor write access to encrypted | |
60 | files is so far implemented. | |
1da177e4 LT |
61 | - The new driver has full support for sparse files on NTFS 3.x volumes which |
62 | the old driver isn't happy with. | |
63 | - The new driver supports execution of binaries due to mmap() now being | |
64 | supported. | |
65 | - The new driver supports loopback mounting of files on NTFS which is used by | |
66 | some Linux distributions to enable the user to run Linux from an NTFS | |
67 | partition by creating a large file while in Windows and then loopback | |
68 | mounting the file while in Linux and creating a Linux filesystem on it that | |
69 | is used to install Linux on it. | |
70 | - A comparison of the two drivers using: | |
71 | time find . -type f -exec md5sum "{}" \; | |
72 | run three times in sequence with each driver (after a reboot) on a 1.4GiB | |
73 | NTFS partition, showed the new driver to be 20% faster in total time elapsed | |
74 | (from 9:43 minutes on average down to 7:53). The time spent in user space | |
75 | was unchanged but the time spent in the kernel was decreased by a factor of | |
76 | 2.5 (from 85 CPU seconds down to 33). | |
77 | - The driver does not support short file names in general. For backwards | |
78 | compatibility, we implement access to files using their short file names if | |
79 | they exist. The driver will not create short file names however, and a | |
80 | rename will discard any existing short file name. | |
81 | - The new driver supports exporting of mounted NTFS volumes via NFS. | |
82 | - The new driver supports async io (aio). | |
83 | - The new driver supports fsync(2), fdatasync(2), and msync(2). | |
84 | - The new driver supports readv(2) and writev(2). | |
85 | - The new driver supports access time updates (including mtime and ctime). | |
98b27036 AA |
86 | - The new driver supports truncate(2) and open(2) with O_TRUNC. But at present |
87 | only very limited support for highly fragmented files, i.e. ones which have | |
88 | their data attribute split across multiple extents, is included. Another | |
89 | limitation is that at present truncate(2) will never create sparse files, | |
90 | since to mark a file sparse we need to modify the directory entry for the | |
91 | file and we do not implement directory modifications yet. | |
92 | - The new driver supports write(2) which can both overwrite existing data and | |
93 | extend the file size so that you can write beyond the existing data. Also, | |
94 | writing into sparse regions is supported and the holes are filled in with | |
95 | clusters. But at present only limited support for highly fragmented files, | |
96 | i.e. ones which have their data attribute split across multiple extents, is | |
97 | included. Another limitation is that write(2) will never create sparse | |
98 | files, since to mark a file sparse we need to modify the directory entry for | |
99 | the file and we do not implement directory modifications yet. | |
1da177e4 LT |
100 | |
101 | Supported mount options | |
102 | ======================= | |
103 | ||
104 | In addition to the generic mount options described by the manual page for the | |
105 | mount command (man 8 mount, also see man 5 fstab), the NTFS driver supports the | |
106 | following mount options: | |
107 | ||
108 | iocharset=name Deprecated option. Still supported but please use | |
109 | nls=name in the future. See description for nls=name. | |
110 | ||
111 | nls=name Character set to use when returning file names. | |
112 | Unlike VFAT, NTFS suppresses names that contain | |
113 | unconvertible characters. Note that most character | |
114 | sets contain insufficient characters to represent all | |
115 | possible Unicode characters that can exist on NTFS. | |
116 | To be sure you are not missing any files, you are | |
117 | advised to use nls=utf8 which is capable of | |
118 | representing all Unicode characters. | |
119 | ||
120 | utf8=<bool> Option no longer supported. Currently mapped to | |
121 | nls=utf8 but please use nls=utf8 in the future and | |
122 | make sure utf8 is compiled either as module or into | |
123 | the kernel. See description for nls=name. | |
124 | ||
125 | uid= | |
126 | gid= | |
127 | umask= Provide default owner, group, and access mode mask. | |
128 | These options work as documented in mount(8). By | |
129 | default, the files/directories are owned by root and | |
130 | he/she has read and write permissions, as well as | |
131 | browse permission for directories. No one else has any | |
132 | access permissions. I.e. the mode on all files is by | |
133 | default rw------- and for directories rwx------, a | |
134 | consequence of the default fmask=0177 and dmask=0077. | |
135 | Using a umask of zero will grant all permissions to | |
136 | everyone, i.e. all files and directories will have mode | |
137 | rwxrwxrwx. | |
138 | ||
139 | fmask= | |
140 | dmask= Instead of specifying umask which applies both to | |
141 | files and directories, fmask applies only to files and | |
142 | dmask only to directories. | |
143 | ||
144 | sloppy=<BOOL> If sloppy is specified, ignore unknown mount options. | |
145 | Otherwise the default behaviour is to abort mount if | |
146 | any unknown options are found. | |
147 | ||
148 | show_sys_files=<BOOL> If show_sys_files is specified, show the system files | |
149 | in directory listings. Otherwise the default behaviour | |
150 | is to hide the system files. | |
151 | Note that even when show_sys_files is specified, "$MFT" | |
152 | will not be visible due to bugs/mis-features in glibc. | |
153 | Further, note that irrespective of show_sys_files, all | |
154 | files are accessible by name, i.e. you can always do | |
155 | "ls -l \$UpCase" for example to specifically show the | |
156 | system file containing the Unicode upcase table. | |
157 | ||
158 | case_sensitive=<BOOL> If case_sensitive is specified, treat all file names as | |
159 | case sensitive and create file names in the POSIX | |
160 | namespace. Otherwise the default behaviour is to treat | |
161 | file names as case insensitive and to create file names | |
162 | in the WIN32/LONG name space. Note, the Linux NTFS | |
163 | driver will never create short file names and will | |
164 | remove them on rename/delete of the corresponding long | |
165 | file name. | |
166 | Note that files remain accessible via their short file | |
167 | name, if it exists. If case_sensitive, you will need | |
168 | to provide the correct case of the short file name. | |
169 | ||
c002f425 AA |
170 | disable_sparse=<BOOL> If disable_sparse is specified, creation of sparse |
171 | regions, i.e. holes, inside files is disabled for the | |
172 | volume (for the duration of this mount only). By | |
173 | default, creation of sparse regions is enabled, which | |
174 | is consistent with the behaviour of traditional Unix | |
175 | filesystems. | |
176 | ||
177 | errors=opt What to do when critical filesystem errors are found. | |
1da177e4 LT |
178 | Following values can be used for "opt": |
179 | continue: DEFAULT, try to clean-up as much as | |
180 | possible, e.g. marking a corrupt inode as | |
181 | bad so it is no longer accessed, and then | |
182 | continue. | |
183 | recover: At present only supported is recovery of | |
184 | the boot sector from the backup copy. | |
185 | If read-only mount, the recovery is done | |
186 | in memory only and not written to disk. | |
187 | Note that the options are additive, i.e. specifying: | |
188 | errors=continue,errors=recover | |
189 | means the driver will attempt to recover and if that | |
190 | fails it will clean-up as much as possible and | |
191 | continue. | |
192 | ||
193 | mft_zone_multiplier= Set the MFT zone multiplier for the volume (this | |
194 | setting is not persistent across mounts and can be | |
195 | changed from mount to mount but cannot be changed on | |
196 | remount). Values of 1 to 4 are allowed, 1 being the | |
197 | default. The MFT zone multiplier determines how much | |
198 | space is reserved for the MFT on the volume. If all | |
199 | other space is used up, then the MFT zone will be | |
200 | shrunk dynamically, so this has no impact on the | |
201 | amount of free space. However, it can have an impact | |
202 | on performance by affecting fragmentation of the MFT. | |
203 | In general use the default. If you have a lot of small | |
204 | files then use a higher value. The values have the | |
205 | following meaning: | |
206 | Value MFT zone size (% of volume size) | |
207 | 1 12.5% | |
208 | 2 25% | |
209 | 3 37.5% | |
210 | 4 50% | |
211 | Note this option is irrelevant for read-only mounts. | |
212 | ||
213 | ||
214 | Known bugs and (mis-)features | |
215 | ============================= | |
216 | ||
217 | - The link count on each directory inode entry is set to 1, due to Linux not | |
218 | supporting directory hard links. This may well confuse some user space | |
219 | applications, since the directory names will have the same inode numbers. | |
220 | This also speeds up ntfs_read_inode() immensely. And we haven't found any | |
221 | problems with this approach so far. If you find a problem with this, please | |
222 | let us know. | |
223 | ||
224 | ||
225 | Please send bug reports/comments/feedback/abuse to the Linux-NTFS development | |
226 | list at sourceforge: linux-ntfs-dev@lists.sourceforge.net | |
227 | ||
228 | ||
229 | Using NTFS volume and stripe sets | |
230 | ================================= | |
231 | ||
232 | For support of volume and stripe sets, you can either use the kernel's | |
233 | Device-Mapper driver or the kernel's Software RAID / MD driver. The former is | |
234 | the recommended one to use for linear raid. But the latter is required for | |
235 | raid level 5. For striping and mirroring, either driver should work fine. | |
236 | ||
237 | ||
238 | The Device-Mapper driver | |
239 | ------------------------ | |
240 | ||
241 | You will need to create a table of the components of the volume/stripe set and | |
242 | how they fit together and load this into the kernel using the dmsetup utility | |
243 | (see man 8 dmsetup). | |
244 | ||
245 | Linear volume sets, i.e. linear raid, has been tested and works fine. Even | |
246 | though untested, there is no reason why stripe sets, i.e. raid level 0, and | |
247 | mirrors, i.e. raid level 1 should not work, too. Stripes with parity, i.e. | |
248 | raid level 5, unfortunately cannot work yet because the current version of the | |
249 | Device-Mapper driver does not support raid level 5. You may be able to use the | |
250 | Software RAID / MD driver for raid level 5, see the next section for details. | |
251 | ||
252 | To create the table describing your volume you will need to know each of its | |
253 | components and their sizes in sectors, i.e. multiples of 512-byte blocks. | |
254 | ||
255 | For NT4 fault tolerant volumes you can obtain the sizes using fdisk. So for | |
256 | example if one of your partitions is /dev/hda2 you would do: | |
257 | ||
258 | $ fdisk -ul /dev/hda | |
259 | ||
260 | Disk /dev/hda: 81.9 GB, 81964302336 bytes | |
261 | 255 heads, 63 sectors/track, 9964 cylinders, total 160086528 sectors | |
262 | Units = sectors of 1 * 512 = 512 bytes | |
263 | ||
264 | Device Boot Start End Blocks Id System | |
265 | /dev/hda1 * 63 4209029 2104483+ 83 Linux | |
266 | /dev/hda2 4209030 37768814 16779892+ 86 NTFS | |
267 | /dev/hda3 37768815 46170809 4200997+ 83 Linux | |
268 | ||
269 | And you would know that /dev/hda2 has a size of 37768814 - 4209030 + 1 = | |
270 | 33559785 sectors. | |
271 | ||
272 | For Win2k and later dynamic disks, you can for example use the ldminfo utility | |
273 | which is part of the Linux LDM tools (the latest version at the time of | |
274 | writing is linux-ldm-0.0.8.tar.bz2). You can download it from: | |
275 | http://linux-ntfs.sourceforge.net/downloads.html | |
276 | Simply extract the downloaded archive (tar xvjf linux-ldm-0.0.8.tar.bz2), go | |
277 | into it (cd linux-ldm-0.0.8) and change to the test directory (cd test). You | |
278 | will find the precompiled (i386) ldminfo utility there. NOTE: You will not be | |
279 | able to compile this yourself easily so use the binary version! | |
280 | ||
281 | Then you would use ldminfo in dump mode to obtain the necessary information: | |
282 | ||
283 | $ ./ldminfo --dump /dev/hda | |
284 | ||
285 | This would dump the LDM database found on /dev/hda which describes all of your | |
286 | dynamic disks and all the volumes on them. At the bottom you will see the | |
287 | VOLUME DEFINITIONS section which is all you really need. You may need to look | |
288 | further above to determine which of the disks in the volume definitions is | |
289 | which device in Linux. Hint: Run ldminfo on each of your dynamic disks and | |
290 | look at the Disk Id close to the top of the output for each (the PRIVATE HEADER | |
291 | section). You can then find these Disk Ids in the VBLK DATABASE section in the | |
292 | <Disk> components where you will get the LDM Name for the disk that is found in | |
293 | the VOLUME DEFINITIONS section. | |
294 | ||
295 | Note you will also need to enable the LDM driver in the Linux kernel. If your | |
296 | distribution did not enable it, you will need to recompile the kernel with it | |
297 | enabled. This will create the LDM partitions on each device at boot time. You | |
298 | would then use those devices (for /dev/hda they would be /dev/hda1, 2, 3, etc) | |
299 | in the Device-Mapper table. | |
300 | ||
301 | You can also bypass using the LDM driver by using the main device (e.g. | |
302 | /dev/hda) and then using the offsets of the LDM partitions into this device as | |
303 | the "Start sector of device" when creating the table. Once again ldminfo would | |
304 | give you the correct information to do this. | |
305 | ||
306 | Assuming you know all your devices and their sizes things are easy. | |
307 | ||
308 | For a linear raid the table would look like this (note all values are in | |
309 | 512-byte sectors): | |
310 | ||
311 | --- cut here --- | |
312 | # Offset into Size of this Raid type Device Start sector | |
313 | # volume device of device | |
314 | 0 1028161 linear /dev/hda1 0 | |
315 | 1028161 3903762 linear /dev/hdb2 0 | |
316 | 4931923 2103211 linear /dev/hdc1 0 | |
317 | --- cut here --- | |
318 | ||
319 | For a striped volume, i.e. raid level 0, you will need to know the chunk size | |
320 | you used when creating the volume. Windows uses 64kiB as the default, so it | |
321 | will probably be this unless you changes the defaults when creating the array. | |
322 | ||
323 | For a raid level 0 the table would look like this (note all values are in | |
324 | 512-byte sectors): | |
325 | ||
326 | --- cut here --- | |
327 | # Offset Size Raid Number Chunk 1st Start 2nd Start | |
328 | # into of the type of size Device in Device in | |
329 | # volume volume stripes device device | |
330 | 0 2056320 striped 2 128 /dev/hda1 0 /dev/hdb1 0 | |
331 | --- cut here --- | |
332 | ||
333 | If there are more than two devices, just add each of them to the end of the | |
334 | line. | |
335 | ||
336 | Finally, for a mirrored volume, i.e. raid level 1, the table would look like | |
337 | this (note all values are in 512-byte sectors): | |
338 | ||
339 | --- cut here --- | |
fa00e7e1 | 340 | # Ofs Size Raid Log Number Region Should Number Source Start Target Start |
1da177e4 LT |
341 | # in of the type type of log size sync? of Device in Device in |
342 | # vol volume params mirrors Device Device | |
343 | 0 2056320 mirror core 2 16 nosync 2 /dev/hda1 0 /dev/hdb1 0 | |
344 | --- cut here --- | |
345 | ||
346 | If you are mirroring to multiple devices you can specify further targets at the | |
347 | end of the line. | |
348 | ||
349 | Note the "Should sync?" parameter "nosync" means that the two mirrors are | |
350 | already in sync which will be the case on a clean shutdown of Windows. If the | |
351 | mirrors are not clean, you can specify the "sync" option instead of "nosync" | |
352 | and the Device-Mapper driver will then copy the entirey of the "Source Device" | |
353 | to the "Target Device" or if you specified multipled target devices to all of | |
354 | them. | |
355 | ||
356 | Once you have your table, save it in a file somewhere (e.g. /etc/ntfsvolume1), | |
357 | and hand it over to dmsetup to work with, like so: | |
358 | ||
359 | $ dmsetup create myvolume1 /etc/ntfsvolume1 | |
360 | ||
361 | You can obviously replace "myvolume1" with whatever name you like. | |
362 | ||
363 | If it all worked, you will now have the device /dev/device-mapper/myvolume1 | |
364 | which you can then just use as an argument to the mount command as usual to | |
365 | mount the ntfs volume. For example: | |
366 | ||
367 | $ mount -t ntfs -o ro /dev/device-mapper/myvolume1 /mnt/myvol1 | |
368 | ||
369 | (You need to create the directory /mnt/myvol1 first and of course you can use | |
370 | anything you like instead of /mnt/myvol1 as long as it is an existing | |
371 | directory.) | |
372 | ||
373 | It is advisable to do the mount read-only to see if the volume has been setup | |
374 | correctly to avoid the possibility of causing damage to the data on the ntfs | |
375 | volume. | |
376 | ||
377 | ||
378 | The Software RAID / MD driver | |
379 | ----------------------------- | |
380 | ||
381 | An alternative to using the Device-Mapper driver is to use the kernel's | |
382 | Software RAID / MD driver. For which you need to set up your /etc/raidtab | |
383 | appropriately (see man 5 raidtab). | |
384 | ||
385 | Linear volume sets, i.e. linear raid, as well as stripe sets, i.e. raid level | |
2fe0ae78 | 386 | 0, have been tested and work fine (though see section "Limitations when using |
1da177e4 LT |
387 | the MD driver with NTFS volumes" especially if you want to use linear raid). |
388 | Even though untested, there is no reason why mirrors, i.e. raid level 1, and | |
389 | stripes with parity, i.e. raid level 5, should not work, too. | |
390 | ||
391 | You have to use the "persistent-superblock 0" option for each raid-disk in the | |
392 | NTFS volume/stripe you are configuring in /etc/raidtab as the persistent | |
fff9289b | 393 | superblock used by the MD driver would damage the NTFS volume. |
1da177e4 LT |
394 | |
395 | Windows by default uses a stripe chunk size of 64k, so you probably want the | |
396 | "chunk-size 64k" option for each raid-disk, too. | |
397 | ||
398 | For example, if you have a stripe set consisting of two partitions /dev/hda5 | |
399 | and /dev/hdb1 your /etc/raidtab would look like this: | |
400 | ||
401 | raiddev /dev/md0 | |
402 | raid-level 0 | |
403 | nr-raid-disks 2 | |
404 | nr-spare-disks 0 | |
405 | persistent-superblock 0 | |
406 | chunk-size 64k | |
407 | device /dev/hda5 | |
408 | raid-disk 0 | |
409 | device /dev/hdb1 | |
410 | raid-disl 1 | |
411 | ||
412 | For linear raid, just change the raid-level above to "raid-level linear", for | |
413 | mirrors, change it to "raid-level 1", and for stripe sets with parity, change | |
414 | it to "raid-level 5". | |
415 | ||
416 | Note for stripe sets with parity you will also need to tell the MD driver | |
417 | which parity algorithm to use by specifying the option "parity-algorithm | |
418 | which", where you need to replace "which" with the name of the algorithm to | |
419 | use (see man 5 raidtab for available algorithms) and you will have to try the | |
420 | different available algorithms until you find one that works. Make sure you | |
421 | are working read-only when playing with this as you may damage your data | |
422 | otherwise. If you find which algorithm works please let us know (email the | |
423 | linux-ntfs developers list linux-ntfs-dev@lists.sourceforge.net or drop in on | |
424 | IRC in channel #ntfs on the irc.freenode.net network) so we can update this | |
425 | documentation. | |
426 | ||
427 | Once the raidtab is setup, run for example raid0run -a to start all devices or | |
428 | raid0run /dev/md0 to start a particular md device, in this case /dev/md0. | |
429 | ||
430 | Then just use the mount command as usual to mount the ntfs volume using for | |
431 | example: mount -t ntfs -o ro /dev/md0 /mnt/myntfsvolume | |
432 | ||
433 | It is advisable to do the mount read-only to see if the md volume has been | |
434 | setup correctly to avoid the possibility of causing damage to the data on the | |
435 | ntfs volume. | |
436 | ||
437 | ||
2fe0ae78 | 438 | Limitations when using the Software RAID / MD driver |
1da177e4 LT |
439 | ----------------------------------------------------- |
440 | ||
441 | Using the md driver will not work properly if any of your NTFS partitions have | |
442 | an odd number of sectors. This is especially important for linear raid as all | |
443 | data after the first partition with an odd number of sectors will be offset by | |
444 | one or more sectors so if you mount such a partition with write support you | |
445 | will cause massive damage to the data on the volume which will only become | |
446 | apparent when you try to use the volume again under Windows. | |
447 | ||
448 | So when using linear raid, make sure that all your partitions have an even | |
449 | number of sectors BEFORE attempting to use it. You have been warned! | |
450 | ||
451 | Even better is to simply use the Device-Mapper for linear raid and then you do | |
452 | not have this problem with odd numbers of sectors. | |
453 | ||
454 | ||
455 | ChangeLog | |
456 | ========= | |
457 | ||
458 | Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog. | |
459 | ||
e750d1c7 AA |
460 | 2.1.27: |
461 | - Implement page migration support so the kernel can move memory used | |
462 | by NTFS files and directories around for management purposes. | |
463 | - Add support for writing to sparse files created with Windows XP SP2. | |
464 | - Many minor improvements and bug fixes. | |
1cf3109f AA |
465 | 2.1.26: |
466 | - Implement support for sector sizes above 512 bytes (up to the maximum | |
467 | supported by NTFS which is 4096 bytes). | |
468 | - Enhance support for NTFS volumes which were supported by Windows but | |
469 | not by Linux due to invalid attribute list attribute flags. | |
470 | - A few minor updates and bug fixes. | |
98b27036 AA |
471 | 2.1.25: |
472 | - Write support is now extended with write(2) being able to both | |
473 | overwrite existing file data and to extend files. Also, if a write | |
474 | to a sparse region occurs, write(2) will fill in the hole. Note, | |
475 | mmap(2) based writes still do not support writing into holes or | |
476 | writing beyond the initialized size. | |
477 | - Write support has a new feature and that is that truncate(2) and | |
478 | open(2) with O_TRUNC are now implemented thus files can be both made | |
479 | smaller and larger. | |
480 | - Note: Both write(2) and truncate(2)/open(2) with O_TRUNC still have | |
481 | limitations in that they | |
482 | - only provide limited support for highly fragmented files. | |
483 | - only work on regular, i.e. uncompressed and unencrypted files. | |
484 | - never create sparse files although this will change once directory | |
485 | operations are implemented. | |
486 | - Lots of bug fixes and enhancements across the board. | |
7d333d6c AA |
487 | 2.1.24: |
488 | - Support journals ($LogFile) which have been modified by chkdsk. This | |
489 | means users can boot into Windows after we marked the volume dirty. | |
490 | The Windows boot will run chkdsk and then reboot. The user can then | |
491 | immediately boot into Linux rather than having to do a full Windows | |
492 | boot first before rebooting into Linux and we will recognize such a | |
493 | journal and empty it as it is clean by definition. | |
494 | - Support journals ($LogFile) with only one restart page as well as | |
495 | journals with two different restart pages. We sanity check both and | |
496 | either use the only sane one or the more recent one of the two in the | |
497 | case that both are valid. | |
498 | - Lots of bug fixes and enhancements across the board. | |
af859a42 AA |
499 | 2.1.23: |
500 | - Stamp the user space journal, aka transaction log, aka $UsnJrnl, if | |
501 | it is present and active thus telling Windows and applications using | |
502 | the transaction log that changes can have happened on the volume | |
503 | which are not recorded in $UsnJrnl. | |
504 | - Detect the case when Windows has been hibernated (suspended to disk) | |
505 | and if this is the case do not allow (re)mounting read-write to | |
506 | prevent data corruption when you boot back into the suspended | |
507 | Windows session. | |
508 | - Implement extension of resident files using the normal file write | |
509 | code paths, i.e. most very small files can be extended to be a little | |
510 | bit bigger but not by much. | |
ba6d2377 AA |
511 | - Add new mount option "disable_sparse". (See list of mount options |
512 | above for details.) | |
af859a42 AA |
513 | - Improve handling of ntfs volumes with errors and strange boot sectors |
514 | in particular. | |
ba6d2377 AA |
515 | - Fix various bugs including a nasty deadlock that appeared in recent |
516 | kernels (around 2.6.11-2.6.12 timeframe). | |
1da177e4 LT |
517 | 2.1.22: |
518 | - Improve handling of ntfs volumes with errors. | |
519 | - Fix various bugs and race conditions. | |
520 | 2.1.21: | |
521 | - Fix several race conditions and various other bugs. | |
522 | - Many internal cleanups, code reorganization, optimizations, and mft | |
523 | and index record writing code rewritten to fit in with the changes. | |
524 | - Update Documentation/filesystems/ntfs.txt with instructions on how to | |
525 | use the Device-Mapper driver with NTFS ftdisk/LDM raid. | |
526 | 2.1.20: | |
527 | - Fix two stupid bugs introduced in 2.1.18 release. | |
528 | 2.1.19: | |
529 | - Minor bugfix in handling of the default upcase table. | |
530 | - Many internal cleanups and improvements. Many thanks to Linus | |
531 | Torvalds and Al Viro for the help and advice with the sparse | |
532 | annotations and cleanups. | |
533 | 2.1.18: | |
534 | - Fix scheduling latencies at mount time. (Ingo Molnar) | |
535 | - Fix endianness bug in a little traversed portion of the attribute | |
536 | lookup code. | |
537 | 2.1.17: | |
538 | - Fix bugs in mount time error code paths. | |
539 | 2.1.16: | |
540 | - Implement access time updates (including mtime and ctime). | |
541 | - Implement fsync(2), fdatasync(2), and msync(2) system calls. | |
542 | - Enable the readv(2) and writev(2) system calls. | |
543 | - Enable access via the asynchronous io (aio) API by adding support for | |
544 | the aio_read(3) and aio_write(3) functions. | |
545 | 2.1.15: | |
546 | - Invalidate quotas when (re)mounting read-write. | |
547 | NOTE: This now only leave user space journalling on the side. (See | |
548 | note for version 2.1.13, below.) | |
549 | 2.1.14: | |
550 | - Fix an NFSd caused deadlock reported by several users. | |
551 | 2.1.13: | |
552 | - Implement writing of inodes (access time updates are not implemented | |
553 | yet so mounting with -o noatime,nodiratime is enforced). | |
554 | - Enable writing out of resident files so you can now overwrite any | |
555 | uncompressed, unencrypted, nonsparse file as long as you do not | |
556 | change the file size. | |
557 | - Add housekeeping of ntfs system files so that ntfsfix no longer needs | |
558 | to be run after writing to an NTFS volume. | |
559 | NOTE: This still leaves quota tracking and user space journalling on | |
560 | the side but they should not cause data corruption. In the worst | |
561 | case the charged quotas will be out of date ($Quota) and some | |
562 | userspace applications might get confused due to the out of date | |
563 | userspace journal ($UsnJrnl). | |
564 | 2.1.12: | |
565 | - Fix the second fix to the decompression engine from the 2.1.9 release | |
566 | and some further internals cleanups. | |
567 | 2.1.11: | |
568 | - Driver internal cleanups. | |
569 | 2.1.10: | |
570 | - Force read-only (re)mounting of volumes with unsupported volume | |
571 | flags and various cleanups. | |
572 | 2.1.9: | |
573 | - Fix two bugs in handling of corner cases in the decompression engine. | |
574 | 2.1.8: | |
575 | - Read the $MFT mirror and compare it to the $MFT and if the two do not | |
576 | match, force a read-only mount and do not allow read-write remounts. | |
577 | - Read and parse the $LogFile journal and if it indicates that the | |
578 | volume was not shutdown cleanly, force a read-only mount and do not | |
579 | allow read-write remounts. If the $LogFile indicates a clean | |
580 | shutdown and a read-write (re)mount is requested, empty $LogFile to | |
581 | ensure that Windows cannot cause data corruption by replaying a stale | |
582 | journal after Linux has written to the volume. | |
583 | - Improve time handling so that the NTFS time is fully preserved when | |
584 | converted to kernel time and only up to 99 nano-seconds are lost when | |
585 | kernel time is converted to NTFS time. | |
586 | 2.1.7: | |
587 | - Enable NFS exporting of mounted NTFS volumes. | |
588 | 2.1.6: | |
589 | - Fix minor bug in handling of compressed directories that fixes the | |
590 | erroneous "du" and "stat" output people reported. | |
591 | 2.1.5: | |
592 | - Minor bug fix in attribute list attribute handling that fixes the | |
593 | I/O errors on "ls" of certain fragmented files found by at least two | |
594 | people running Windows XP. | |
595 | 2.1.4: | |
596 | - Minor update allowing compilation with all gcc versions (well, the | |
597 | ones the kernel can be compiled with anyway). | |
598 | 2.1.3: | |
599 | - Major bug fixes for reading files and volumes in corner cases which | |
600 | were being hit by Windows 2k/XP users. | |
601 | 2.1.2: | |
5d3f083d | 602 | - Major bug fixes alleviating the hangs in statfs experienced by some |
1da177e4 LT |
603 | users. |
604 | 2.1.1: | |
605 | - Update handling of compressed files so people no longer get the | |
606 | frequently reported warning messages about initialized_size != | |
607 | data_size. | |
608 | 2.1.0: | |
609 | - Add configuration option for developmental write support. | |
610 | - Initial implementation of file overwriting. (Writes to resident files | |
611 | are not written out to disk yet, so avoid writing to files smaller | |
612 | than about 1kiB.) | |
613 | - Intercept/abort changes in file size as they are not implemented yet. | |
614 | 2.0.25: | |
615 | - Minor bugfixes in error code paths and small cleanups. | |
616 | 2.0.24: | |
617 | - Small internal cleanups. | |
618 | - Support for sendfile system call. (Christoph Hellwig) | |
619 | 2.0.23: | |
620 | - Massive internal locking changes to mft record locking. Fixes | |
621 | various race conditions and deadlocks. | |
622 | - Fix ntfs over loopback for compressed files by adding an | |
623 | optimization barrier. (gcc was screwing up otherwise ?) | |
624 | Thanks go to Christoph Hellwig for pointing these two out: | |
625 | - Remove now unused function fs/ntfs/malloc.h::vmalloc_nofs(). | |
626 | - Fix ntfs_free() for ia64 and parisc. | |
627 | 2.0.22: | |
628 | - Small internal cleanups. | |
629 | 2.0.21: | |
630 | These only affect 32-bit architectures: | |
631 | - Check for, and refuse to mount too large volumes (maximum is 2TiB). | |
632 | - Check for, and refuse to open too large files and directories | |
633 | (maximum is 16TiB). | |
634 | 2.0.20: | |
635 | - Support non-resident directory index bitmaps. This means we now cope | |
636 | with huge directories without problems. | |
637 | - Fix a page leak that manifested itself in some cases when reading | |
638 | directory contents. | |
639 | - Internal cleanups. | |
640 | 2.0.19: | |
641 | - Fix race condition and improvements in block i/o interface. | |
642 | - Optimization when reading compressed files. | |
643 | 2.0.18: | |
644 | - Fix race condition in reading of compressed files. | |
645 | 2.0.17: | |
646 | - Cleanups and optimizations. | |
647 | 2.0.16: | |
648 | - Fix stupid bug introduced in 2.0.15 in new attribute inode API. | |
649 | - Big internal cleanup replacing the mftbmp access hacks by using the | |
650 | new attribute inode API instead. | |
651 | 2.0.15: | |
652 | - Bug fix in parsing of remount options. | |
653 | - Internal changes implementing attribute (fake) inodes allowing all | |
654 | attribute i/o to go via the page cache and to use all the normal | |
655 | vfs/mm functionality. | |
656 | 2.0.14: | |
657 | - Internal changes improving run list merging code and minor locking | |
658 | change to not rely on BKL in ntfs_statfs(). | |
659 | 2.0.13: | |
660 | - Internal changes towards using iget5_locked() in preparation for | |
661 | fake inodes and small cleanups to ntfs_volume structure. | |
662 | 2.0.12: | |
663 | - Internal cleanups in address space operations made possible by the | |
664 | changes introduced in the previous release. | |
665 | 2.0.11: | |
666 | - Internal updates and cleanups introducing the first step towards | |
667 | fake inode based attribute i/o. | |
668 | 2.0.10: | |
669 | - Microsoft says that the maximum number of inodes is 2^32 - 1. Update | |
670 | the driver accordingly to only use 32-bits to store inode numbers on | |
671 | 32-bit architectures. This improves the speed of the driver a little. | |
672 | 2.0.9: | |
673 | - Change decompression engine to use a single buffer. This should not | |
674 | affect performance except perhaps on the most heavy i/o on SMP | |
675 | systems when accessing multiple compressed files from multiple | |
676 | devices simultaneously. | |
677 | - Minor updates and cleanups. | |
678 | 2.0.8: | |
679 | - Remove now obsolete show_inodes and posix mount option(s). | |
680 | - Restore show_sys_files mount option. | |
681 | - Add new mount option case_sensitive, to determine if the driver | |
682 | treats file names as case sensitive or not. | |
683 | - Mostly drop support for short file names (for backwards compatibility | |
684 | we only support accessing files via their short file name if one | |
685 | exists). | |
686 | - Fix dcache aliasing issues wrt short/long file names. | |
687 | - Cleanups and minor fixes. | |
688 | 2.0.7: | |
689 | - Just cleanups. | |
690 | 2.0.6: | |
691 | - Major bugfix to make compatible with other kernel changes. This fixes | |
692 | the hangs/oopses on umount. | |
693 | - Locking cleanup in directory operations (remove BKL usage). | |
694 | 2.0.5: | |
695 | - Major buffer overflow bug fix. | |
696 | - Minor cleanups and updates for kernel 2.5.12. | |
697 | 2.0.4: | |
698 | - Cleanups and updates for kernel 2.5.11. | |
699 | 2.0.3: | |
700 | - Small bug fixes, cleanups, and performance improvements. | |
701 | 2.0.2: | |
702 | - Use default fmask of 0177 so that files are no executable by default. | |
703 | If you want owner executable files, just use fmask=0077. | |
704 | - Update for kernel 2.5.9 but preserve backwards compatibility with | |
705 | kernel 2.5.7. | |
706 | - Minor bug fixes, cleanups, and updates. | |
707 | 2.0.1: | |
708 | - Minor updates, primarily set the executable bit by default on files | |
709 | so they can be executed. | |
710 | 2.0.0: | |
711 | - Started ChangeLog. | |
712 |