On 2016-11-29 12:20, Florian Lindner wrote:
Hello,

I have 4 harddisks with 3TB capacity each. They are all used in a btrfs RAID 5. 
It has come to my attention, that there
seem to be major flaws in btrfs' raid 5 implementation. Because of that, I want 
to convert the the raid 5 to a raid 10
and I have several questions.

* Is that possible as an online conversion?
Yes, as long as you have a complete array to begin with (converting from a degraded raid5/6 array has the same issues as rebuilding a degraded raid5/6 array).

* Since my effective capacity will shrink during conversions, does btrfs check 
if there is enough free capacity to
convert? As you see below, right now it's probably too full, but I'm going to 
delete some stuff.
No, you'll have to do the math yourself. This would be a great project idea to place on the wiki though.

* I understand the command to convert is

btrfs balance start -dconvert=raid10 -mconvert=raid10 /mnt

Correct?
Yes, but I would personally convert first metadata then data. The raid10 profile gets better performance than raid5, so converting the metadata first (by issuing a balance just covering the metadata) should speed up the data conversion a bit).

* What disks are allowed to fail? My understanding of a raid 10 is like that

disks = {a, b, c, d}

raid0( raid1(a, b), raid1(c, d) )

This way (a XOR b) AND (c XOR d) are allowed to fail without the raid to fail 
(either a or b and c or d are allowed to fail)

How is that with a btrfs raid 10?
A BTRFS raid10 can only sustain one disk failure. Ideally, it would work like you show, but in practice it doesn't.

* Any other advice? ;-)
You'll actually get significantly better performance with no loss of data safety by running BTRFS in raid1 mode on top of two RAID0 volumes (LVM/MD/hardware doesn't matter much). I do this myself and see roughly 10-20% improved performance on average with my workloads.

If you do decide to do this, it's theoretically possible to do so online, but it's kind of tricky, so I won't post any instructions for that here unless someone asks for them.

Thanks a lot,

Florian


Some information of my filesystem:

# btrfs filesystem show /
Label: 'data'  uuid: 57e5b9e9-01ae-4f9e-8a3d-9f42204d7005
        Total devices 4 FS bytes used 7.57TiB
        devid    1 size 2.72TiB used 2.72TiB path /dev/sda4
        devid    2 size 2.72TiB used 2.72TiB path /dev/sdb4
        devid    3 size 2.72TiB used 2.72TiB path /dev/sdc4
        devid    4 size 2.72TiB used 2.72TiB path /dev/sdd4

# btrfs filesystem df /
Data, RAID5: total=8.14TiB, used=7.56TiB
System, RAID5: total=96.00MiB, used=592.00KiB
Metadata, RAID5: total=12.84GiB, used=11.06GiB
GlobalReserve, single: total=512.00MiB, used=0.00B
Based on this output, you will need to delete some data before you can convert to raid10. With 4 2.72TiB drives, you're looking at roughly 5.44TiB of usable space, so you're probably going to have to delete at least 2-3TiB of data from this filesystem before converting.

If you're not already using transparent compression, it could probably help some with this, but it likely won't save you more than a few hundred GB unless you are storing lots of data that compresses very well.

# df -h
Filesystem      Size  Used Avail Use% Mounted on

/dev/sda4        11T  7.6T  597G  93% /

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to