| ========= |
| dm-linear |
| ========= |
| |
| Device-Mapper's "linear" target maps a linear range of the Device-Mapper |
| device onto a linear range of another device. This is the basic building |
| block of logical volume managers. |
| |
| Parameters: <dev path> <offset> |
| <dev path>: |
| Full pathname to the underlying block-device, or a |
| "major:minor" device-number. |
| <offset>: |
| Starting sector within the device. |
| |
| |
| Example scripts |
| =============== |
| |
| :: |
| |
| #!/bin/sh |
| # Create an identity mapping for a device |
| echo "0 `blockdev --getsz $1` linear $1 0" | dmsetup create identity |
| |
| :: |
| |
| #!/bin/sh |
| # Join 2 devices together |
| size1=`blockdev --getsz $1` |
| size2=`blockdev --getsz $2` |
| echo "0 $size1 linear $1 0 |
| $size1 $size2 linear $2 0" | dmsetup create joined |
| |
| :: |
| |
| #!/usr/bin/perl -w |
| # Split a device into 4M chunks and then join them together in reverse order. |
| |
| my $name = "reverse"; |
| my $extent_size = 4 * 1024 * 2; |
| my $dev = $ARGV[0]; |
| my $table = ""; |
| my $count = 0; |
| |
| if (!defined($dev)) { |
| die("Please specify a device.\n"); |
| } |
| |
| my $dev_size = `blockdev --getsz $dev`; |
| my $extents = int($dev_size / $extent_size) - |
| (($dev_size % $extent_size) ? 1 : 0); |
| |
| while ($extents > 0) { |
| my $this_start = $count * $extent_size; |
| $extents--; |
| $count++; |
| my $this_offset = $extents * $extent_size; |
| |
| $table .= "$this_start $extent_size linear $dev $this_offset\n"; |
| } |
| |
| `echo \"$table\" | dmsetup create $name`; |