fstransform is a tool to change a file-system from one format to
another, for example from jfs/xfs/reiser to ext2/ext3/ext4, in-place
and without the need for backup. Idea from Sergei Tzukanov (convertfs
author), but it is fully independent code.
The current version of fstransform is fully functional, and ready for
testing from the general public. It has been tested on the following
file-systems, both as source and target:
ext2, ext3, ext4, jfs, minix, reiserfs, xfs
fstransform provides a script 'fstransform.sh' that automatically
performs all the step required for the transformation.
It must be executed _as_root_,
and it searches for all the programs it needs before starting.
For 'fstransform.sh' to have a chance to succeed, you need the following:
1) a little free space, typically at least 5%,
on the original device you want to transform
2) the file-system on the original device must support sparse files
and one of the two ioctls FIEMAP or FIBMAP
3) the following programs must be available:
the two custom-made tools 'fsmove' and 'fsremap' (distributed with
fstransform) and several common Linux/Unix tools:
which, expr, id, blockdev, losetup, mount, umount,
mkdir, rmdir, rm, mkfifo, dd, sync, fsck, mkfs
Note: if the original device is almost full, the custom-made tool 'fsremap',
invoked by 'fstransform.sh', will create a relatively small backup file
("secondary storage") in your $HOME directory.
This secondary storage file will be at most as large as half your free RAM.
You can pass the option '-s <size>[k|M|G|T|P|E|Y|Z]' to the tool 'fsremap'
in order manually set the secondary storage size,
but please understand that using a too small secondary storage
can slow down the procedure.
To pass the same option to 'fstransform.sh', you must execute something like
fstransform.sh --opts-fsremap='-s <size>' <other-options-and-arguments>
Detailed instructions about how to use fstransform are in the
'README.fstransform' file included with the source code.
At the moment, fstransform requires GNU C++ and is only tested on Linux.