ntfs2btrfs [options] device
This is a tool which does in-place conversion of Microsoft's NTFS filesystem to the open-source filesystem Btrfs, much as btrfs-convert does for ext2.
- -c <ALGO>, --compress=<ALGO>
Uses the specified algorithm to recompress files that are compressed on the NTFS volume; valid choices are zstd, lzo, zlib, or none. If you don't specify any value, zstd will be used, assuming it's been compiled in.
- -h <ALGO>, --hash=<ALGO>
Uses the specified checksumming algorithm; valid choices are crc32c, xxhash, sha256, and blake2. The first of these will be used by default, and should be fine for most purposes.
- -r, --rollback
Tries to restore the original NTFS filesystem. See Rollback below.
The original filesystem image is saved as image/ntfs.img as a reflink copy. You can restore this at any time by using the rollback option, provided that you've not moved the data by doing a balance. Bear in mind that this restores the volume to how it was when you did the conversion, meaning that any changes you've made since will be lost.
If you decide to keep the conversion, you can remove the image subvolume at any point to free up space.
Various bits of NTFS-specific data are stored as Btrfs xattrs, in a manner that the Windows btrfs driver understands (https://github.com/maharmstone/btrfs). Some should also be understood by tools such as Wine and Samba, but YMMV.
- The NTFS attribute value is stored as a hex string at user.DOSATTRIB.
- The reparse points on directories are stored at user.reparse. NTFS symlinks should be converted into POSIX symlinks. The data for other reparse points will be stored as the contents of the files.
- The NT security descriptor is stored as security.NTACL.
- Alternate data streams on files are stored in the user namespace, e.g. :Zone.Identifier becomes user.Zone.Identifier.
Written by Mark Harmstone (email@example.com).