Patent ID: 7447837
Filing Date: 2008-11-04
Classification: G06F,Y10S

Abstract:
1. A control device for a RAID (Redundant Array of Independent Disks) device that stores data in a RAID space composed of one or more stripes, each of said one or more stripes being composed of segments of a predetermined number, each of the segments having a fixed size and being obtained by dividing storage area of each of disks to create the RAID space, the control device comprising: an allocating unit creating a stripe composed of segments of the predetermined number by selecting one arbitrary segment from each of disks and allocating each of the selected segment to the stripe to be created, the number of disks is equal to the predetermined number; and a storing unit storing allocating condition information, the allocating condition information including a correspondence between each of existing stripes which have created by use of existing disks and each of segment allocated to each of the existing stripes, wherein the allocating unit performs processing including: judging, when one or more disks having segments of at least the predetermined number are added, whether or not a new stripe can be created without changing allocation of segments to the existing stripes; changing, when it is judged that creating the new stripe without changing the current allocation is impossible, the allocation of segments to the existing stripes by use of said one or more disks to be added without changing the predetermined number of segments of each of the existing stripes; obtaining one unallocated segment from each of disks of the predetermined number, each of which is arbitrarily chosen from the existing disks and said one or more disks to be added; creating a new stripe to which each of the obtained unallocated segment is allocated; and updating the allocation condition information stored in the storing unit based on the change of the allocation of segments to the existing stripes and creating the new stripe, wherein the allocating unit comprises: a judging unit judging, upon addition of one or more disks having segments of at least the predetermined number, whether or not a conditional expression, A(s−1)≦B, is satisfied, A representing the number of unallocated segments, B representing the sum of the number of unallocated segments in the other disks that the disk with the largest number of unallocated segments is excluded, s representing the predetermined number of segments; a specifying unit specifying, when the conditional expression is not satisfied, a disk (X) with the largest number of unallocated segments and a disks (Y) with the smallest number of unallocated segments, and then selecting, as a specified segment, a segment that is not a segment in the disk (X) from segments included in an existing stripe including a segment in the disk (Y); and an updating unit allocating, to the stripe including the specified segment, which has been specified by the specifying unit, an arbitrary unallocated segment in the disk (X) as a substitute segment instead of the specified segment, and has the storing unit reflect this change in allocation.