Translate

Archives

Some Ext4 Filesystems Cannot Be Converted to Btrfs

Not all ext4 filesystems can be converted to a btrfs filesystem using the btrfs-convert utility.

Btrfs has some limitations. The mkfs.btrfs utility will complain if you try to create a fileystem that is less than 256Mb. Btrfs-convert used fail when a file had more than 244 hard links associated with it but that limitation is long gone.

I hit another limitation recently when I tried to convert a 477Mb ext4 filesystem to btrfs. Btrfs-convert failed with a message of:

block size is too small

For some reason this Oracle document states that you cannot convert an ext4 /boot filesytem to btrfs because it is bootable. Maybe on an MBR-labeled disk but this should not apply to a GPT-labeled disk.

A look at the source code for the btrfs-convert utility revealed the real culpit:

ret = open_ext2fs(devname, &ext2_fs);
	if (ret) {
		fprintf(stderr, "unable to open the Ext2fsn");
		goto fail;
	}
	blocksize = ext2_fs->blocksize;
	total_bytes = (u64)ext2_fs->super->s_blocks_count * blocksize;
	if (blocksize < 4096) {
		fprintf(stderr, "block size is too smalln");
		goto fail;
	}


It seems the target filesystem blocksize has to be 4K or larger.

This (excellent) article on kernel.org explains how btrfs-convert does the conversion. Quite a complex operation!

By the way, the utility preserves an image of the original file system in a snapshot named ext2_saved. This snapshot allows you to roll back the conversion, even if you have made changes to the btrfs filesystem.

Note, on Fedora, btrfs-convert is part of the optional btrfs-progs package.

Comments are closed.