CoryXie

一垄青竹映陋室,半枝桃花衬碧窗。

  :: :: 博问 :: 闪存 :: 新随笔 :: :: 订阅 订阅 :: 管理 ::

A disk array controller has a function of relocating a plurality of data blocks stored in a disk array. The controller includes a read unit which reads data blocks to be relocated from the disk array, a determining unit which determines whether an error has occurred in the to-be-relocated data block read by the read unit, a write unit which writes the to-be-relocated data block read by the read unit in a relocating destination position on the disk array which corresponds to the to-be-relocated data block if the determining unit determines that the error has not occurred in the to-be-relocated data block, and a unit which sets error information with respect to the relocating destination position if the determining unit determines that the error has occurred in the to-be-relocated data block, the error information causing occurrence of an error in response to read access of the relocating destination position.

BACKGROUND OF THE INVENTION

1. Field of the Invention

This invention relates to a disk array controller and information processing apparatus which control a redundant disk array such as a RAID (Redundant Array of Inexpensive Disks or Redundant Array of Independent Disks).

2. Description of the Related Art

Recently, in an information processing apparatus such as a server computer and personal computer, a redundant disk array such as RAID has been utilized in order to enhance the disk access speed and protect stored data. In the RAID, some redundancy levels (which are also referred to as RAID levels), for example, RAID0, RAID1, RAID5 are defined.

Most of the RAID controllers have a rebuild function of restoring the state of a disk array in which a fault has occurred into the state set before occurrence of the fault. The rebuild function is a function of restoring the contents of data stored in a disk drive in which a fault has occurred by use of the contents of data stored in another disk drive.

A disk control apparatus having the rebuilt function is disclosed in Jpn. Pat. Appln. KOKAI Publication No. 10-40022.

Further, in the recent RAID controller, it is required to attain not only a function such as a rebuild function of taking measures to prevent occurrence of faults but also a function of changing the redundancy level (RAID level) of the disk array or expanding the storage capacity.

In order to perform the level changing process of changing the redundancy level (RAID level) of the disk array or the capacity expanding process of expanding the storage capacity of the disk array, it is necessary to relocate a data block group stored in the disk array.

However, if a media error occurs in the storage position on the disk array in which one of the data blocks to be relocated is stored, the level changing process or capacity expanding process cannot be performed. In this case, the media error represents an error which prevents data from being correctly read from the disk drive even if read tries are repeatedly made by a preset number of times.

Since the to-be-relocated data block cannot be read from the storage position in which the above error occurs, it becomes impossible to ensure the contents of data in a transfer-destination position to which the to-be-relocated data block is transferred. Therefore, in the level changing process or capacity expanding process, if occurrence of an error is detected at the time of reading the to-be-relocated data block, it is necessary to interrupt the process at this time point. If the process is not interrupted, there occurs a possibility that data of an erroneous value may be transferred from the disk array to a host when a read request is issued by the host with respect to the transfer-destination position to which the data block could not be transferred after the level changing process or capacity expanding process.

BRIEF SUMMARY OF THE INVENTION

According to an aspect of the invention, there is provided a disk array controller which controls a disk array to change a redundancy level of the disk array, comprising a read unit which reads a data block to be relocated from the disk array, a determining unit which determines whether or not an error has occurred in the to-be-relocated data block read by the read unit, a write unit which writes the to-be-relocated data block read by the read unit in a relocating destination position on the disk array corresponding to the to-be-relocated data block if the determining unit determines that the error has not occurred in the to-be-relocated data block, and an error information setting unit configured to set error information with respect to the relocating destination position if the determining unit determines that the error has occurred in the to-be-relocated data block, the error information causing occurrence of an error in response to read access of the relocating destination position.

According to another aspect of the invention, there is provided a disk array controller which controls a disk array to expand storage capacity of the disk array, comprising a read unit which reads a data block to be relocated from the disk array, a determining unit which determines whether or not an error has occurred in the to-be-relocated data block read out by the read unit, a write unit which writes the to-be-relocated data block read by the read unit in a relocating destination position on the disk array corresponding to the to-be-relocated data block if the determining unit determines that the error has not occurred in the to-be-relocated data block, and an error information setting unit configured to set error information with respect to the relocating destination position if the determining unit determines that the error has occurred in the to-be-relocated data block, the error information causing occurrence of an error in response to read access of the relocating destination position.

