Linux NTFS support
From NAS-Central Buffalo - The Linkstation Wiki
m (Added image) |
m (Reodering of the results) |
||
| (9 intermediate revisions not shown) | |||
| Line 1: | Line 1: | ||
{{Articles|LSPro|KuroboxPro|TerastationProV2|TerastationLive}} | {{Articles|LSPro|KuroboxPro|TerastationProV2|TerastationLive}} | ||
{|align=right class=wikitable| | {|align=right class=wikitable| | ||
| - | ||[[Image:Ntfs-1.jpg]] | + | ||[[Image:Ntfs-1.jpg|250px]] |
|} | |} | ||
= Background = | = Background = | ||
| Line 10: | Line 10: | ||
= Available solutions = | = Available solutions = | ||
| - | == Stock kernel's NTFS support ( | + | == Stock kernel's NTFS support (all platforms)== |
The NTFS support that is in the Linux kernel is only allowing read operations on NTFS disk. | The NTFS support that is in the Linux kernel is only allowing read operations on NTFS disk. | ||
| - | == FUSE + NTFS-3G ( | + | Mounting a partition can be done using this command : |
| + | mount -t ntfs /dev/'device' mountpoint | ||
| + | |||
| + | == FUSE + NTFS-3G (all platforms)== | ||
This solution is the easiest to install, and is available for MIPS, PPC & ARM devices ! | This solution is the easiest to install, and is available for MIPS, PPC & ARM devices ! | ||
| Line 21: | Line 24: | ||
mount -t ntfs-3g /dev/'device' mountpoint | mount -t ntfs-3g /dev/'device' mountpoint | ||
| - | == Paragon Software NTFS for Linux ( | + | == Paragon Software NTFS for Linux (ARM only) == |
This solution have been developed by [http://www.ntfs-linux.com/ Paragon Software]. | This solution have been developed by [http://www.ntfs-linux.com/ Paragon Software]. | ||
| Line 27: | Line 30: | ||
The source code is not available but the driver have been compiled for a Marvell CPU close to the one used in our ARM9 devices. The point in testing that is to show if this solution is fast enought to be embedeed in a NAS device like the Linkstation Pro (and other NAS using the same Marvell's SoC). | The source code is not available but the driver have been compiled for a Marvell CPU close to the one used in our ARM9 devices. The point in testing that is to show if this solution is fast enought to be embedeed in a NAS device like the Linkstation Pro (and other NAS using the same Marvell's SoC). | ||
| - | It's have been compiled for a 2.6.12-arm1 kernel (same as the Linkstation stock kernel) but require some modules that are not in the stock Linkstation Pro system. | + | It's have been compiled for a 2.6.12.6-arm1 kernel (same as the Linkstation stock kernel) but require some modules that are not in the stock Linkstation Pro system. |
| + | The tested driver is : | ||
| + | UFSD version 6.02 (Oct 4 2007, 16:33:44) | ||
| + | NTFS read/write support included | ||
| + | $Id: ufsdvfs.c,v 1.117 2007/09/17 14:38:11 shura Exp $ | ||
| - | + | Mounting a partition can be done using this command : | |
| + | mount -t ufsd /dev/'device' mountpoint | ||
= Benchmarking results = | = Benchmarking results = | ||
| - | A Kurobox Pro and [http://www.coker.com.au/bonnie++/ Bonnie++ v1.03a] benchmarking tool have been used to benchmark the filesystems. | + | A Kurobox Pro (running @ 400MHz) and [http://www.coker.com.au/bonnie++/ Bonnie++ v1.03a] benchmarking tool have been used to benchmark the filesystems. |
* EXT3 benchmarking have been done using a 2.6.24-rc3 (Orion) kernel | * EXT3 benchmarking have been done using a 2.6.24-rc3 (Orion) kernel | ||
| - | * FUSE + NTFS-3G benchmarking have been done using a 2.6.24-rc3 (Orion) kernel | + | * FUSE v2.7.1 + NTFS-3G v1.1120 benchmarking have been done using a 2.6.24-rc3 (Orion) kernel |
| - | * Paragon Software NTFS for Linux | + | * NTFS-3G v1.1128 benchmarking have been done using a 2.6.24-rc3 (Orion) kernel |
| + | * Paragon Software NTFS for Linux driver (marvell_ufsd_slow.ko) benchmarking have been done using kernel 2.6.12.6 | ||
| Line 109: | Line 118: | ||
|align=right style="background:#DFDFDF; color:black"|3578 | |align=right style="background:#DFDFDF; color:black"|3578 | ||
|align=right style="background:#DFDFDF; color:black"|98 | |align=right style="background:#DFDFDF; color:black"|98 | ||
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|+++++ |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|+++ |
|align=right style="background:#DFDFDF; color:black"|6147 | |align=right style="background:#DFDFDF; color:black"|6147 | ||
|align=right style="background:#DFDFDF; color:black"|99 | |align=right style="background:#DFDFDF; color:black"|99 | ||
|align=right style="background:#DFDFDF; color:black"|3654 | |align=right style="background:#DFDFDF; color:black"|3654 | ||
|align=right style="background:#DFDFDF; color:black"|98 | |align=right style="background:#DFDFDF; color:black"|98 | ||
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|+++++ |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|+++ |
|align=right style="background:#DFDFDF; color:black"|6139 | |align=right style="background:#DFDFDF; color:black"|6139 | ||
|align=right style="background:#DFDFDF; color:black"|98 | |align=right style="background:#DFDFDF; color:black"|98 | ||
|---- | |---- | ||
| - | |align=left style="background:#BBBBBB; font-family: Arial Bold; color:black"| | + | |align=left style="background:#BBBBBB; font-family: Arial Bold; color:black"|Paragon's NTFS driver / internal disk |
|align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|300M | |align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|300M | ||
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|1548 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|96 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|12780 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|69 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|18430 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|15 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|1674 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|98 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|26814 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|2 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|227.6 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|4 |
|align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|16 | |align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|16 | ||
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|181 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|60 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|16191 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|83 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|278 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|53 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|67 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|26 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|+++++ |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|+++ |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|32 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|9 |
|---- | |---- | ||
| - | |align=left style="background:#BBBBBB; font-family: Arial Bold; color:black"| | + | |align=left style="background:#BBBBBB; font-family: Arial Bold; color:black"|NTFS-3G v1.1120 + FUSE v2.7.1 / internal disk |
|align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|300M | |align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|300M | ||
|align=right style="background:#DFDFDF; color:black"|911 | |align=right style="background:#DFDFDF; color:black"|911 | ||
| Line 176: | Line 185: | ||
|align=right style="background:#DFDFDF; color:black"|6 | |align=right style="background:#DFDFDF; color:black"|6 | ||
|---- | |---- | ||
| - | |align=left style="background:#BBBBBB; font-family: Arial Bold; color:black"| | + | |---- |
| + | |align=left style="background:#BBBBBB; font-family: Arial Bold; color:black"|NTFS-3G v1.1128 (including FUSE) / internal disk | ||
|align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|300M | |align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|300M | ||
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|937 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|50 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|1705 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|9 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|1831 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|14 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|1573 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|99 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|12958 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|11 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|136.9 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|4 |
|align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|16 | |align=right style="background:#BBBBBB; font-family: Arial Bold; color:black"|16 | ||
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|175 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|8 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|571 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|11 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|193 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|7 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|187 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|8 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|592 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|11 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|175 |
| - | |align=right style="background:#DFDFDF; color:black"| | + | |align=right style="background:#DFDFDF; color:black"|5 |
|---- | |---- | ||
|} | |} | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
= Conclusion = | = Conclusion = | ||
| - | Fuse + NTFS-3G give some slow performances on a Linkstation Pro/Kurobox Pro (and it should be worst on PPC based devices). In real usage configuration (ie : using an USB drive in NTFS format), performances will even be slower because of the USB driver taking CPU time ... | + | Fuse + NTFS-3G give some slow performances on a Linkstation Pro/Kurobox Pro (and it should be worst on PPC based devices). In real usage configuration (ie : using an USB drive in NTFS format), performances will even be slower because of the USB driver taking CPU time ... We'll have to wait for this driver to be in optimization phase to have decent writing speed ! |
| - | + | The Paragon Software driver is 2x faster than ntfs-3g for reading data and 7.5x faster for writing data. It's a commercial product that is perfect for NAS builders who want to add efficient NTFS support in their NAS, but for communities like ours, it's useless (because it's not available for individual persons and because it's linked to a specific kernel version). | |
Latest revision as of 15:30, 3 December 2007
Contents |
Background
For a long time, only reading a NTFS partition was available in Linux. It is a limitation for NAS devices as it means that a plugged USB drive that is in NTFS format will not be able in the network to store/modify data on this drive ! But there are, now, some solutions to gain write access to NTFS partitions. We will list the available solutions and benchmark them ...
Available solutions
Stock kernel's NTFS support (all platforms)
The NTFS support that is in the Linux kernel is only allowing read operations on NTFS disk.
Mounting a partition can be done using this command :
mount -t ntfs /dev/'device' mountpoint
FUSE + NTFS-3G (all platforms)
This solution is the easiest to install, and is available for MIPS, PPC & ARM devices !
You need to compile the fuse support in your kernel and to compile Fuse and NTFS-3G.
Mounting a partition can be done using this command :
mount -t ntfs-3g /dev/'device' mountpoint
Paragon Software NTFS for Linux (ARM only)
This solution have been developed by Paragon Software.
The ARM version is not publicly available and I had to sign a NDA to receive the module for benchmarking. The source code is not available but the driver have been compiled for a Marvell CPU close to the one used in our ARM9 devices. The point in testing that is to show if this solution is fast enought to be embedeed in a NAS device like the Linkstation Pro (and other NAS using the same Marvell's SoC).
It's have been compiled for a 2.6.12.6-arm1 kernel (same as the Linkstation stock kernel) but require some modules that are not in the stock Linkstation Pro system. The tested driver is :
UFSD version 6.02 (Oct 4 2007, 16:33:44) NTFS read/write support included $Id: ufsdvfs.c,v 1.117 2007/09/17 14:38:11 shura Exp $
Mounting a partition can be done using this command :
mount -t ufsd /dev/'device' mountpoint
Benchmarking results
A Kurobox Pro (running @ 400MHz) and Bonnie++ v1.03a benchmarking tool have been used to benchmark the filesystems.
- EXT3 benchmarking have been done using a 2.6.24-rc3 (Orion) kernel
- FUSE v2.7.1 + NTFS-3G v1.1120 benchmarking have been done using a 2.6.24-rc3 (Orion) kernel
- NTFS-3G v1.1128 benchmarking have been done using a 2.6.24-rc3 (Orion) kernel
- Paragon Software NTFS for Linux driver (marvell_ufsd_slow.ko) benchmarking have been done using kernel 2.6.12.6
| Sequential Output | Sequential Input | Random | Sequential Create | Random Create | ||||||||||||||||||||||
| Per Chr | Block | Rewrite | Per Chr | Block | Seeks | Create | Read | Delete | Create | Read | Delete | |||||||||||||||
| Size | K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | /sec | %CP | Files | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | |
| EXT3 / internal disk | 300M | 1893 | 97 | 21213 | 75 | 17732 | 59 | 1688 | 99 | 47158 | 91 | 227.7 | 7 | 16 | 3578 | 98 | +++++ | +++ | 6147 | 99 | 3654 | 98 | +++++ | +++ | 6139 | 98 |
| Paragon's NTFS driver / internal disk | 300M | 1548 | 96 | 12780 | 69 | 18430 | 15 | 1674 | 98 | 26814 | 2 | 227.6 | 4 | 16 | 181 | 60 | 16191 | 83 | 278 | 53 | 67 | 26 | +++++ | +++ | 32 | 9 |
| NTFS-3G v1.1120 + FUSE v2.7.1 / internal disk | 300M | 911 | 48 | 1708 | 9 | 1853 | 14 | 1554 | 99 | 12707 | 11 | 137.5 | 3 | 16 | 167 | 8 | 566 | 12 | 188 | 7 | 182 | 9 | 590 | 12 | 183 | 6 |
| NTFS-3G v1.1128 (including FUSE) / internal disk | 300M | 937 | 50 | 1705 | 9 | 1831 | 14 | 1573 | 99 | 12958 | 11 | 136.9 | 4 | 16 | 175 | 8 | 571 | 11 | 193 | 7 | 187 | 8 | 592 | 11 | 175 | 5 |
Conclusion
Fuse + NTFS-3G give some slow performances on a Linkstation Pro/Kurobox Pro (and it should be worst on PPC based devices). In real usage configuration (ie : using an USB drive in NTFS format), performances will even be slower because of the USB driver taking CPU time ... We'll have to wait for this driver to be in optimization phase to have decent writing speed !
The Paragon Software driver is 2x faster than ntfs-3g for reading data and 7.5x faster for writing data. It's a commercial product that is perfect for NAS builders who want to add efficient NTFS support in their NAS, but for communities like ours, it's useless (because it's not available for individual persons and because it's linked to a specific kernel version).

