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