DETAILED DESCRIPTION OF THE INVENTION

There will now be described embodiments of this invention with reference to the accompanying drawings.

First Embodiment

In FIG. 1, the configuration of an information processing apparatus according to a first embodiment of this invention is shown. For example, the information processing apparatus is realized as a server computer. The information processing apparatus includes a host (host computer) 10 which executes an operating system and various application programs, a disk array 20 used as an external storage device of the host 10, and a disk array controller 30.

The disk array 20 is a redundant disk array and is realized by use of a plurality of disk drives (hard disk drives [HDDs]) 21mounted on the information processing apparatus. The disk array controller 30 controls the disk array 20 in response to a disk access request from the host 10. The disk array controller 30 performs the disk control operation to operate the disk array 20 as a RAID.

For example, the disk array controller 30 supports a plurality of redundancy levels (RAID levels) such as RAID0 (striping), RAID1 (mirroring) and RAID5 (distributed data guarding).

As shown in FIG. 1, the disk array controller 30 includes a control processor 31, RAM 32, nonvolatile memory 33 and disk controller 34. The control processor 31, RAM 32, nonvolatile memory 33 and disk controller 34 are connected to a bus 35.

The control processor 31 executes a program (firmware) loaded from the nonvolatile memory 33 into the RAM 32. By use of the firmware, in the control processor 31, a redundancy level changing unit 101, capacity expanding unit 102, media error detecting unit 103 and error data write unit 104 are realized as shown in FIG. 1 as function performing modules.

The redundancy level changing unit 101 performs a redundancy level changing process to change the redundancy level (RAID level) of the disk array 20. The redundancy level changing process can be performed during the operation of the information processing apparatus. In the redundancy level changing process, a process of relocating a plurality of data blocks stored in the disk array 20 is performed based on the relationship between the present redundancy level of the disk array 20 and the target redundancy level of the disk array 20. The relocation process is performed by reading each data block to be relocated from the disk array 20 and copying and supplying the same to a relocating destination position on the disk array 20 to which each data block should be relocated. By the level changing process, the RAID level of the disk array20 can be changed from RAID0 to RAID1 or from RAID0 to RAID5, for example.

The capacity expanding unit 102 performs a capacity expanding process of expanding the storage capacity of the disk array20 by use of an additional disk drive without changing the redundancy level of the disk array 20. The capacity expanding process can also be performed during the operation of the information processing apparatus. In the capacity expanding process, a process of relocating a plurality of data blocks which is already stored in the disk array 20 on an additional disk drive for each stripe unit is performed based on the present redundancy level of the disk array 20 and the number of additional disk drives. The relocation process is performed by reading each data block to be relocated from the disk array20 and copying and supplying the same to a relocating destination position on the disk array 20 to which each data block should be relocated.

The media error detecting unit 103 determines whether or not a media error has occurred at the read time of a to-be-relocated data block. The error data write unit 104 sets error information with respect to the relocating destination position (which is herein-after referred to as a transfer destination position) corresponding to the to-be-relocated data block when occurrence of a media error is detected. The error information is information (error data) which causes occurrence of a media error when read access is made with respect to the transfer destination position. More specifically, the error data write unit 104 writes data and an error-correcting code (ECC) which is not associated with the data as error data in the transfer destination position. Thus, each time the read access is made to the transfer destination position, a media error occurs. Therefore, even if read access is made by the host 10 to the transfer destination position which could not be correctly subjected to a data relocation process, erroneous data can be prevented from being transferred to the host 10.

The error data write unit 104 issues a write long command to the HDD in order to write error data. The write long command is a command which instructs the HDD to store write data containing the error-correcting code as it is. Generally, the HDD causes an ECC generator to generate an ECC based on write data and writes the write data and ECC into a position specified by the write command. Further, when the write command is received, the operation of the ECC generator of the HDD is suppressed. Thus, error data containing data and an ECC which is not associated with the data can be written.

