2008-01-15 15:53:20

by Chris Mason

[permalink] [raw]
Subject: [ANNOUNCE] Btrfs v0.10 (online growing/shrinking, ext3 conversion, and more)


Hello everyone,

Btrfs v0.10 is now available for download from:

http://oss.oracle.com/projects/btrfs/

Btrfs is still in an early alpha state, and the disk format is not finalized.
v0.10 introduces a new disk format, and is not compatible with v0.9.

The core of this release is explicit back references for all metadata blocks,
data extents, and directory items. These are a crucial building block for
future features such as online fsck and migration between devices. The back
references are verified during deletes, and the extent back references are
checked by the existing offline fsck tool.

For all of the details of how the back references are maintained, please
see the design document:

http://oss.oracle.com/projects/btrfs/dist/documentation/btrfs-design.html

Other new features (described in detail below):

* Online resizing (including shrinking)
* In place conversion from Ext3 to Btrfs
* data=ordered support
* Mount options to disable data COW and checksumming
* Barrier support for sata and IDE drives

[ Resizing ]

In order to demonstrate and test the back references, I've added an online
resizer, which can both grow and shrink the filesystem:

mount -t btrfs /dev/xxx /mnt

# add 2GB to the FS
btrfsctl -r +2g /mnt

# shrink the FS by 4GB
btrfsctl -r -4g /mnt

# Explicitly set the FS size
btrfsctl -r 20g /mnt

# Use 'max' to grow the FS to the limit of the device
btrfsctl -r max /mnt

[ Conversion from Ext3 ]

This is an offline, in place, conversion program written by Yan Zheng. It
has been through basic testing, but should not be trusted with critical data.

To build the conversion program, run 'make convert' in the btrfs-progs
tree. It depends on libe2fs and acl development libraries.

The conversion program uses the copy on write nature of Btrfs to preserve the
original Ext3 FS, sharing the data blocks between Btrfs and Ext3 metadata.
Btrfs metadata is created inside the free space of the Ext3 filesystem, and it
is possible to either make the conversion permanent (reclaiming the space used
by Ext3) or roll back the conversion to the original Ext3 filesystem.

More details and example usage of the conversion program can be found here:

http://oss.oracle.com/projects/btrfs/dist/documentation/btrfs-converter.html

Thanks to Yan Zheng for all of his work on the converter.

[ New mount options ]

mount -o nodatacsum disables checksumming on data extents

mount -o nodatacow disables copy on write of data extents, unless a given
extent is referenced by more than one snapshot. This is targeted at database
workloads, where copy on write is not optimal for performance.

The explicit back references allow the nodatacow code to make sure copy
on write is done when multiple snapshots reference the same file, maintaining
snapshot consistency.

mount -o alloc_start=num forces allocation hints to start at least num bytes
into the disk. This was introduced to test the resizer. Example usage:

mount -o alloc_start=16g /dev/xxxx /mnt
(do something to the FS)
btrfsctl -r 12g /mnt

The btrfsctl command will resize the FS down to 12GB in size. Because
the FS was mounted with -o alloc_start=16g, any allocations done after
mounting will need to be relocated by the resizer.

It is safe to specify a number past the end of the FS, if the alloc_start is too
large, it is ignored.

mount -o nobarrier disables cache flushes during commit.

-chris


2008-01-15 17:06:12

by Kyle McMartin

[permalink] [raw]
Subject: Re: [ANNOUNCE] Btrfs v0.10 (online growing/shrinking, ext3 conversion, and more)

On Tue, Jan 15, 2008 at 10:52:38AM -0500, Chris Mason wrote:
> http://oss.oracle.com/projects/btrfs/
>
> Btrfs is still in an early alpha state, and the disk format is not finalized.
> v0.10 introduces a new disk format, and is not compatible with v0.9.
>

Looks like fun. btrfsck fails to check if it actually received a
dev argument though, so if you don't pass a device, we get a nice
segfault.

Signed-off-by: Kyle McMartin <[email protected]>

---
diff -Nur btrfs-progs-0.10/btrfsck.c btrfs-progs-0.10-kyle/btrfsck.c
--- btrfs-progs-0.10/btrfsck.c 2008-01-15 10:33:32.000000000 -0500
+++ btrfs-progs-0.10-kyle/btrfsck.c 2008-01-15 11:49:24.000000000 -0500
@@ -709,6 +709,11 @@
return err;
}

