xref: /openbmc/linux/Documentation/admin-guide/device-mapper/striped.rst (revision 0898782247ae533d1f4e47a06bc5d4870931b284)
1*6cf2a73cSMauro Carvalho Chehab=========
2*6cf2a73cSMauro Carvalho Chehabdm-stripe
3*6cf2a73cSMauro Carvalho Chehab=========
4*6cf2a73cSMauro Carvalho Chehab
5*6cf2a73cSMauro Carvalho ChehabDevice-Mapper's "striped" target is used to create a striped (i.e. RAID-0)
6*6cf2a73cSMauro Carvalho Chehabdevice across one or more underlying devices. Data is written in "chunks",
7*6cf2a73cSMauro Carvalho Chehabwith consecutive chunks rotating among the underlying devices. This can
8*6cf2a73cSMauro Carvalho Chehabpotentially provide improved I/O throughput by utilizing several physical
9*6cf2a73cSMauro Carvalho Chehabdevices in parallel.
10*6cf2a73cSMauro Carvalho Chehab
11*6cf2a73cSMauro Carvalho ChehabParameters: <num devs> <chunk size> [<dev path> <offset>]+
12*6cf2a73cSMauro Carvalho Chehab    <num devs>:
13*6cf2a73cSMauro Carvalho Chehab	Number of underlying devices.
14*6cf2a73cSMauro Carvalho Chehab    <chunk size>:
15*6cf2a73cSMauro Carvalho Chehab	Size of each chunk of data. Must be at least as
16*6cf2a73cSMauro Carvalho Chehab        large as the system's PAGE_SIZE.
17*6cf2a73cSMauro Carvalho Chehab    <dev path>:
18*6cf2a73cSMauro Carvalho Chehab	Full pathname to the underlying block-device, or a
19*6cf2a73cSMauro Carvalho Chehab	"major:minor" device-number.
20*6cf2a73cSMauro Carvalho Chehab    <offset>:
21*6cf2a73cSMauro Carvalho Chehab	Starting sector within the device.
22*6cf2a73cSMauro Carvalho Chehab
23*6cf2a73cSMauro Carvalho ChehabOne or more underlying devices can be specified. The striped device size must
24*6cf2a73cSMauro Carvalho Chehabbe a multiple of the chunk size multiplied by the number of underlying devices.
25*6cf2a73cSMauro Carvalho Chehab
26*6cf2a73cSMauro Carvalho Chehab
27*6cf2a73cSMauro Carvalho ChehabExample scripts
28*6cf2a73cSMauro Carvalho Chehab===============
29*6cf2a73cSMauro Carvalho Chehab
30*6cf2a73cSMauro Carvalho Chehab::
31*6cf2a73cSMauro Carvalho Chehab
32*6cf2a73cSMauro Carvalho Chehab  #!/usr/bin/perl -w
33*6cf2a73cSMauro Carvalho Chehab  # Create a striped device across any number of underlying devices. The device
34*6cf2a73cSMauro Carvalho Chehab  # will be called "stripe_dev" and have a chunk-size of 128k.
35*6cf2a73cSMauro Carvalho Chehab
36*6cf2a73cSMauro Carvalho Chehab  my $chunk_size = 128 * 2;
37*6cf2a73cSMauro Carvalho Chehab  my $dev_name = "stripe_dev";
38*6cf2a73cSMauro Carvalho Chehab  my $num_devs = @ARGV;
39*6cf2a73cSMauro Carvalho Chehab  my @devs = @ARGV;
40*6cf2a73cSMauro Carvalho Chehab  my ($min_dev_size, $stripe_dev_size, $i);
41*6cf2a73cSMauro Carvalho Chehab
42*6cf2a73cSMauro Carvalho Chehab  if (!$num_devs) {
43*6cf2a73cSMauro Carvalho Chehab          die("Specify at least one device\n");
44*6cf2a73cSMauro Carvalho Chehab  }
45*6cf2a73cSMauro Carvalho Chehab
46*6cf2a73cSMauro Carvalho Chehab  $min_dev_size = `blockdev --getsz $devs[0]`;
47*6cf2a73cSMauro Carvalho Chehab  for ($i = 1; $i < $num_devs; $i++) {
48*6cf2a73cSMauro Carvalho Chehab          my $this_size = `blockdev --getsz $devs[$i]`;
49*6cf2a73cSMauro Carvalho Chehab          $min_dev_size = ($min_dev_size < $this_size) ?
50*6cf2a73cSMauro Carvalho Chehab                          $min_dev_size : $this_size;
51*6cf2a73cSMauro Carvalho Chehab  }
52*6cf2a73cSMauro Carvalho Chehab
53*6cf2a73cSMauro Carvalho Chehab  $stripe_dev_size = $min_dev_size * $num_devs;
54*6cf2a73cSMauro Carvalho Chehab  $stripe_dev_size -= $stripe_dev_size % ($chunk_size * $num_devs);
55*6cf2a73cSMauro Carvalho Chehab
56*6cf2a73cSMauro Carvalho Chehab  $table = "0 $stripe_dev_size striped $num_devs $chunk_size";
57*6cf2a73cSMauro Carvalho Chehab  for ($i = 0; $i < $num_devs; $i++) {
58*6cf2a73cSMauro Carvalho Chehab          $table .= " $devs[$i] 0";
59*6cf2a73cSMauro Carvalho Chehab  }
60*6cf2a73cSMauro Carvalho Chehab
61*6cf2a73cSMauro Carvalho Chehab  `echo $table | dmsetup create $dev_name`;
62