Hello,

I've been a btrfs user for quite a number of years now, but it seems I need the wiseness of the btrfs gurus on this one!

I have a 5-hdd btrfs raid1 setup with 4x3T+1x10T drives.
A few days ago, I replaced one of the 3T by a new 10T, running btrfs replace and then resizing the FS to use all the available space of the new device.

The filesystem was 90% full before I expanded it so, as expected, most of the space on the new device wasn't actually allocatable in raid1, as very few available space was available on the 4 other devs.

Of course the solution is to run a balance, but as the filesystem is now quite big, I'd like to avoid running a full rebalance. This would be quite i/o intensive, would be running for several days, and putting and unecessary stress on the drives. This also seems excessive as in theory only some Tb would need to be moved: if I'm correct, only one of two block groups of a sufficient amount of chunks to be moved to the new device so that the sum of the amount of available space on the 4 preexisting devices would at least equal the available space on the new device, ~7Tb instead of moving ~22T. I don't need to have a perfectly balanced FS, I just want all the space to be allocatable.

I tried using the -ddevid option but it only instructs btrfs to work on the block groups allocated on said device, as it happens, it tends to move data between the 4 preexisting devices and doesn't fix my problem. A full balance with -dlimit=100 did no better.

Is there a way to ask the block group allocator to prefer writing to a specific device during a balance? Something like -ddestdevid=N? This would just be a hint to the allocator and the usual constraints would always apply (and prevail over the hint when needed).

Or is there any obvious solution I'm completely missing?

Thanks,

Stéphane.





Reply via email to