+void print_usage(void) {
+ fprintf(stderr, "usage: btrfsck dev\n");
+ exit(1);
+}
+
int main(int ac, char **av) {
struct btrfs_root *root;
struct cache_tree extent_cache;
@@ -727,6 +732,9 @@
int slot;
struct btrfs_root_item ri;

+ if (ac < 2)
+ print_usage();
+
radix_tree_init();
cache_tree_init(&extent_cache);
cache_tree_init(&seen);

2008-01-16 10:02:49

by Christian Hesse

[permalink] [raw]
Subject: Re: [Btrfs-devel] [ANNOUNCE] Btrfs v0.10 (online growing/shrinking, ext3 conversion, and more)

On Tuesday 15 January 2008, Chris Mason wrote:
> Hello everyone,
>
> Btrfs v0.10 is now available for download from:

It does not even compile for me, tested with 2.6.24-rc{7,8}. I will look at
that later.

fs/built-in.o: In function `btrfs_xattr_set_acl':
acl.c:(.text+0x68f33): undefined reference to `posix_acl_from_xattr'
acl.c:(.text+0x68f47): undefined reference to `posix_acl_valid'
make: *** [.tmp_vmlinux1] Error 1

Is this release supposed to fix the suspend problem?
--
Regards,
Chris

2008-01-16 17:47:21

by Simon Holm Thøgersen

[permalink] [raw]
Subject: Re: [Btrfs-devel] [ANNOUNCE] Btrfs v0.10 (online growing/shrinking, ext3 conversion, and more)


ons, 16 01 2008 kl. 11:02 +0100, skrev Christian Hesse:
> On Tuesday 15 January 2008, Chris Mason wrote:
> > Hello everyone,
> >
> > Btrfs v0.10 is now available for download from:
>
> It does not even compile for me, tested with 2.6.24-rc{7,8}. I will look at
> that later.
>
> fs/built-in.o: In function `btrfs_xattr_set_acl':
> acl.c:(.text+0x68f33): undefined reference to `posix_acl_from_xattr'
> acl.c:(.text+0x68f47): undefined reference to `posix_acl_valid'
> make: *** [.tmp_vmlinux1] Error 1
>
See this build fix for kernels without acl by Yan Zheng on the
btrfs-devel list

http://oss.oracle.com/pipermail/btrfs-devel/2008-January/000386.html


Simon Holm Thøgersen

2008-01-17 18:27:20

by Chris Mason

[permalink] [raw]
Subject: Re: [Btrfs-devel] [ANNOUNCE] Btrfs v0.10 (online growing/shrinking, ext3 conversion, and more)

On Tuesday 15 January 2008, Chris Mason wrote:
> Hello everyone,
>
> Btrfs v0.10 is now available for download from:
>
> http://oss.oracle.com/projects/btrfs/

Well, it turns out this release had a few small problems:

* data=ordered deadlock on older kernels (including 2.6.23)
* Compile problems when ACLs were not enabled in the kernel

So, I've put v0.11 out there. It fixes those two problems and will also
compile on older (2.6.18) enterprise kernels.

v0.11 does not have any disk format changes.

-chris

2008-01-17 19:28:48

by Daniel Phillips

[permalink] [raw]
Subject: Re: [Btrfs-devel] [ANNOUNCE] Btrfs v0.10 (online growing/shrinking, ext3 conversion, and more)

On Jan 17, 2008 1:25 PM, Chris mason <[email protected]> wrote:
> So, I've put v0.11 out there. It fixes those two problems and will also
> compile on older (2.6.18) enterprise kernels.
>
> v0.11 does not have any disk format changes.

Hi Chris,

First, massive congratulations for bringing this to fruition in such a
short time.

Now back to the regular carping: why even support older kernels?

Regards,

Daniel

2008-01-17 20:17:18

by Chris Mason

[permalink] [raw]
Subject: Re: [Btrfs-devel] [ANNOUNCE] Btrfs v0.10 (online growing/shrinking, ext3 conversion, and more)

On Thursday 17 January 2008, Daniel Phillips wrote:
> On Jan 17, 2008 1:25 PM, Chris mason <[email protected]> wrote:
> > So, I've put v0.11 out there. It fixes those two problems and will also
> > compile on older (2.6.18) enterprise kernels.
> >
> > v0.11 does not have any disk format changes.
>
> Hi Chris,
>
> First, massive congratulations for bringing this to fruition in such a
> short time.
>
> Now back to the regular carping: why even support older kernels?

The general answer is the backports are small and easy. I don't test them
heavily, and I don't go out of my way to make things work.

But, they do make it easier for people to try out, and to figure how to use
all these new features to solve problems. Small changes that enable more
testers are always welcome.

In general, the core parts of the kernel that btrfs uses haven't had many
interface changes since 2.6.18, so this isn't a huge deal.

-chris