1 ========= 1 ========= 2 dm-stripe 2 dm-stripe 3 ========= 3 ========= 4 4 5 Device-Mapper's "striped" target is used to cr 5 Device-Mapper's "striped" target is used to create a striped (i.e. RAID-0) 6 device across one or more underlying devices. 6 device across one or more underlying devices. Data is written in "chunks", 7 with consecutive chunks rotating among the und 7 with consecutive chunks rotating among the underlying devices. This can 8 potentially provide improved I/O throughput by 8 potentially provide improved I/O throughput by utilizing several physical 9 devices in parallel. 9 devices in parallel. 10 10 11 Parameters: <num devs> <chunk size> [<dev path 11 Parameters: <num devs> <chunk size> [<dev path> <offset>]+ 12 <num devs>: 12 <num devs>: 13 Number of underlying devices. 13 Number of underlying devices. 14 <chunk size>: 14 <chunk size>: 15 Size of each chunk of data. Must be at 15 Size of each chunk of data. Must be at least as 16 large as the system's PAGE_SIZE. 16 large as the system's PAGE_SIZE. 17 <dev path>: 17 <dev path>: 18 Full pathname to the underlying block- 18 Full pathname to the underlying block-device, or a 19 "major:minor" device-number. 19 "major:minor" device-number. 20 <offset>: 20 <offset>: 21 Starting sector within the device. 21 Starting sector within the device. 22 22 23 One or more underlying devices can be specifie 23 One or more underlying devices can be specified. The striped device size must 24 be a multiple of the chunk size multiplied by 24 be a multiple of the chunk size multiplied by the number of underlying devices. 25 25 26 26 27 Example scripts 27 Example scripts 28 =============== 28 =============== 29 29 30 :: 30 :: 31 31 32 #!/usr/bin/perl -w 32 #!/usr/bin/perl -w 33 # Create a striped device across any number 33 # Create a striped device across any number of underlying devices. The device 34 # will be called "stripe_dev" and have a chu 34 # will be called "stripe_dev" and have a chunk-size of 128k. 35 35 36 my $chunk_size = 128 * 2; 36 my $chunk_size = 128 * 2; 37 my $dev_name = "stripe_dev"; 37 my $dev_name = "stripe_dev"; 38 my $num_devs = @ARGV; 38 my $num_devs = @ARGV; 39 my @devs = @ARGV; 39 my @devs = @ARGV; 40 my ($min_dev_size, $stripe_dev_size, $i); 40 my ($min_dev_size, $stripe_dev_size, $i); 41 41 42 if (!$num_devs) { 42 if (!$num_devs) { 43 die("Specify at least one device\n") 43 die("Specify at least one device\n"); 44 } 44 } 45 45 46 $min_dev_size = `blockdev --getsz $devs[0]`; 46 $min_dev_size = `blockdev --getsz $devs[0]`; 47 for ($i = 1; $i < $num_devs; $i++) { 47 for ($i = 1; $i < $num_devs; $i++) { 48 my $this_size = `blockdev --getsz $d 48 my $this_size = `blockdev --getsz $devs[$i]`; 49 $min_dev_size = ($min_dev_size < $th 49 $min_dev_size = ($min_dev_size < $this_size) ? 50 $min_dev_size : $thi 50 $min_dev_size : $this_size; 51 } 51 } 52 52 53 $stripe_dev_size = $min_dev_size * $num_devs 53 $stripe_dev_size = $min_dev_size * $num_devs; 54 $stripe_dev_size -= $stripe_dev_size % ($chu 54 $stripe_dev_size -= $stripe_dev_size % ($chunk_size * $num_devs); 55 55 56 $table = "0 $stripe_dev_size striped $num_de 56 $table = "0 $stripe_dev_size striped $num_devs $chunk_size"; 57 for ($i = 0; $i < $num_devs; $i++) { 57 for ($i = 0; $i < $num_devs; $i++) { 58 $table .= " $devs[$i] 0"; 58 $table .= " $devs[$i] 0"; 59 } 59 } 60 60 61 `echo $table | dmsetup create $dev_name`; 61 `echo $table | dmsetup create $dev_name`;
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.