Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |
Matt LaPlante | 2fe0ae7 | 2006-10-03 22:50:39 +0200 | [diff] [blame] | 16 | - Limitations when using the MD driver |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 17 | - ChangeLog |
| 18 | |
| 19 | |
| 20 | Overview |
| 21 | ======== |
| 22 | |
| 23 | Linux-NTFS comes with a number of user-space programs known as ntfsprogs. |
Anton Altaparmakov | c002f42 | 2005-02-03 12:02:56 +0000 | [diff] [blame] | 24 | These include mkntfs, a full-featured ntfs filesystem format utility, |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |
Matt LaPlante | 2fe0ae7 | 2006-10-03 22:50:39 +0200 | [diff] [blame] | 46 | FAQ, documentation on the NTFS on-disk format, information on the Linux-NTFS |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 47 | userspace utilities, etc. |
| 48 | |
| 49 | |
| 50 | Features |
| 51 | ======== |
| 52 | |
Anton Altaparmakov | 98b2703 | 2005-10-11 15:40:40 +0100 | [diff] [blame] | 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. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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). |
Anton Altaparmakov | 98b2703 | 2005-10-11 15:40:40 +0100 | [diff] [blame] | 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. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Anton Altaparmakov | c002f42 | 2005-02-03 12:02:56 +0000 | [diff] [blame] | 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. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 --- |
Matt LaPlante | fa00e7e | 2006-11-30 04:55:36 +0100 | [diff] [blame] | 340 | # Ofs Size Raid Log Number Region Should Number Source Start Target Start |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |
Matt LaPlante | 2fe0ae7 | 2006-10-03 22:50:39 +0200 | [diff] [blame] | 386 | 0, have been tested and work fine (though see section "Limitations when using |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |
Matt LaPlante | fff9289 | 2006-10-03 22:47:42 +0200 | [diff] [blame] | 393 | superblock used by the MD driver would damage the NTFS volume. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Matt LaPlante | 2fe0ae7 | 2006-10-03 22:50:39 +0200 | [diff] [blame] | 438 | Limitations when using the Software RAID / MD driver |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Anton Altaparmakov | 8331191 | 2007-01-18 09:42:48 +0000 | [diff] [blame] | 460 | 2.1.28: |
| 461 | - Fix a deadlock. |
Anton Altaparmakov | e750d1c | 2006-03-23 17:04:12 +0000 | [diff] [blame] | 462 | 2.1.27: |
| 463 | - Implement page migration support so the kernel can move memory used |
| 464 | by NTFS files and directories around for management purposes. |
| 465 | - Add support for writing to sparse files created with Windows XP SP2. |
| 466 | - Many minor improvements and bug fixes. |
Anton Altaparmakov | 1cf3109f | 2006-02-24 10:48:14 +0000 | [diff] [blame] | 467 | 2.1.26: |
| 468 | - Implement support for sector sizes above 512 bytes (up to the maximum |
| 469 | supported by NTFS which is 4096 bytes). |
| 470 | - Enhance support for NTFS volumes which were supported by Windows but |
| 471 | not by Linux due to invalid attribute list attribute flags. |
| 472 | - A few minor updates and bug fixes. |
Anton Altaparmakov | 98b2703 | 2005-10-11 15:40:40 +0100 | [diff] [blame] | 473 | 2.1.25: |
| 474 | - Write support is now extended with write(2) being able to both |
| 475 | overwrite existing file data and to extend files. Also, if a write |
| 476 | to a sparse region occurs, write(2) will fill in the hole. Note, |
| 477 | mmap(2) based writes still do not support writing into holes or |
| 478 | writing beyond the initialized size. |
| 479 | - Write support has a new feature and that is that truncate(2) and |
| 480 | open(2) with O_TRUNC are now implemented thus files can be both made |
| 481 | smaller and larger. |
| 482 | - Note: Both write(2) and truncate(2)/open(2) with O_TRUNC still have |
| 483 | limitations in that they |
| 484 | - only provide limited support for highly fragmented files. |
| 485 | - only work on regular, i.e. uncompressed and unencrypted files. |
| 486 | - never create sparse files although this will change once directory |
| 487 | operations are implemented. |
| 488 | - Lots of bug fixes and enhancements across the board. |
Anton Altaparmakov | 7d333d6 | 2005-09-08 23:01:16 +0100 | [diff] [blame] | 489 | 2.1.24: |
| 490 | - Support journals ($LogFile) which have been modified by chkdsk. This |
| 491 | means users can boot into Windows after we marked the volume dirty. |
| 492 | The Windows boot will run chkdsk and then reboot. The user can then |
| 493 | immediately boot into Linux rather than having to do a full Windows |
| 494 | boot first before rebooting into Linux and we will recognize such a |
| 495 | journal and empty it as it is clean by definition. |
| 496 | - Support journals ($LogFile) with only one restart page as well as |
| 497 | journals with two different restart pages. We sanity check both and |
| 498 | either use the only sane one or the more recent one of the two in the |
| 499 | case that both are valid. |
| 500 | - Lots of bug fixes and enhancements across the board. |
Anton Altaparmakov | af859a4 | 2005-06-25 21:07:27 +0100 | [diff] [blame] | 501 | 2.1.23: |
| 502 | - Stamp the user space journal, aka transaction log, aka $UsnJrnl, if |
| 503 | it is present and active thus telling Windows and applications using |
| 504 | the transaction log that changes can have happened on the volume |
| 505 | which are not recorded in $UsnJrnl. |
| 506 | - Detect the case when Windows has been hibernated (suspended to disk) |
| 507 | and if this is the case do not allow (re)mounting read-write to |
| 508 | prevent data corruption when you boot back into the suspended |
| 509 | Windows session. |
| 510 | - Implement extension of resident files using the normal file write |
| 511 | code paths, i.e. most very small files can be extended to be a little |
| 512 | bit bigger but not by much. |
Anton Altaparmakov | ba6d237 | 2005-06-26 22:12:02 +0100 | [diff] [blame] | 513 | - Add new mount option "disable_sparse". (See list of mount options |
| 514 | above for details.) |
Anton Altaparmakov | af859a4 | 2005-06-25 21:07:27 +0100 | [diff] [blame] | 515 | - Improve handling of ntfs volumes with errors and strange boot sectors |
| 516 | in particular. |
Anton Altaparmakov | ba6d237 | 2005-06-26 22:12:02 +0100 | [diff] [blame] | 517 | - Fix various bugs including a nasty deadlock that appeared in recent |
| 518 | kernels (around 2.6.11-2.6.12 timeframe). |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 519 | 2.1.22: |
| 520 | - Improve handling of ntfs volumes with errors. |
| 521 | - Fix various bugs and race conditions. |
| 522 | 2.1.21: |
| 523 | - Fix several race conditions and various other bugs. |
| 524 | - Many internal cleanups, code reorganization, optimizations, and mft |
| 525 | and index record writing code rewritten to fit in with the changes. |
| 526 | - Update Documentation/filesystems/ntfs.txt with instructions on how to |
| 527 | use the Device-Mapper driver with NTFS ftdisk/LDM raid. |
| 528 | 2.1.20: |
| 529 | - Fix two stupid bugs introduced in 2.1.18 release. |
| 530 | 2.1.19: |
| 531 | - Minor bugfix in handling of the default upcase table. |
| 532 | - Many internal cleanups and improvements. Many thanks to Linus |
| 533 | Torvalds and Al Viro for the help and advice with the sparse |
| 534 | annotations and cleanups. |
| 535 | 2.1.18: |
| 536 | - Fix scheduling latencies at mount time. (Ingo Molnar) |
| 537 | - Fix endianness bug in a little traversed portion of the attribute |
| 538 | lookup code. |
| 539 | 2.1.17: |
| 540 | - Fix bugs in mount time error code paths. |
| 541 | 2.1.16: |
| 542 | - Implement access time updates (including mtime and ctime). |
| 543 | - Implement fsync(2), fdatasync(2), and msync(2) system calls. |
| 544 | - Enable the readv(2) and writev(2) system calls. |
| 545 | - Enable access via the asynchronous io (aio) API by adding support for |
| 546 | the aio_read(3) and aio_write(3) functions. |
| 547 | 2.1.15: |
| 548 | - Invalidate quotas when (re)mounting read-write. |
| 549 | NOTE: This now only leave user space journalling on the side. (See |
| 550 | note for version 2.1.13, below.) |
| 551 | 2.1.14: |
| 552 | - Fix an NFSd caused deadlock reported by several users. |
| 553 | 2.1.13: |
| 554 | - Implement writing of inodes (access time updates are not implemented |
| 555 | yet so mounting with -o noatime,nodiratime is enforced). |
| 556 | - Enable writing out of resident files so you can now overwrite any |
| 557 | uncompressed, unencrypted, nonsparse file as long as you do not |
| 558 | change the file size. |
| 559 | - Add housekeeping of ntfs system files so that ntfsfix no longer needs |
| 560 | to be run after writing to an NTFS volume. |
| 561 | NOTE: This still leaves quota tracking and user space journalling on |
| 562 | the side but they should not cause data corruption. In the worst |
| 563 | case the charged quotas will be out of date ($Quota) and some |
| 564 | userspace applications might get confused due to the out of date |
| 565 | userspace journal ($UsnJrnl). |
| 566 | 2.1.12: |
| 567 | - Fix the second fix to the decompression engine from the 2.1.9 release |
| 568 | and some further internals cleanups. |
| 569 | 2.1.11: |
| 570 | - Driver internal cleanups. |
| 571 | 2.1.10: |
| 572 | - Force read-only (re)mounting of volumes with unsupported volume |
| 573 | flags and various cleanups. |
| 574 | 2.1.9: |
| 575 | - Fix two bugs in handling of corner cases in the decompression engine. |
| 576 | 2.1.8: |
| 577 | - Read the $MFT mirror and compare it to the $MFT and if the two do not |
| 578 | match, force a read-only mount and do not allow read-write remounts. |
| 579 | - Read and parse the $LogFile journal and if it indicates that the |
| 580 | volume was not shutdown cleanly, force a read-only mount and do not |
| 581 | allow read-write remounts. If the $LogFile indicates a clean |
| 582 | shutdown and a read-write (re)mount is requested, empty $LogFile to |
| 583 | ensure that Windows cannot cause data corruption by replaying a stale |
| 584 | journal after Linux has written to the volume. |
| 585 | - Improve time handling so that the NTFS time is fully preserved when |
| 586 | converted to kernel time and only up to 99 nano-seconds are lost when |
| 587 | kernel time is converted to NTFS time. |
| 588 | 2.1.7: |
| 589 | - Enable NFS exporting of mounted NTFS volumes. |
| 590 | 2.1.6: |
| 591 | - Fix minor bug in handling of compressed directories that fixes the |
| 592 | erroneous "du" and "stat" output people reported. |
| 593 | 2.1.5: |
| 594 | - Minor bug fix in attribute list attribute handling that fixes the |
| 595 | I/O errors on "ls" of certain fragmented files found by at least two |
| 596 | people running Windows XP. |
| 597 | 2.1.4: |
| 598 | - Minor update allowing compilation with all gcc versions (well, the |
| 599 | ones the kernel can be compiled with anyway). |
| 600 | 2.1.3: |
| 601 | - Major bug fixes for reading files and volumes in corner cases which |
| 602 | were being hit by Windows 2k/XP users. |
| 603 | 2.1.2: |
Matt LaPlante | 5d3f083 | 2006-11-30 05:21:10 +0100 | [diff] [blame] | 604 | - Major bug fixes alleviating the hangs in statfs experienced by some |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 605 | users. |
| 606 | 2.1.1: |
| 607 | - Update handling of compressed files so people no longer get the |
| 608 | frequently reported warning messages about initialized_size != |
| 609 | data_size. |
| 610 | 2.1.0: |
| 611 | - Add configuration option for developmental write support. |
| 612 | - Initial implementation of file overwriting. (Writes to resident files |
| 613 | are not written out to disk yet, so avoid writing to files smaller |
| 614 | than about 1kiB.) |
| 615 | - Intercept/abort changes in file size as they are not implemented yet. |
| 616 | 2.0.25: |
| 617 | - Minor bugfixes in error code paths and small cleanups. |
| 618 | 2.0.24: |
| 619 | - Small internal cleanups. |
| 620 | - Support for sendfile system call. (Christoph Hellwig) |
| 621 | 2.0.23: |
| 622 | - Massive internal locking changes to mft record locking. Fixes |
| 623 | various race conditions and deadlocks. |
| 624 | - Fix ntfs over loopback for compressed files by adding an |
| 625 | optimization barrier. (gcc was screwing up otherwise ?) |
| 626 | Thanks go to Christoph Hellwig for pointing these two out: |
| 627 | - Remove now unused function fs/ntfs/malloc.h::vmalloc_nofs(). |
| 628 | - Fix ntfs_free() for ia64 and parisc. |
| 629 | 2.0.22: |
| 630 | - Small internal cleanups. |
| 631 | 2.0.21: |
| 632 | These only affect 32-bit architectures: |
| 633 | - Check for, and refuse to mount too large volumes (maximum is 2TiB). |
| 634 | - Check for, and refuse to open too large files and directories |
| 635 | (maximum is 16TiB). |
| 636 | 2.0.20: |
| 637 | - Support non-resident directory index bitmaps. This means we now cope |
| 638 | with huge directories without problems. |
| 639 | - Fix a page leak that manifested itself in some cases when reading |
| 640 | directory contents. |
| 641 | - Internal cleanups. |
| 642 | 2.0.19: |
| 643 | - Fix race condition and improvements in block i/o interface. |
| 644 | - Optimization when reading compressed files. |
| 645 | 2.0.18: |
| 646 | - Fix race condition in reading of compressed files. |
| 647 | 2.0.17: |
| 648 | - Cleanups and optimizations. |
| 649 | 2.0.16: |
| 650 | - Fix stupid bug introduced in 2.0.15 in new attribute inode API. |
| 651 | - Big internal cleanup replacing the mftbmp access hacks by using the |
| 652 | new attribute inode API instead. |
| 653 | 2.0.15: |
| 654 | - Bug fix in parsing of remount options. |
| 655 | - Internal changes implementing attribute (fake) inodes allowing all |
| 656 | attribute i/o to go via the page cache and to use all the normal |
| 657 | vfs/mm functionality. |
| 658 | 2.0.14: |
| 659 | - Internal changes improving run list merging code and minor locking |
| 660 | change to not rely on BKL in ntfs_statfs(). |
| 661 | 2.0.13: |
| 662 | - Internal changes towards using iget5_locked() in preparation for |
| 663 | fake inodes and small cleanups to ntfs_volume structure. |
| 664 | 2.0.12: |
| 665 | - Internal cleanups in address space operations made possible by the |
| 666 | changes introduced in the previous release. |
| 667 | 2.0.11: |
| 668 | - Internal updates and cleanups introducing the first step towards |
| 669 | fake inode based attribute i/o. |
| 670 | 2.0.10: |
| 671 | - Microsoft says that the maximum number of inodes is 2^32 - 1. Update |
| 672 | the driver accordingly to only use 32-bits to store inode numbers on |
| 673 | 32-bit architectures. This improves the speed of the driver a little. |
| 674 | 2.0.9: |
| 675 | - Change decompression engine to use a single buffer. This should not |
| 676 | affect performance except perhaps on the most heavy i/o on SMP |
| 677 | systems when accessing multiple compressed files from multiple |
| 678 | devices simultaneously. |
| 679 | - Minor updates and cleanups. |
| 680 | 2.0.8: |
| 681 | - Remove now obsolete show_inodes and posix mount option(s). |
| 682 | - Restore show_sys_files mount option. |
| 683 | - Add new mount option case_sensitive, to determine if the driver |
| 684 | treats file names as case sensitive or not. |
| 685 | - Mostly drop support for short file names (for backwards compatibility |
| 686 | we only support accessing files via their short file name if one |
| 687 | exists). |
| 688 | - Fix dcache aliasing issues wrt short/long file names. |
| 689 | - Cleanups and minor fixes. |
| 690 | 2.0.7: |
| 691 | - Just cleanups. |
| 692 | 2.0.6: |
| 693 | - Major bugfix to make compatible with other kernel changes. This fixes |
| 694 | the hangs/oopses on umount. |
| 695 | - Locking cleanup in directory operations (remove BKL usage). |
| 696 | 2.0.5: |
| 697 | - Major buffer overflow bug fix. |
| 698 | - Minor cleanups and updates for kernel 2.5.12. |
| 699 | 2.0.4: |
| 700 | - Cleanups and updates for kernel 2.5.11. |
| 701 | 2.0.3: |
| 702 | - Small bug fixes, cleanups, and performance improvements. |
| 703 | 2.0.2: |
| 704 | - Use default fmask of 0177 so that files are no executable by default. |
| 705 | If you want owner executable files, just use fmask=0077. |
| 706 | - Update for kernel 2.5.9 but preserve backwards compatibility with |
| 707 | kernel 2.5.7. |
| 708 | - Minor bug fixes, cleanups, and updates. |
| 709 | 2.0.1: |
| 710 | - Minor updates, primarily set the executable bit by default on files |
| 711 | so they can be executed. |
| 712 | 2.0.0: |
| 713 | - Started ChangeLog. |
| 714 | |