• David Sterba's avatar
    btrfs: allow degenerate raid0/raid10 · b2f78e88
    David Sterba authored
    The data on raid0 and raid10 are supposed to be spread over multiple
    devices, so the minimum constraints are set to 2 and 4 respectively.
    This is an artificial limit and there's some interest to remove it.
    
    Change this to allow raid0 on one device and raid10 on two devices. This
    works as expected eg. when converting or removing devices.
    
    The only difference is when raid0 on two devices gets one device
    removed. Unpatched would silently create a single profile, while newly
    it would be raid0.
    
    The motivation is to allow to preserve the profile type as long as it
    possible for some intermediate state (device removal, conversion), or
    when there are disks of different size, with raid0 the otherwise
    unusable space of the last device will be used too. Similarly for
    raid10, though the two largest devices would need to be the same.
    
    Unpatched kernel will mount and use the degenerate profiles just fine
    but won't allow any operation that would not satisfy the stricter device
    number constraints, eg. not allowing to go from 3 to 2 devices for
    raid10 or various profile conversions.
    
    Example output:
    
      # btrfs fi us -T .
      Overall:
          Device size:                  10.00GiB
          Device allocated:              1.01GiB
          Device unallocated:            8.99GiB
          Device missing:                  0.00B
          Used:                        200.61MiB
          Free (estimated):              9.79GiB      (min: 9.79GiB)
          Free (statfs, df):             9.79GiB
          Data ratio:                       1.00
          Metadata ratio:                   1.00
          Global reserve:                3.25MiB      (used: 0.00B)
          Multiple profiles:                  no
    
    		Data      Metadata  System
      Id Path       RAID0     single    single   Unallocated
      -- ---------- --------- --------- -------- -----------
       1 /dev/sda10   1.00GiB   8.00MiB  1.00MiB     8.99GiB
      -- ---------- --------- --------- -------- -----------
         Total        1.00GiB   8.00MiB  1.00MiB     8.99GiB
         Used       200.25MiB 352.00KiB 16.00KiB
    
      # btrfs dev us .
      /dev/sda10, ID: 1
         Device size:            10.00GiB
         Device slack:              0.00B
         Data,RAID0/1:            1.00GiB
         Metadata,single:         8.00MiB
         System,single:           1.00MiB
         Unallocated:             8.99GiB
    
    Note "Data,RAID0/1", with btrfs-progs 5.13+ the number of devices per
    profile is printed.
    Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    b2f78e88
volumes.c 219 KB