The disk controller 34 controls each of the HDDs configuring the disk array 20 under the control of the control processor 31. The disk controller 34 controls each HDD via an Integrated Drive Electronics (IDE) or Small Computer System Interface (SCSI) interface, for example.

Next, an example of the redundancy level changing operation is explained.

FIG. 2 shows a disk array of RAID0 configured by two HDDs (HDD#0, HDD#1). A plurality of stripes S1, S2, S3 are arranged over the two HDDs (HDD#0, HDD#1).

Each stripe is configured by a stripe unit on the HDD#0 and a stripe unit on the HDD#1. Each stripe unit contains at least one data block. In FIG. 2, a case wherein the number of data blocks contained in each stripe unit is one is shown. The stripe S1 contains a data block of logical block address LBA="0" arranged on the HDD#0 and a data block of logical block address LBA="1" arranged on the HDD#1. Likewise, the stripe S2 contains a data block of logical block address LBA="2" arranged on the HDD#0 and a data block of logical block address LBA="3" arranged on the HDD#1. Further, the stripe S3contains a data block of logical block address LBA="4" arranged on the HDD#0 and a data block of logical block address LBA="5" arranged on the HDD#1.

The stripe is referred to as a stripe group and the stripe unit is referred to as a stripe in some cases.

FIG. 3 shows an example in which one HDD (HDD#2) is additionally provided on the disk array of RAID0 shown in FIG. 2and the disk array of RAID5 is configured by three HDDs (HDD#0, HDD#1, HDD#2).

The RAID level of the disk array 20 can be changed from RAID0 to RAID5 by relocating data block groups corresponding to logical block addresses LBA0 to LBA5 stored in the disk array of FIG. 2 on the three HDDs (HDD#0, HDD#1, HDD#2) as shown in FIG. 3.

In FIG. 3, a symbol P indicates information (parity) used to restore a faulty portion which has occurred. The stripe S11contains a data block of logical block address LBA="0" arranged on the HDD#0, a data block of logical block address LBA="1" arranged on the HDD#1 and a parity P arranged on the HDD#2. The parity P of the stripe S11 is generated based on the two data blocks (LBA="0", LBA="1") of the stripe S11. The stripe S12 contains a data block of logical block address LBA="2" arranged on the HDD#0, a parity P arranged on the HDD#1 and a data block of logical block address LBA="3" arranged on the HDD#2. The parity P of the stripe S12 is generated based on the two data blocks (LBA="2", LBA="3") of the stripe S12. Further, the stripe S13 contains a parity P arranged on the HDD#0, a data block of logical block address LBA="4" arranged on the HDD#1 and a data block of logical block address LBA="5" arranged on the HDD#2. The parity P of the stripe S13 is generated based on the two data blocks (LBA="4", LBA="5") of the stripe S13.

RAID0 can be configured in principle on one HDD as shown in FIG. 4. In FIG. 4, each stripe unit is configured by two data blocks whose logical block addresses are successive.

FIG. 5 shows an example in which one HDD (HDD#1) is additionally provided on the disk array of RAID0 shown in FIG. 4and the disk array of RAID1 is configured by two HDDs (HDD#0, HDD#1).

The RAID level can be changed from RAID0 to RAID1 by copying and relocating data block groups corresponding to logical block addresses LBA0 to LBA3 stored in the HDD#0 of FIG. 4 on the HDD#2 as shown in FIG. 5.

Thus, in the redundancy level changing process, the data relocation process is performed for each of the data blocks.

If a media error does not occur at the read time of the data block to be relocated, the to-be-relocated data block is written into the transfer destination position as usual. The transfer destination position is a storage position on the disk array to which a logical block address corresponding to the to-be-relocated data block is newly allocated. Further, if a media error occurs at the read time of the to-be-relocated data block, the error data is written into the transfer destination position.

FIG. 6 shows an example of the configuration of the redundancy level changing unit 101.

The redundancy level changing unit 101 includes a relocation control unit 111, data read unit 112 and data write unit 113. The relocation control unit 111 determines data block groups to be relocated and the transfer destination positions of the to-be-relocated data block groups based on the relation between the present redundancy level of the disk array 20 and the target redundancy level of the disk array 20. The data read unit 112 reads a to-be-relocated data block from the disk array20 via the disk controller 34 under the control of the relocation control unit 111. The data write unit 113 writes the to-be-relocated data block read by the data read unit 112 in the transfer destination position on the disk array 20 via the disk controller 34 under the control of the relocation control unit 111.

The media error detecting unit 103 detects occurrence of a media error by monitoring success/failure of the read operation via communication with the data read unit 112. If occurrence of a media error is detected, the media error detecting unit103 inhibits the operation of the data write unit 113 and triggers the error data write unit 104.

Next, the concrete procedure of the redundancy level (RAID level) changing process is explained with reference to the flowchart of FIG. 7. In this case, a case wherein the redundancy level is changed from RAID0 of FIG. 4 to RAID1 of FIG. 5is explained as an example.

First, the redundancy level changing unit 101 sets a value of the logical block address LBA to an initial value "0" (step S101). Then, the redundancy level changing unit 101 determines whether or not the value of the logical block address LBA exceeds a last logical block address LBA (Last LBA) allocated to the HDD#0 of FIG. 4 (step S102) and repeatedly performs the following process until the value of the logical block address LBA exceeds the last logical block address LBA.

The redundancy level changing unit 101 reads a to-be-relocated data block specified by the present logical block address LBA (LBA=0) from the HDD#0 (source side HDD) (step S103). The media error detecting unit 103 determines whether or not a media error has occurred in the read operation (step S104).

If occurrence of a media error is not detected, that is, if a to-be-relocated data block specified by the present logical block address LBA (LBA=0) can be correctly read from the HDD#0 (source side HDD) ("NO" in step S104), the redundancy level changing unit 101 writes the to-be-relocated data block read out in step S103 into a transfer destination position on the HDD#1 (target side HDD) corresponding to the to-be-relocated data block (step S105). The transfer destination position is a storage position on the HDD#1 (target side HDD) to which the logical block address LBA (LBA=0) is allocated. Thus, the data block of the source side HDD specified by the present LBA is copied in the storage position on the target side HDD specified by the above LBA.

On the other hand, if occurrence of a media error is detected, that is, if a to-be-relocated data block specified by the present logical block address LBA (LBA=0) cannot be correctly read from the HDD#0 (source side HDD) ("YES" in step S104), the redundancy level changing unit 101 writes error data by use of a write long command in a transfer destination position on the HDD#1 (target side HDD) corresponding to the to-be-relocated data block which cannot be read, that is, in a storage position on the target side HDD specified by the present LBA (LBA=0) (step S106).

Next, the redundancy level changing unit 101 returns the process to step S102 after the present logical block address LBA is increased by +1 (step S107). The RAID level of the disk array 20 is changed from RAID0 to RAID1 by repeatedly performing the process of steps S102 to S107.

In this case, all of the data blocks are dealt with as to-be-relocated data blocks in order to make a level change from RAID0 to RAID1. However, generally, it is only necessary to relocate only a target data block group which is required to be relocated in order to make a level change. That is, the redundancy level changing unit 101 determines logical block addresses of data blocks (transfer-source blocks) to be relocated and transfer destination positions (transfer destination blocks) corresponding to the logical block addresses based on the number of HDDs and RAID levels of the disk array 20before level-changing and the number of HDDs and RAID levels of the disk array 20 after level-changing which are specified by the host 10. Then, the redundancy level changing unit 101 performs the process shown by the flowchart of FIG. 8 for each transfer-source block.

That is, the redundancy level changing unit 101 first reads a transfer-source block from the disk array 20 (step S111). If a media error does not occur in the read operation ("NO" in step S112), the redundancy level changing unit 101 writes the readout transfer-source block into a transfer-destination block corresponding to the transfer-source block (step S113). On the other hand, if a media error occurs in the read operation ("YES" in step S112), the error data write unit 104 writes error data in the transfer-destination block (step S114).

The transfer-source block in which a media error has occurred in the read operation may be used as a transfer-destination block for a different to-be-relocated data block in some cases. In this case, if the different to-be-relocated data block cannot be correctly written into the transfer-destination block, error data is also written into the transfer-destination block.

Next, the operation for reading data from the disk array 20 whose RAID level is changed is explained with reference to the flowchart of FIG. 9.

When the control processor 31 receives a read request from a file system or application program executed by the host 10(step S201), it reads a data block specified by the logical block address contained in the read request from the disk array20 (step S202). The control processor 31 determines whether or not a media error has occurred in the read operation of step S202 (step S203). If a media error does not occur ("NO" in step S203), the control processor 31 transfers a data block read from the disk array 20 to the host 10 (step S204). If a media error has occurred ("YES" in step S203), the control processor 31 notifies the host 10 of occurrence of the media error (step S205). Since a media error occurs without fail when a read request is made from the host 10 with respect to a block in which error data is written, erroneous data can be prevented from being transferred to the host 10.

Next, an example of the capacity expanding operation is explained.

FIG. 10 shows a disk array of RAID0 configured by two HDDs (HDD#0, HDD#1). In FIG. 10, a case wherein the number of data blocks contained in each stripe unit is one is shown. FIG. 11 shows an example in which one HDD (HDD#2) is additionally provided to the disk array of RAID0 of FIG. 10 to configure the disk array of RAID0 by three HDDs (HDD#0, HDD#1, HDD#2). The storage capacity of the disk array can be expanded without changing the RAID level by relocating the data block groups corresponding to the logical block addresses LBA0 to LBA5 stored in the disk array of FIG. 10 into the three HDDs (HDD#0, HDD#1, HDD#2) as shown in FIG. 11 for each stripe unit.

FIG. 12 shows a disk array of RAID0 configured on one HDD (HDD#0). Each stripe unit normally contains two or more data blocks whose logical block addresses are successive.

FIG. 13 shows an example in which one HDD (HDD#1) is additionally provided in the disk array of RAID0 of FIG. 12 to configure a disk array of RAID0 by two HDDs (HDD#0, HDD#1). The data block groups stored in the disk array of FIG. 12are relocated in the two HDDs (HDD#0, HDD#1) as shown in FIG. 13 for each stripe unit. In FIG. 13, for example, one stripe S21 is configured by two stripe units 01 of FIG. 12 whose logical block addresses are successive.

Thus, in the capacity expanding process, the data block groups are relocated for each stripe unit.

If a media error does not occur at the read time of the to-be-relocated data block, the to-be-relocated data block is written into the transfer destination position as usual. The transfer destination position is a storage position on the disk array to which a logical block address corresponding to the to-be-relocated data block is newly allocated. On the other hand, if a media error has occurred at the read time of the to-be-relocated data block, the above error data is written into the transfer destination position.

FIG. 14 shows an example of the capacity expanding unit 102.

The capacity expanding unit 102 includes a relocation control unit 201, data read unit 202 and data write unit 203. The relocation control unit 201 determines to-be-relocated data block groups and transfer destination positions of the respective data block groups based on the present redundancy level of the disk array 20 and the number of additional disk drives. The data read unit 202 reads a to-be-relocated data block from the disk array 20 via the disk controller 34 under the control of the relocation control unit 201. The data write unit 203 writes the to-be-relocated data block read by the data read unit 202into the transfer destination position on the disk array 20 via the disk controller 34 under the control of the relocation control unit 201.

The media error detecting unit 103 detects occurrence of a media error by monitoring success/failure of the read operation via communication with the data read unit 202. When detecting occurrence of the media error, the media error detecting unit103 inhibits the operation of the data write unit 203 and triggers the error data write unit 104.

Next, the procedure of the capacity expanding process is explained with reference to the flowchart of FIG. 15.

The capacity expanding unit 102 determines logical block addresses of to-be-relocated data blocks (transfer-source blocks) and transfer destination positions (transfer-destination blocks) corresponding to the logical block addresses based on the present redundancy level of the disk array 20 and the number of additional disk drives. Then, the capacity expanding unit102 performs a process shown by the flowchart of FIG. 15 for each transfer-source block.

That is, the capacity expanding unit 102 first reads a transfer-source block from the disk array 20 (step S301). If no media error occurs in the read operation ("NO" in step S302), the capacity expanding unit 102 writes the read transfer-source block into a transfer-destination block corresponding to the transfer-source block (step S303). If a media error occurs in the read operation of the step S301 ("YES" in step S302), the error data write unit 104 writes error data into the transfer-destination block by use of a write long command (step S304).

Also, in the capacity expanding process, a transfer-source block in which a media error occurs in the read operation may be used as a transfer-destination block for a different to-be-relocated data block in some cases. In this case, if the different to-be-relocated data block cannot be correctly written into the transfer-destination block, error data is also written into the transfer-destination block.

The data read operation after expanding the capacity of the disk array 20 is performed according to the same procedure as that shown in FIG. 9.

As described above, in each of the redundancy level changing process and capacity expanding process of the present embodiment, if an error such as a media error occurs at the read time of the to-be-relocated data block, error data is written into a transfer-destination block corresponding to the to-be-relocated data block. As a result, even when an error such as a media error occurs during the level changing process and capacity expanding process, the level changing process and capacity expanding process can be continuously performed without interruption.

Second Embodiment

FIG. 16 is a block diagram showing the configuration of an information processing apparatus according to a second embodiment of this invention. In FIG. 16, the same portions as those of FIG. 1 are denoted by the same reference numbers.

In the second embodiment, a control processor 31 of a disk array controller 30 has an error address recording unit 105 and read control unit 106 instead of the error data write unit 104 of FIG. 1. The error address recording unit 105 stores a logical block address LBA which indicates a transfer destination position corresponding to a to-be-relocated data block as an error address into a nonvolatile memory 33 or a reserved region 210 of a disk array 20 when a media error occurs at the read time of the to-be-relocated data block. A logical block address LBA corresponding to each of the to-be-relocated data blocks before the redundancy level changing process or before the capacity expanding process is used as a logical block address LBA of the transfer destination position after the redundancy level changing process or after the capacity expanding process. Therefore, the error address recording unit 105 may store a logical block address of the to-be-relocated data block as an error address when a media error occurs at the read time of the to-be-relocated data block.

After the redundancy level changing process or after the capacity expanding process, the read control unit 106 determines whether or not a logical block address LBA contained in a read access request issued from a file system or application program executed by a host 10 is stored as an error address. If the error address is stored, the read control unit 106generates a media error.

FIG. 17 shows the relationship between the redundancy level changing unit 101, error address recording unit 105 and media error detecting unit 103. Like the first embodiment, the redundancy level changing unit 101 includes a relocation control unit111, data read unit 112 and data write unit 113. The media error detecting unit 103 detects occurrence of a media error by monitoring success/failure of the read operation via communication with the data read unit 112. When detecting occurrence of a media error, the media error detecting unit 103 inhibits the operation of the data write unit 113 and triggers the error address recording unit 105. The error address recording unit 105 stores a logical block address corresponding to a to-be-relocated data block in which occurrence of the media error is detected by the media error detecting unit 103 as an error address.

Next, the procedure of the redundancy level changing process is explained with reference to the flowchart of FIG. 18. As described above, the redundancy level changing unit 101 determines logical block addresses of to-be-relocated data blocks (transfer-source blocks) and transfer destination positions (transfer-destination blocks) corresponding to the logical block addresses based on the number of HDDs and the RAID level of the disk array 20 before level-changing, the number of HDDs and the RAID level of the disk array 20 after level-changing specified by the host 10. Then, the redundancy level changing unit 101 performs the process shown by the flowchart of FIG. 18 for each transfer-source block.

That is, the redundancy level changing unit 101 first reads a transfer-source block from the disk array 20 (step S401). If no media error occurs in the read operation ("NO" in step S402), the redundancy level changing unit 101 writes the read transfer-source block into a transfer-destination block corresponding to the transfer-source block (step S403). If a media error occurs in the read operation of the step S401 ("YES" in step S402), the error address recording unit 105 stores a logical block address LBA corresponding to the transfer-source block in which the media error has occurred as an error address (step S404).

As described above, a transfer-source block in which a media error occurs in the read operation for a certain to-be-relocated data block may be used as a transfer-destination block for a different to-be-relocated data block in some cases. In this case, if the different to-be-relocated data block cannot be correctly written into the transfer-destination block, a logical block address LBA to be newly allocated to the transfer-destination block is also stored as an error address.

FIG. 19 shows the relationship between a capacity expanding unit 102, error address recording unit 105 and media error detecting unit 103. Like the first embodiment, the capacity expanding unit 102 includes a relocation control unit 201, data read unit 202 and data write unit 203. The media error detecting unit 103 detects occurrence of a media error by monitoring success/failure of the read operation via communication with the data read unit 202. When detecting occurrence of a media error, the media error detecting unit 103 inhibits the operation of the data write unit 203 and triggers the error address recording unit 105. The error address recording unit 105 stores a logical block address corresponding to a to-be-relocated data block in which occurrence of the media error is detected by the media error detecting unit 103 as an error address.

Next, the procedure of the capacity expanding process is explained with reference to the flowchart of FIG. 20.

As described above, the capacity expanding unit 102 determines logical block addresses of to-be-relocated data blocks (transfer-source blocks) and transfer destination positions (transfer-destination blocks) corresponding to the logical block addresses based on the present redundancy level of the disk array 20 and the number of additional disk drives. Then, the capacity expanding unit 102 performs the process shown by the flowchart of FIG. 20 for each transfer-source block.

That is, the capacity expanding unit 102 first reads a transfer-source block from the disk array 20 (step S501). If no media error occurs in the read operation ("NO" in step S502), the capacity expanding unit 102 writes the read transfer-source block into a transfer-destination block corresponding to the transfer-source block (step S503). If a media error occurs in the read operation of the step S501 ("YES" in step S502), the error address recording unit 105 stores a logical block address LBA corresponding to the transfer-source block in which the media error has occurred as an error address (step S504).

As described above, in the capacity expanding process, a transfer-source block in which a media error occurs in the read operation for a certain to-be-relocated data block may be used as a transfer-destination block for a different to-be-relocated data block in some cases. In this case, if the different to-be-relocated data block cannot be correctly written into the transfer-destination block, a logical block address LBA to be newly allocated to the transfer-destination block is also stored as an error address.

Next, the data read operation after changing the RAID level of the disk array 20 or after expanding the capacity is explained with reference to the flowchart of FIG. 21.

When the control processor 31 receives a read access request transmitted from a file system or application program executed by the host 10 (step S601), it causes the read control unit 106 to determine whether or not a logical block address contained in the read access request is stored as an error address (step S602). If the logical block address contained in the read access request is not stored as the error address ("NO" in step S602), the control processor 31reads a data block specified by the logical block address contained in the read access request from the disk array 20 (step S602). If the logical block address contained in the read access request is stored as the error address ("YES" in step S602), the control processor 31 notifies the host 10 of occurrence of a media error (step S604). Since a media error always occurs when a read request is made with respect to the logical block address stored as an error address, erroneous data can be prevented from being transferred to the host 10. Therefore, in the second embodiment, it is not necessary for each of the HDDs which configure the disk array 20 to support the write long command.

In the so-called software RAID which controls the disk array 20 in a software manner, the redundancy level changing process and capacity expanding process in each of the above embodiments can be performed by use of a RAID control program executed by the host 10.

Further, in each of the above embodiments, the process performed in a case wherein a media error occurs in the to-be-relocated data block is explained, but the process is not limited to a case of occurrence of the media error. For example, when an error such as a read error which prevents the data block from being read from the to-be-relocated data block occurs, the same process can be applied.

Additional advantages and modifications will readily occur to those skilled in the art. Therefore, the invention in its broader aspects is not limited to the specific details and representative embodiments shown and described herein. Accordingly, various modifications may be made without departing from the spirit or scope of the general inventive concept as defined by the appended claims and their equivalents.

SRC=https://www.google.com.hk/patents/US20050229033

posted on 2014-08-06 23:53  CoryXie  阅读(288)  评论(0编辑  收藏  举报