@@ -20,10 +20,10 @@ The target is named "raid" and it accepts the following parameters::
2020 raid0 RAID0 striping (no resilience)
2121 raid1 RAID1 mirroring
2222 raid4 RAID4 with dedicated last parity disk
23- raid5_n RAID5 with dedicated last parity disk supporting takeover
23+ raid5_n RAID5 with dedicated last parity disk supporting takeover from/to raid1
2424 Same as raid4
2525
26- - Transitory layout
26+ - Transitory layout for takeover from/to raid1
2727 raid5_la RAID5 left asymmetric
2828
2929 - rotating parity 0 with data continuation
@@ -48,8 +48,8 @@ The target is named "raid" and it accepts the following parameters::
4848 raid6_n_6 RAID6 with dedicate parity disks
4949
5050 - parity and Q-syndrome on the last 2 disks;
51- layout for takeover from/to raid4/raid5_n
52- raid6_la_6 Same as "raid_la" plus dedicated last Q-syndrome disk
51+ layout for takeover from/to raid0/ raid4/raid5_n
52+ raid6_la_6 Same as "raid_la" plus dedicated last Q-syndrome disk supporting takeover from/to raid5
5353
5454 - layout for takeover from raid5_la from/to raid6
5555 raid6_ra_6 Same as "raid5_ra" dedicated last Q-syndrome disk
@@ -173,9 +173,9 @@ The target is named "raid" and it accepts the following parameters::
173173 The delta_disks option value (-251 < N < +251) triggers
174174 device removal (negative value) or device addition (positive
175175 value) to any reshape supporting raid levels 4/5/6 and 10.
176- RAID levels 4/5/6 allow for addition of devices (metadata
177- and data device tuple), raid10_near and raid10_offset only
178- allow for device addition. raid10_far does not support any
176+ RAID levels 4/5/6 allow for addition and removal of devices
177+ (metadata and data device tuple), raid10_near and raid10_offset
178+ only allow for device addition. raid10_far does not support any
179179 reshaping at all.
180180 A minimum of devices have to be kept to enforce resilience,
181181 which is 3 devices for raid4/5 and 4 devices for raid6.
@@ -372,6 +372,72 @@ to safely enable discard support for RAID 4/5/6:
372372 'devices_handle_discards_safely'
373373
374374
375+ Takeover/Reshape Support
376+ ------------------------
377+ The target natively supports these two types of MDRAID conversions:
378+
379+ o Takeover: Converts an array from one RAID level to another
380+
381+ o Reshape: Changes the internal layout while maintaining the current RAID level
382+
383+ Each operation is only valid under specific constraints imposed by the existing array's layout and configuration.
384+
385+
386+ Takeover:
387+ linear -> raid1 with N >= 2 mirrors
388+ raid0 -> raid4 (add dedicated parity device)
389+ raid0 -> raid5 (add dedicated parity device)
390+ raid0 -> raid10 with near layout and N >= 2 mirror groups (raid0 stripes have to become first member within mirror groups)
391+ raid1 -> linear
392+ raid1 -> raid5 with 2 mirrors
393+ raid4 -> raid5 w/ rotating parity
394+ raid5 with dedicated parity device -> raid4
395+ raid5 -> raid6 (with dedicated Q-syndrome)
396+ raid6 (with dedicated Q-syndrome) -> raid5
397+ raid10 with near layout and even number of disks -> raid0 (select any in-sync device from each mirror group)
398+
399+ Reshape:
400+ linear: not possible
401+ raid0: not possible
402+ raid1: change number of mirrors
403+ raid4: add and remove stripes (minimum 3), change stripesize
404+ raid5: add and remove stripes (minimum 3, special case 2 for raid1 takeover), change rotating parity algorithms, change stripesize
405+ raid6: add and remove stripes (minimum 4), change rotating syndrome algorithms, change stripesize
406+ raid10 near: add stripes (minimum 4), change stripesize, no stripe removal possible, change to offset layout
407+ raid10 offset: add stripes, change stripesize, no stripe removal possible, change to near layout
408+ raid10 far: not possible
409+
410+ Table line examples:
411+
412+ ### raid1 -> raid5
413+ #
414+ # 2 devices limitation in raid1.
415+ # raid5 personality is able to just map 2 like raid1.
416+ # Reshape after takeover to change to full raid5 layout
417+
418+ 0 1960886272 raid raid1 3 0 region_size 2048 2 /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3
419+
420+ # dm-0 and dm-2 are e.g. 4MiB large metadata devices, dm-1 and dm-3 have to be at least 1960886272 big.
421+ #
422+ # Table line to takeover to raid5
423+
424+ 0 1960886272 raid raid5 3 0 region_size 2048 2 /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3
425+
426+ # Add required out-of-place reshape space to the beginniong of the given 2 data devices,
427+ # allocate another metadata/data device tuple with the same sizes for the parity space
428+ # and zero the first 4K of the metadata device.
429+ #
430+ # Example table of the out-of-place reshape space addition for one data device, e.g. dm-1
431+
432+ 0 8192 linear 8:0 0 1960903888 # <- must be free space segment
433+ 8192 1960886272 linear 8:0 0 2048 # previous data segment
434+
435+ # Mapping table for e.g. raid5_rs reshape causing the size of the raid device to double-fold once the reshape finishes.
436+ # Check the status output (e.g. "dmsetup status $RaidDev") for progess.
437+
438+ 0 $((2 * 1960886272)) raid raid5 7 0 region_size 2048 data_offset 8192 delta_disk 1 2 /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3
439+
440+
375441Version History
376442---------------
377443
0 commit comments