On 04/04/2020 12:32, Goffredo Baroncelli wrote:
>
> Hi all,
>
> the aim of this patch set is to issue a warning when a mixed profiles
> filesystem is detected. This happens when the filesystems contains
> (i.e.) raid1c3 and single chunk for data.
>
> BTRFS has the capability to support a filesystem with mixed profiles.
> However this could lead to an unexpected behavior when a new chunk is
> allocated (i.e. the chunk profile is not what is wanted). Moreover
> if the user is not aware of this, he could assume a redundancy which
> doesn't exist (for example because there is some 'single' chunk when
> it is expected the filesystem to be full raid1).
> A possible cause of a mixed profiles filesystem is an interrupted
> balance operation or a not fully balance due to very specific filter.
>
> The check is added to the following btrfs commands:
> - btrfs balance pause
> - btrfs balance cancel
> - btrfs device add
> - btrfs device del
>
> The warning is shorter than the before one. Below an example and
> it is printed after the normal output of the command.
>
> WARNING: Multiple profiles detected. See 'man btrfs(5)'.
> WARNING: data -> [raid1c3, single], metadata -> [raid1, single]
>
> The command "btrfs fi us" doesn't show the warning above, instead
> it was added a further line in the "Overall" section. The output now
> is this:
>
> $ sudo ./btrfs fi us /tmp/t/
> [sudo] password for ghigo:
> Overall:
> Device size: 30.00GiB
> Device allocated: 4.78GiB
> Device unallocated: 25.22GiB
> Device missing: 0.00B
> Used: 1.95GiB
> Free (estimated): 13.87GiB (min: 9.67GiB)
> Data ratio: 2.00
> Metadata ratio: 1.50
> Global reserve: 3.25MiB (used: 0.00B)
> Multiple profile: YES
>
> Data,single: Size:1.00GiB, Used:974.04MiB (95.12%)
> /dev/loop0 1.00GiB
>
> Data,RAID1C3: Size:1.00GiB, Used:178.59MiB (17.44%)
> /dev/loop0 1.00GiB
> /dev/loop1 1.00GiB
> /dev/loop2 1.00GiB
>
> Metadata,single: Size:256.00MiB, Used:76.22MiB (29.77%)
> /dev/loop1 256.00MiB
>
> Metadata,RAID1: Size:256.00MiB, Used:206.92MiB (80.83%)
> /dev/loop1 256.00MiB
> /dev/loop2 256.00MiB
>
> System,single: Size:32.00MiB, Used:16.00KiB (0.05%)
> /dev/loop2 32.00MiB
>
> Unallocated:
> /dev/loop0 8.00GiB
> /dev/loop1 8.50GiB
> /dev/loop2 8.72GiB
>
>
> In this case there are two kind of chunks for data (raid1c3 and single)
> and metadata (raid1, single).
>
> As the previous patch set, the warning is added also to the command
> 'btrfs fi df' and 'btrfs dev us' as separate patch. If even in this
> review nobody likes it, we can simply drop this patch.
>
> Suggestion about which commands should (not) have this check are
> welcome.
>
> v1
> - first issue
> v2
> - add some needed missing pieces about raid1c[34]
> - add the check to more btrfs commands
> v3
> - add a section in btrfs(5) 'FILESYSTEM WITH MULTIPLE PROFILES'
> - 'btrfs fi us': changed the worning in a info in the 'overall' section
>
> Patch #1 contains the code for the check.
> Patch #3 adds the check to the command 'btrfs dev {add,del}' and 'btrfs
> bal {pause, stop}'
> Patch #3 adds the check to the command 'btrfs fi us'
> Patch #5 add the check to the command 'btrfs fi df' and 'btrfs dev us'
> Patch #5 add the info in btrfs(5) man page
Btw with this patchset applied fstests choke on some tests (e.g.
btrfs/003) in my setup:
btrfs/003 - output mismatch (see
/home/johannes/src/xfstests-dev/results//btrfs/003.out.bad)
--- tests/btrfs/003.out 2020-01-02 08:43:50.000000000 +0000
+++ /home/johannes/src/xfstests-dev/results//btrfs/003.out.bad
2020-04-30 13:20:43.050569551 +0000
@@ -1,2 +1,4 @@
QA output created by 003
+WARNING: Multiple profiles detected. See 'man btrfs(5)'.
+WARNING:
Silence is golden
...
(Run 'diff -u /home/johannes/src/xfstests-dev/tests/btrfs/003.out
/home/johannes/src/xfstests-dev/results//btrfs/003.out.bad' to see the
entire diff)