xref: /OK3568_Linux_fs/kernel/Documentation/admin-guide/device-mapper/linear.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun=========
2*4882a593Smuzhiyundm-linear
3*4882a593Smuzhiyun=========
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunDevice-Mapper's "linear" target maps a linear range of the Device-Mapper
6*4882a593Smuzhiyundevice onto a linear range of another device.  This is the basic building
7*4882a593Smuzhiyunblock of logical volume managers.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunParameters: <dev path> <offset>
10*4882a593Smuzhiyun    <dev path>:
11*4882a593Smuzhiyun	Full pathname to the underlying block-device, or a
12*4882a593Smuzhiyun        "major:minor" device-number.
13*4882a593Smuzhiyun    <offset>:
14*4882a593Smuzhiyun	Starting sector within the device.
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunExample scripts
18*4882a593Smuzhiyun===============
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun::
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun  #!/bin/sh
23*4882a593Smuzhiyun  # Create an identity mapping for a device
24*4882a593Smuzhiyun  echo "0 `blockdev --getsz $1` linear $1 0" | dmsetup create identity
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun::
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun  #!/bin/sh
29*4882a593Smuzhiyun  # Join 2 devices together
30*4882a593Smuzhiyun  size1=`blockdev --getsz $1`
31*4882a593Smuzhiyun  size2=`blockdev --getsz $2`
32*4882a593Smuzhiyun  echo "0 $size1 linear $1 0
33*4882a593Smuzhiyun  $size1 $size2 linear $2 0" | dmsetup create joined
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun::
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun  #!/usr/bin/perl -w
38*4882a593Smuzhiyun  # Split a device into 4M chunks and then join them together in reverse order.
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun  my $name = "reverse";
41*4882a593Smuzhiyun  my $extent_size = 4 * 1024 * 2;
42*4882a593Smuzhiyun  my $dev = $ARGV[0];
43*4882a593Smuzhiyun  my $table = "";
44*4882a593Smuzhiyun  my $count = 0;
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun  if (!defined($dev)) {
47*4882a593Smuzhiyun          die("Please specify a device.\n");
48*4882a593Smuzhiyun  }
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun  my $dev_size = `blockdev --getsz $dev`;
51*4882a593Smuzhiyun  my $extents = int($dev_size / $extent_size) -
52*4882a593Smuzhiyun                (($dev_size % $extent_size) ? 1 : 0);
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun  while ($extents > 0) {
55*4882a593Smuzhiyun          my $this_start = $count * $extent_size;
56*4882a593Smuzhiyun          $extents--;
57*4882a593Smuzhiyun          $count++;
58*4882a593Smuzhiyun          my $this_offset = $extents * $extent_size;
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun          $table .= "$this_start $extent_size linear $dev $this_offset\n";
61*4882a593Smuzhiyun  }
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun  `echo \"$table\" | dmsetup create $name`;
64