Disk array capacity expansion method and apparatus, storage system, and product

By marking unexpanded data chunking and using full-chunk data writing method, the data migration problem during disk array expansion is solved, and the performance of the storage system is improved.

WO2025102603A1PCT designated stage expired Publication Date: 2025-05-22INSPUR SUZHOU INTELLIGENT TECH CO LTD

Patent Information

Application Number
PCT/CN2024/088436
Authority / Receiving Office
WO · WO
Patent Type
Applications
Current Assignee / Owner
Priority Date
2023-11-14
Filing Date
2024-04-17
Publication Date
2025-05-22

AI Technical Summary

Technical Problem

A large amount of data migration occurs during disk array expansion, resulting in severe degradation in the performance of the storage system in handling foreground host service IO.

Method used

By marking unexpanded data chunking, the disk storage space is eliminated and written in the form of full block data is used to reduce data migration and hard disk access.

Benefits of technology

Reduces the system bandwidth usage and improves the performance of the storage system in handling IO requests during capacity expansion.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN2024088436_22052025_PF_FP_ABST
    Figure CN2024088436_22052025_PF_FP_ABST
Patent Text Reader

Abstract

The present application relates to the technical field of data storage, and discloses a disk array capacity expansion method and apparatus, a storage system, and a product. The method comprises: according to an array chunk size, dividing a newly added hard disk space into a plurality of newly added data chunks, and adding the plurality of newly added data chunks to a disk array; marking all the newly added data chunks as unexpanded data chunks, and keeping the spatial distribution of original data chunks and parity chunks in the disk array unchanged; when data is to be written into an unexpanded data chunk for the first time, generating full-sized chunk data on the basis of data to be written and writing the full-sized chunk data into the unexpanded data chunk, and updating parity data of a stripe to which the data chunks belongs; and after the full-sized chunk data is written into the unexpanded data chunk for the first time, marking the data chunk as an expanded data chunk. The method can avoid a large amount of data migration during disk expansion, speed up a capacity expansion process, and improve the IO request processing performance of a storage system during capacity expansion.
Need to check novelty before this filing date? Find Prior Art

Description

A disk array expansion method, device, storage system and product

[0001] CROSS-REFERENCE TO RELATED APPLICATIONS

[0002] This application claims priority to a Chinese patent application filed with the Patent Office of China on November 14, 2023, with application number 202311515609.8, entitled “A method, device, storage system and product for expanding a disk array,” the entire contents of which are incorporated herein by reference. Technical Field

[0003] The present application relates to the field of data storage technology, and in particular to a disk array expansion method, device, storage system and product. Background Art

[0004] RAID (Redundant Array of Independent Disks) is a virtualization technology that combines multiple independent physical disks into a virtual disk group in various ways. This addresses the shortcomings of individual disks, such as small capacity, low performance, and poor reliability. RAID uses striping technology to split host-requested data into multiple sub-IOs (Input / Output read and write requests) based on a specific topology and distributes them to different disks. When accessing data, all related disks in the array work together, significantly improving data access speed and disk space utilization.

[0005] When using storage devices, users need to create volumes on the RAID array as block devices and provide them to front-end hosts for read and write operations. When the volume's storage space is insufficient and cannot store more data, the volume needs to be expanded. If the RAID array where the expanded volume resides has free space, the available space can be directly allocated from the RAID array for expansion. However, if the RAID array has no free space, it is necessary to first expand the RAID array by adding hard drives, and then expand the volume.

[0006] When expanding a disk array, the array reallocates storage space based on the number of hard drives. This process causes the positions of data blocks and parity blocks within the disk array to shift, necessitating data migration. This involves reading data from the original data blocks into memory and then writing it from memory to the new data blocks. Extensive data migration operations can significantly consume system bandwidth, reducing the storage system's ability to process I / O (read and write) requests from front-end hosts, and impacting the smooth operation of user services.

[0007] Summary of the Invention

[0008] In view of this, the present application aims to propose a disk array expansion method, device, storage system and product to solve the problem that a large amount of data migration occurs during disk array expansion, resulting in a serious reduction in the performance of the storage system in processing the foreground host business IO.

[0009] To achieve the above objectives, the technical solutions of this application are as follows:

[0010] Some embodiments of the present application provide a method for expanding a disk array, the method comprising:

[0011] Divide the newly added hard disk space into multiple new data blocks according to the array block size, and add the multiple new data blocks to the disk array; the array block size is the data block size specified when the disk array is created;

[0012] Mark all newly added data blocks as not expanded, and keep the spatial distribution of the original data blocks and check blocks in the disk array unchanged;

[0013] When writing data to a non-expanded data block for the first time, full block data is generated based on the data to be written and written to the non-expanded data block, and the checksum data of the stripe to which the data block belongs is updated; the space occupied by the full block data is consistent with the array block size;

[0014] When the unexpanded data block is filled with data for the first time, the data block is marked as completed.

[0015] In some embodiments, the method for expanding the capacity of a disk array further includes:

[0016] Initialize the expansion bitmap based on the newly added data blocks in the disk array; the expansion bitmap is used to record whether the disk array has completed expansion;

[0017] When the unexpanded data block is first written with full block data, the expansion bitmap is updated according to the position of the data block in the disk array.

[0018] In some embodiments, adding a plurality of new data blocks to a disk array includes:

[0019] Taking the hard disk as the unit, each new data block is added to the end of each stripe in the disk array, so that each stripe contains a data block from each hard disk.

[0020] In some embodiments, generating full block data based on the data to be written includes:

[0021] Get the space size occupied by the data to be written and the array block size; use all-zero data to fill the data to be written to generate full block data.

[0022] In some embodiments, generating full block data based on the data to be written includes:

[0023] According to the array block size, a new all-zero memory area is created in the disk array memory and all-zero data is stored;

[0024] According to the array block size, all-zero data is taken from the all-zero memory area to supplement the data to be written, so that the space occupied by the data to be written is consistent with the array block size.

[0025] In some embodiments, generating full block data based on the data to be written further includes:

[0026] When the size of the data to be written is equal to the array block size, the data to be written is regarded as full block data;

[0027] When the space occupied by the data to be written is larger than the array block size, the data to be written is split according to the array block size;

[0028] Generate a full block of data for each part of the split data and write it into different unexpanded data blocks.

[0029] In some embodiments, initializing the expansion bitmap according to the newly added data blocks in the disk array includes:

[0030] Create an expansion bitmap and record the stripe number and stripe identifier according to the newly added data block. The stripe number and stripe identifier have a one-to-one correspondence. The stripe number indicates the position of the stripe, and the stripe identifier is composed of the block identifier. The block identifier includes the unexpanded state and the completed expansion state, which is used to indicate whether the newly added data block in the stripe has been expanded.

[0031] When initializing the expansion bitmap, all block flags are set to the non-expanded state.

[0032] In some embodiments, updating the expansion bitmap according to the location of the data block in the disk array includes:

[0033] Get the stripe number of the stripe where the data block is located;

[0034] Determine the location of data blocks in the stripe;

[0035] The corresponding stripe identifier is determined from the expansion bitmap according to the stripe number, and the corresponding position character is set to the expansion completion state according to the position of the data block in the stripe.

[0036] In some embodiments, the method for expanding the capacity of a disk array further includes:

[0037] When receiving a write data request, determine whether the area of ​​the write data request operation is a newly added data block;

[0038] If the area of ​​the write data request operation is not a newly added data block, the data will be written directly to the area;

[0039] If the area of ​​the write data request operation is a newly added data block, the expansion bitmap is queried to determine whether the data block has been expanded; if the data block has been expanded, the data is directly written to the area.

[0040] In some embodiments, the method for expanding the capacity of a disk array further includes:

[0041] When receiving a read data request, determining whether the area of ​​the read data request operation is a newly added data block;

[0042] If the area of ​​the read data request operation is not a newly added data block, the data in the area is read directly;

[0043] If the area of ​​the read data request operation is a newly added data block, the expansion bitmap is queried to determine whether the data block has been expanded; if the data block has been expanded, the data of the data block is directly read; if the data block has not been expanded, the data block is not read and all-zero data is directly returned.

[0044] In some embodiments, the initialized expansion bitmap is stored in a non-volatile memory;

[0045] When all block identifiers in the expansion bitmap are in the expansion completion state, the expansion bitmap is deleted and the memory is released.

[0046] In some embodiments, the disk array is a disk array with parity blocks.

[0047] According to some embodiments of the present application, a disk array expansion device is provided to implement the method of the embodiments of the present application, the device comprising:

[0048] The adding module is configured to divide the newly added hard disk space into a plurality of newly added data blocks according to the array block size, and add the plurality of newly added data blocks to the disk array; the array block size is the data block size specified when the disk array is created;

[0049] The recording module is configured to mark all newly added data blocks as not expanded, and keep the spatial distribution of the original data blocks and check blocks in the disk array unchanged;

[0050] The data access module is configured to, when writing data to a non-expanded data block for the first time, generate full block data based on the data to be written and write the data to the non-expanded data block, and calculate and update the parity data of the stripe to which the data block belongs based on the full block data; the space occupied by the full block data is consistent with the size of the array block;

[0051] The recording module is further configured to mark the data block as completed with expansion when the unexpanded data block is first written with full block data.

[0052] According to some embodiments of the present application, a storage system is provided, the system comprising:

[0053] The upper layer unit is used to receive access requests or expansion instructions from the host and send them to the array management module; access requests include read data requests and write data requests;

[0054] An array management unit is configured to manage the disk array, including: controlling the hard disk and drive unit to access data to the disk array according to an access request; and executing the method of the first aspect of the embodiment of the present application to expand the disk array according to an expansion instruction;

[0055] The hard disk and drive unit includes a disk array composed of multiple hard disks, and is used to execute data access to the disk array according to access requests.

[0056] According to some embodiments of the present application, a computer non-volatile readable storage medium is provided, on which a computer program is stored. When the computer program is executed by a processor, the steps in the method of the embodiment of the present application are implemented.

[0057] According to some embodiments of the present application, an electronic device is provided, comprising a memory, a processor, and a computer program stored in the memory and executable on the processor. When the processor executes the computer program, the steps in the method of the embodiment of the present application are implemented.

[0058] The disk array expansion method provided in this application eliminates the need for disk storage space reallocation by marking unexpanded data blocks, thus eliminating the need for large-scale data migration and reducing system bandwidth usage. When writing data to an unexpanded data block for the first time, the data to be written is converted into full block data, which is then overwritten by the unexpanded data block. This eliminates the need to clear the unexpanded data block, reduces the number of hard disk accesses, and further improves the storage system's performance in processing I / O requests during expansion. BRIEF DESCRIPTION OF THE DRAWINGS

[0059] In order to more clearly illustrate the technical solutions of the embodiments of the present application, the following briefly introduces the drawings required for use in the description of the embodiments of the present application. Obviously, the drawings described below are only some embodiments of the present application. For ordinary technicians in this field, other drawings can be obtained based on these drawings without any creative work.

[0060] FIG1 is a flow chart of a method for expanding a disk array according to some embodiments of the present application;

[0061] FIG2 is a schematic diagram of a disk array expansion device according to some embodiments of the present application;

[0062] FIG3 is a flow chart of expanding a disk array using an expansion bitmap in some embodiments of the present application;

[0063] FIG4 is a schematic diagram of the spatial distribution of disk array expansion in some embodiments of the present application;

[0064] FIG5 is a flowchart of a disk array processing an IO request in some embodiments of the present application. DETAILED DESCRIPTION

[0065] The following will be combined with the accompanying drawings of some embodiments of the present application to clearly and completely describe the technical solutions of some embodiments of the present application. Obviously, the embodiments described are part of the embodiments of the present application, not all of the embodiments. All other embodiments obtained by ordinary technicians in this field based on some embodiments of the present application without making any creative efforts shall fall within the scope of protection of this application.

[0066] It should be understood that references throughout this specification to "some embodiments" or "other embodiments" mean that a particular feature, structure, or characteristic associated with an embodiment is included in at least one embodiment of the present application. Therefore, the appearance of "in some embodiments" or "in other embodiments" throughout this specification does not necessarily refer to the same embodiment. Furthermore, these particular features, structures, or characteristics may be combined in any suitable manner in one or more embodiments.

[0067] In some embodiments of the present application, it should be understood that the size of the serial numbers of the following processes does not mean the order of execution. The execution order of each process should be determined by its function and internal logic, and should not constitute any limitation on the implementation process of some embodiments of the present application.

[0068] Exemplary embodiments will be described in detail herein, with examples illustrated in the accompanying drawings. In the following description, when referring to the drawings, identical numerals in different figures represent identical or similar elements, unless otherwise indicated. The embodiments described in the following exemplary embodiments are not intended to represent all embodiments consistent with the present application. Rather, they are merely examples of apparatus and methods consistent with certain aspects of the present application, as detailed in the appended claims.

[0069] It should be noted that, in the absence of conflict, some embodiments and features in the embodiments of the present application may be combined with each other.

[0070] Disk arrays with parity information, such as RAID5 and RAID6, are more secure and reliable than those without parity data blocks, and are therefore widely used. If a hard drive in a RAID array fails, the damaged data can be recovered using the parity data and the data on the remaining hard drives. Taking RAID5 as an example, the process for expanding a disk array is as follows:

[0071] (1) When the capacity expansion operation is started, the disk array will silently suspend host business processing and redistribute the space distribution. The parity blocks of each stripe in the disk array are arranged according to certain rules. When new hard disk space is added, the disk array will readjust the spatial distribution of data blocks and parity blocks.

[0072] (2) Spatial distribution is completed, silent processing is completed, business processing is resumed, and data migration is performed according to the new spatial distribution. The checksum data is recalculated and written to the checksum block. After the spatial distribution is readjusted, the positions of the data blocks and checksum blocks change, and some of the stored data needs to be migrated to the new location, which involves a large number of hard disk read and write operations.

[0073] (3) During the data migration process, a small number of newly added data blocks that do not need to be migrated are cleared by writing all zero data to them.

[0074] (4) When all data in the disk array are migrated, the disk array is expanded. The data migration process requires migrating the migrated data from the original hard disk to the newly allocated hard disk area. Specifically, the data is first read from the original disk and stored in the memory, and then written from the memory to another hard disk. After that, the stripe check data is recalculated, that is, the data of all data blocks in the stripe are XORed to obtain new check data.

[0075] The above expansion process involves a large number of reads, writes, and XOR operations, which consumes a large amount of system bandwidth resources, resulting in a decrease in the system's processing performance for foreground host business IO during the expansion period. This application does not perform data migration, records the data blocks that have not been expanded, and writes data in full block format when writing data for the first time, thus saving a large number of hard disk reads and writes, saving system bandwidth, and improving expansion efficiency.

[0076] The present application will be described in detail below with reference to the accompanying drawings and in combination with some embodiments.

[0077] FIG1 is a flow chart of a disk array expansion method proposed in some embodiments of the present application. As shown in FIG1 , the method includes:

[0078] S1: Divide the newly added hard disk space into multiple new data blocks according to the array block size, and add the multiple new data blocks to the disk array; the array block size is the data block size specified when the disk array is created.

[0079] In some embodiments, adding a plurality of new data blocks to a disk array includes:

[0080] Taking the hard disk as the unit, each new data block is added to the end of each stripe in the disk array, so that each stripe contains a data block from each hard disk.

[0081] S2: Mark all newly added data blocks as not expanded, and keep the spatial distribution of the original data blocks and check blocks in the disk array unchanged.

[0082] When expanding disk capacity, there are requirements for the number of new hard drives. Taking RAID5 as an example, each stripe in RAID5 with a stripe width of N has a parity block. Therefore, the blocks that actually store data in the stripe are N-1. When expanding capacity, the number of new hard drives M must be less than N-1.

[0083] FIG4 is a schematic diagram of the spatial distribution of disk array expansion in some embodiments of the present application. As shown in FIG4 is a schematic diagram of the expansion of the disk array, the disk array in the figure is generated based on 4 hard disks, and each stripe includes three data blocks D1, D2, and D3 for storing user data, and a check block P for storing verification data. When a new hard disk (hard disk 5) is added for expansion, the hard disk 5 is divided into new data blocks and incorporated into the end of the disk array (as shown in the D4 block in FIG4 ), keeping the spatial distribution of the original data blocks and check blocks in the disk array unchanged, that is, the positions of the initial data blocks and check blocks in the disk array remain unchanged. By not changing the spatial distribution of the disk array, a large number of data migration operations caused by changes in the spatial distribution are avoided, system bandwidth resources are saved, and the efficiency of disk array expansion is also improved.

[0084] When more than one hard drive is added, data blocks are sequentially added to the end of the disk array, one per hard drive, so that each stripe in the disk array contains one data block from all hard drives. As shown in Figure 4, when two new hard drives are added, the newly added D5 data block is sequentially added after the D4 block, so that each stripe contains: D1 data block, D2 data block, D3 data block, D4 data block, D5 data block, and parity block P.

[0085] In some embodiments of the present application, additional hard disk space is added according to the array block size specified when the disk array is created. Based on the specified array block size, the additional hard disk space is added to the disk array in the form of data blocks, and then all newly added data blocks are marked as unexpanded data blocks, maintaining the space distribution of the disk array before expansion, avoiding large amounts of data migration in the disk array that would cause multiple accesses to the hard disk, and thus saving system bandwidth.

[0086] A newly added hard drive may contain residual data from previous use. When a hard drive is added to a disk array, this residual data is garbage data that needs to be cleared. If new data is written directly to these data blocks, data errors will occur. Therefore, the newly added data blocks need to be cleared before writing data. In order to further reduce the number of read and write times on the hard drive, this application does not directly write all-zero data to the newly added data blocks for data clearing. Instead, all newly added data blocks are marked as not expanded. Before writing data to the unexpanded data blocks for the first time, the unexpanded data blocks are defaulted to storing all-zero data.

[0087] S3: When writing data to the unexpanded data block for the first time, full block data is generated based on the data to be written and written to the unexpanded data block, and the check data of the stripe to which the data block belongs is updated; the space occupied by the full block data is consistent with the array block size.

[0088] S4: When the unexpanded data block is first written with full block data, the data block is marked as completed with expansion.

[0089] In some embodiments of the present application, when data is written to a data block that has not been expanded for the first time, it is written in the form of full block data, and the space occupied by the full block data is the same as the data block size. For example, when the array block size set when the disk array is created is 256k, then when the disk is expanded, the new data block size is added according to the array block size, and the full block data is also 256k in size. Since the full block data can completely cover the entire data block, the garbage data that may exist in the data block can be cleared while writing the full block data. In some embodiments of the present application, by writing full block data when writing data for the first time, the number of accesses to the hard disk is further reduced, thereby saving system bandwidth and improving the performance of the system in processing IO requests.

[0090] When the full block data is written for the first time, the expansion of the unexpanded data block is completed, and normal read and write operations can be performed on it. In some embodiments of the present application, the expansion process of the disk array is monitored by marking the data blocks that have been expanded.

[0091] It should be noted that when a disk array is expanded, the parity data in each stripe needs to be updated because the data blocks of the stripe change. The parity data is obtained by XORing the data of all data blocks in the stripe. Since the new data blocks are assumed to store all-zero data by default in this application, that is, after XORing the all-zero data with the original parity data, the parity data remains unchanged. Therefore, when expanding the capacity using the method of this application, there is no need to recalculate the parity data of each stripe, further saving system bandwidth.

[0092] In some embodiments, the method further comprises:

[0093] The expansion bitmap is initialized according to the newly added data blocks in the disk array; the expansion bitmap is used to record whether the disk array has completed expansion.

[0094] In one embodiment, a capacity expansion bitmap is used to record whether the disk array has completed capacity expansion. The capacity expansion bitmap is used to record whether the newly added data blocks in the disk array have completed capacity expansion. When all newly added data blocks have completed capacity expansion, the disk array is completed.

[0095] In some embodiments, initializing the expansion bitmap includes:

[0096] Create an expansion bitmap and record the stripe number and stripe identifier according to the newly added data block. The stripe number and stripe identifier have a one-to-one correspondence. The stripe number indicates the position of the stripe, and the stripe identifier is composed of the block identifier. The block identifier includes the unexpanded state and the completed expansion state, which is used to indicate whether the newly added data block in the stripe has been expanded.

[0097] When initializing the expansion bitmap, all block flags are set to the non-expanded state.

[0098] In some embodiments, an expansion bitmap is created to record the expansion status of newly added data blocks in the disk array in units of stripes. The expansion bitmap stores the number of each stripe and the corresponding stripe identifier. The stripe identifier consists of one or more block identifiers. The block identifier indicates the expansion status of the newly added data block at the corresponding position. The identifier is used to distinguish between the non-expanded state and the completed expansion state, and can be set as needed in actual applications. For example, the non-expanded state is set to "1" and the completed expansion state is set to "0". When new hard disk space is added to the disk array, the expansion bitmap is initialized, and the block identifiers in all stripe identifiers are set to "1", indicating that all currently newly added data blocks are non-expanded data blocks.

[0099] When the unexpanded data block is first written with full block data, the expansion bitmap is updated according to the position of the data block in the disk array.

[0100] The stripe identifier in the expansion bitmap indicates the expansion status of the current disk array. When the unexpanded data block in the disk array is written with full block data for the first time, the data block is expanded. At this time, the block identifier in the expansion bitmap is changed to the expansion completion status.

[0101] In some embodiments, updating the expansion bitmap according to the location of the data block in the disk array includes:

[0102] Get the stripe number of the stripe where the data block is located;

[0103] Determine the location of data blocks in the stripe;

[0104] The corresponding stripe identifier is determined from the expansion bitmap according to the stripe number, and the corresponding position character is set to the expansion completion state according to the position of the data block in the stripe.

[0105] The stripe ID corresponding to the data block is obtained from the expansion bitmap using the stripe number. The block ID corresponding to the data block is determined based on the data block's position in the stripe. When the data block is expanded, the corresponding block ID is changed to the expansion completed state. For example, the block ID at the corresponding position of the data block is set to "0".

[0106] FIG3 is a flow chart of using the expansion bitmap to expand the disk array in some embodiments of the present application. As shown in FIG3, the steps of expanding the disk array are as follows:

[0107] (1) When creating a disk array, specify the array block size of the disk array through the command line. The array block size can be set according to actual needs. For example, the array block size can be set to 256k.

[0108] (2) When the disk array detects that an expansion task has been triggered, an expansion bitmap is initialized in the disk array based on the stripe information of the current disk array. The expansion bitmap is used to record the stripe number and stripe identifier in the current disk array. The stripe identifier includes the block identifier of the data block newly added to the disk array. For example, if the number of newly added hard disks during expansion is 2, the stripe identifier consists of 2 block identifiers, and each block identifier corresponds to the expansion status of a data block. The expansion bitmap is used to record the stripe number in the array and whether the stripe has completed expansion. When the expansion bitmap is initialized, all stripe identifiers are set to all 1, that is, all newly added data blocks have not completed expansion.

[0109] As shown in Figure 3, in this application, after adding hard disk space, the data block D4 area of ​​the newly added hard disk 5 is defaulted to an all-zero area. That is, the D4 area is regarded as storing all-zero data, but all-zero data is not written to it. Instead, the D4 area is recorded as not expanded through the expansion bitmap mark. When an IO request is received, it will first determine whether there is an expansion bitmap. The current expansion status of the D4 area is determined based on the expansion bitmap to determine the subsequent IO processing flow.

[0110] After adding new hard disk space to the disk array, the stripe parity data needs to be updated. The parity data is calculated by performing an exclusive OR (xor) operation on the data of all data blocks in the stripe, that is:

[0111] P = (data of D1 block) xor (data of D2 block) xor (data of D3 block).

[0112] In some embodiments, since other data blocks are not migrated after the D4 area is newly added, the new check data P' is calculated as follows:

[0113] P' = (data from block D1) xor (data from block D2) xor (data from block D3) xor (data from block D4). Block D4 stores all zero data by default, so the new check data P' = P. This means the check data does not need to be recalculated and written, further saving system bandwidth resources.

[0114] (3) When writing new data to the disk array, first determine whether the data block being written is an unexpanded data block. If data is being written to an unexpanded data block, the data to be written needs to be written in the form of full block data.

[0115] When the unexpanded data block is written with full block data for the first time, the data block is expanded and the block identifier at the corresponding position in the expansion bitmap is set to 0.

[0116] (4) Until all the unexpanded data blocks are overwritten, that is, all the unexpanded data blocks are written with full block data once, all the stripe marks in the expansion bitmap are set to 0. At this time, the disk array expansion is completed, the bitmap is deleted and the space it occupies is released.

[0117] In some embodiments, generating full block data based on the data to be written includes:

[0118] Get the space size occupied by the data to be written and the array block size; use all-zero data to fill the data to be written to generate full block data.

[0119] In some embodiments, when writing data to an unexpanded data block, full block data is generated by padding with all zero data. The amount of space occupied by the data to be written is first determined. Then, based on the array block size (i.e., the size of the unexpanded data block), the data to be written is padded with all zero data (i.e., all bytes in the data are 0) to generate a full block data.

[0120] For example, when the array block size is 256KB and the data to be written is 156KB, it is necessary to supplement the data to be written with 100KB of all-zero data to generate 256KB of full block data and overwrite it.

[0121] In some embodiments, full block data is used to perform the first write to the non-expanded data blocks, saving the operation of clearing data on the newly added data blocks during expansion, improving expansion efficiency, and saving system bandwidth resources.

[0122] In some embodiments, generating full block data based on the data to be written includes:

[0123] According to the array block size, a new all-zero memory area is created in the disk array memory and all-zero data is stored;

[0124] According to the array block size, all-zero data is taken from the all-zero memory area to supplement the data to be written, so that the space occupied by the data to be written is consistent with the array block size.

[0125] In some embodiments, a new all-zero memory area is pre-created in the disk array. When full block data needs to be generated, all-zero data of the required size is taken out from the all-zero memory area to fill the gap.

[0126] Specifically, when creating a disk array, the array block size specified in the RAID array creation command is obtained, for example, 256KB. Based on the obtained array block size, a 256KB all-zero memory area is added to the disk array. When data is first written to the unexpanded data block, all-zero data is retrieved from the pre-set all-zero memory area to supplement the data to be written.

[0127] In some embodiments, an all-zero data area that is consistent with the array block size is pre-generated in the disk array. When full block data needs to be generated, the required size of all-zero data can be quickly retrieved to make up for the missing part of the data to be written, thereby speeding up the efficiency of processing IO requests during disk array expansion.

[0128] In some embodiments, generating full block data based on the data to be written further includes:

[0129] When the size of the data to be written is equal to the array block size, the data to be written is regarded as full block data;

[0130] When the space occupied by the data to be written is larger than the array block size, the data to be written is split according to the array block size;

[0131] Generate a full block of data for each part of the split data and write it into different unexpanded data blocks.

[0132] In some embodiments, when writing data to a non-expanded data block for the first time, it is necessary to write the full block data to the data block. Specifically, the following steps can be used:

[0133] Determine the size of the data to be written. If the size of the data to be written is consistent with the array block size (for example, the size of the data to be written is 256KB), the data to be written is full block data and is written directly to the unexpanded data block.

[0134] If the size of the data to be written is smaller than the array block size, all zero data is used to fill the array block size and then written;

[0135] If the size of the data to be written is larger than the array block size, the data to be written will be split, and the part that meets the full block data size will be directly written as the full block data to the non-expanded data block. For the remaining part of the data that is smaller than the array block size, it will be padded with all-zero data to generate a new full block data and write it to another non-expanded data block.

[0136] In some embodiments, the method further comprises:

[0137] When receiving a write data request, determine whether the area of ​​the write data request operation is a newly added data block;

[0138] If the area of ​​the write data request operation is not a newly added data block, the data will be written directly to the area;

[0139] If the area of ​​the write data request operation is a newly added data block, the expansion bitmap is queried to determine whether the data block has been expanded; if the data block has been expanded, the data is directly written to the area.

[0140] In some embodiments, when RAID receives an IO request, it first determines whether there is an expansion bitmap for the disk array. If there is no expansion bitmap, it means that there are no newly added data blocks in the disk array, that is, there are no unexpanded data blocks in the disk array. At this time, the IO request is processed normally: if the IO request is a write data request, the check data of the stripe is recalculated based on the data to be written, and the data to be written and the new check data are written to the data block and the check block respectively; if the IO request is a read data request, the data block is directly read.

[0141] FIG5 is a flowchart of a disk array processing an IO request in some embodiments of the present application. As shown in FIG5 , when the IO request is a write data request, the system processes the IO in the following steps:

[0142] (1) Determine whether the disk array has an expansion bitmap. If the expansion bitmap does not exist, directly write data to the data block.

[0143] (2) When an expansion bitmap exists, determine whether the write data request is to write data to the newly added data block. If the write data request is not to write data to the newly added data block, the data to be written can be written directly to the data block; if it is to write data to the newly added data block, it is necessary to further query the expansion bitmap to see whether the newly added data block has been expanded. Specifically, if the block identifier at the corresponding position in the bitmap is 1, it means that the data block has not been expanded. If the block identifier at the corresponding position in the bitmap is 0, it means that the data block has been expanded.

[0144] (3) For the data blocks that have completed expansion, data is written in the normal way and the check data is recalculated. For the data blocks that have not completed expansion, the data is written in the same way as the first time the data blocks that have not been expanded are written. That is, the data to be written is padded with all zeros to generate full block data, and the data is written into the data block in the form of full block data, and the check data is updated.

[0145] (4) After the full block data is written to the data block that has not been expanded, the block flag at the corresponding position in the expansion bitmap is set to the expansion completion state, that is, set to 0.

[0146] In some embodiments, the method further comprises:

[0147] When receiving a read data request, determining whether the area of ​​the read data request operation is a newly added data block;

[0148] If the area of ​​the read data request operation is not a newly added data block, the data in the area is read directly;

[0149] If the area of ​​the read data request operation is a newly added data block, the expansion bitmap is queried to determine whether the data block has been expanded; if the data block has been expanded, the data of the data block is directly read; if the data block has not been expanded, the data block is not read and all-zero data is directly returned.

[0150] In some embodiments, as shown in FIG5 , when the IO request is a read data request, the system processes the IO as follows:

[0151] (1) Determine whether the disk array has an expansion bitmap. If the expansion bitmap does not exist, directly read the data blocks.

[0152] (2) When an expansion bitmap exists, determine whether the write data request reads data from the newly added data block. If the write data request does not read data from the newly added data block, the data block can be read directly; if it reads data from the newly added data block, it is necessary to further query the expansion bitmap to see whether the newly added data block has been expanded. Specifically, if the block identifier at the corresponding position in the bitmap is 1, it means that the data block has not been expanded. If the block identifier at the corresponding position in the bitmap is 0, it means that the data block has been expanded.

[0153] (3) For the data blocks that have completed the expansion, the data is directly read in the normal way. For the data blocks that have not completed the expansion, the data blocks are not directly read, but it is assumed that the data blocks store all zero data, and thus all zero data is directly returned as the read result.

[0154] In some embodiments, the unexpanded data blocks are regarded as storing all-zero data. When a read data request is made to the unexpanded data blocks, there is no need to actually read the hard disk. Instead, all-zero data is directly returned as the read result, reducing the number of accesses to the hard disk and avoiding data errors caused by reading garbage data that may remain in the unexpanded data blocks.

[0155] In some embodiments, the method further comprises:

[0156] The initialized expansion bitmap is stored in the non-volatile memory;

[0157] When all block identifiers in the expansion bitmap are in the expansion completion state, the expansion bitmap is deleted and the memory is released.

[0158] In some embodiments, to prevent the loss of the expansion status of data blocks in the disk array due to system power outages, an expansion bitmap can be stored in non-volatile memory. When all newly added data blocks in the disk array have been written with overfull block data, all stripe identifiers in the corresponding expansion bitmap are set to 0, indicating that the disk array expansion is complete. The expansion bitmap can then be deleted, freeing the memory it occupied.

[0159] In some embodiments, updating the check data of the stripe to which the data block belongs includes:

[0160] XOR the original check data in the stripe to which the data block belongs with the data in the data block to obtain new check data;

[0161] Write the new checksum data into the checksum block in the stripe, replacing the original checksum data.

[0162] In some embodiments, each time a data write operation is performed on the hard disk, the checksum data of the stripe needs to be updated. The checksum data is calculated by performing an XOR operation on the data stored in all the data blocks in the stripe. This process requires reading the data blocks in the hard disk. If there is an unexpanded data block in the stripe, the unexpanded data block is not read. Instead, the unexpanded data block is defaulted to storing all zero data, and the data is returned to 0 and XORed with the data in the other data blocks.

[0163] The number of hard disk accesses is reduced by not reading the non-expanded data blocks. In addition, since garbage data may remain in the non-expanded data blocks, the non-expanded data blocks are defaulted to storing all-zero data. The all-zero data is used to perform an XOR operation with the data of other data blocks. This can avoid the influence of garbage data on the calculation results of the verification data and prevent data errors.

[0164] Based on the same inventive concept, some embodiments of the present application provide a disk array expansion device. Referring to FIG. 2 , FIG. 2 is a schematic diagram of a disk array expansion device 100 proposed in some embodiments of the present application. As shown in FIG. 2 , the device includes:

[0165] The adding module 101 is configured to divide the newly added hard disk space into a plurality of newly added data blocks according to the array block size, and add the plurality of newly added data blocks to the disk array; the array block size is the data block size specified when the disk array is created;

[0166] The recording module 102 is configured to mark all newly added data blocks as not expanded, and keep the spatial distribution of the original data blocks and check blocks in the disk array unchanged;

[0167] The data access module 103 is configured to, when writing data to an unexpanded data block for the first time, generate full block data based on the data to be written and write the data to the unexpanded data block, and calculate and update the parity data of the stripe to which the data block belongs based on the full block data; the space occupied by the full block data is consistent with the size of the array block;

[0168] The recording module 102 is further configured to mark the data block as completed with expansion when the unexpanded data block is firstly written with full block data.

[0169] In some embodiments, the recording module 102 includes:

[0170] The bitmap management submodule is configured to initialize the expansion bitmap according to the newly added data blocks in the disk array; the expansion bitmap is used to record whether the disk array has completed expansion;

[0171] The bitmap update submodule is configured to update the expansion bitmap according to the position of the data block in the disk array when the unexpanded data block is written with full block data for the first time.

[0172] In some embodiments, the adding module 101 is configured to perform the following steps:

[0173] Taking the hard disk as the unit, each new data block is added to the end of each stripe in the disk array, so that each stripe contains a data block from each hard disk.

[0174] In some embodiments, the data access module 103 is configured to perform the following steps:

[0175] Get the space size occupied by the data to be written and the array block size; use all-zero data to fill the data to be written to generate full block data.

[0176] In some embodiments, the data access module 103 includes:

[0177] The all-zero data management module is configured to create a new all-zero memory area in the memory of the disk array according to the array block size and store all-zero data;

[0178] The data access module 103 takes out all-zero data from the all-zero memory area according to the array block size to supplement the data to be written, so that the space occupied by the data to be written is consistent with the array block size.

[0179] In some embodiments, the data access module 103 is further configured to perform the following steps:

[0180] When the size of the data to be written is equal to the array block size, the data to be written is regarded as full block data;

[0181] When the space occupied by the data to be written is larger than the array block size, the data to be written is split according to the array block size;

[0182] Generate a full block of data for each part of the split data and write it into different unexpanded data blocks.

[0183] In some embodiments, the bitmap management submodule is configured to perform the following steps:

[0184] Create an expansion bitmap and record the stripe number and stripe identifier according to the newly added data block. The stripe number and stripe identifier have a one-to-one correspondence. The stripe number indicates the position of the stripe, and the stripe identifier is composed of the block identifier. The block identifier includes the unexpanded state and the completed expansion state, which is used to indicate whether the newly added data block in the stripe has been expanded.

[0185] When initializing the expansion bitmap, all block flags are set to the non-expanded state.

[0186] In some embodiments, the bitmap update submodule is configured to perform the following steps:

[0187] Get the stripe number of the stripe where the data block is located;

[0188] Determine the location of data blocks in the stripe;

[0189] The corresponding stripe identifier is determined from the expansion bitmap according to the stripe number, and the corresponding position character is set to the expansion completion state according to the position of the data block in the stripe.

[0190] In some embodiments, the data access module 103 is further configured to perform the following steps:

[0191] When receiving a write data request, determine whether the area of ​​the write data request operation is a newly added data block;

[0192] If the area of ​​the write data request operation is not a newly added data block, the data will be written directly to the area;

[0193] If the area of ​​the write data request operation is a newly added data block, the expansion bitmap is queried to determine whether the data block has been expanded; if the data block has been expanded, the data is directly written to the area.

[0194] In some embodiments, the data access module 103 is further configured to perform the following steps:

[0195] When receiving a read data request, determining whether the area of ​​the read data request operation is a newly added data block;

[0196] If the area of ​​the read data request operation is not a newly added data block, the data in the area is read directly;

[0197] If the area of ​​the read data request operation is a newly added data block, the expansion bitmap is queried to determine whether the data block has been expanded; if the data block has been expanded, the data of the data block is directly read; if the data block has not been expanded, the data block is not read and all-zero data is directly returned.

[0198] In some embodiments, the bitmap management submodule is further configured to perform the following steps:

[0199] The initialized expansion bitmap is stored in the non-volatile memory;

[0200] When all block identifiers in the expansion bitmap are in the expansion completion state, the expansion bitmap is deleted and the memory is released.

[0201] As an implementation manner of the present application, the data access module 103 is further configured to perform the following steps:

[0202] XOR the original check data in the stripe to which the data block belongs with the data in the data block to obtain new check data;

[0203] Write the new checksum data into the checksum block in the stripe, replacing the original checksum data.

[0204] Based on the same inventive concept, some embodiments of the present application provide a storage system, which includes:

[0205] The upper layer unit is used to receive access requests or expansion instructions from the host and send them to the array management module; access requests include read data requests and write data requests;

[0206] An array management unit is configured to manage the disk array, including: controlling the hard disk and drive unit to access data to the disk array according to an access request; executing the disk array expansion method proposed in the above embodiment to expand the disk array according to an expansion instruction;

[0207] The hard disk and drive unit includes a disk array composed of multiple hard disks, and is used to execute data access to the disk array according to access requests.

[0208] Based on the same inventive concept, some embodiments of the present application provide a non-volatile readable storage medium on which a computer program is stored. When the program is executed by a processor, the steps in the disk array expansion method of any of the above embodiments of the present application are implemented.

[0209] Based on the same inventive concept, some embodiments of the present application provide an electronic device, which includes a memory, a processor, and a computer program stored in the memory and runnable on the processor. When executed by the processor, the steps in the disk array expansion method of any of the above embodiments of the present application are implemented.

[0210] Regarding the apparatus in some of the above embodiments, the specific manner in which each module performs operations has been described in detail in some embodiments of the method and will not be elaborated on here.

[0211] The above descriptions are merely some embodiments of the present application and are not intended to limit the present application. Any modifications, equivalent replacements, improvements, etc. made within the spirit and principles of the present application shall be included in the scope of protection of the present application.

[0212] For the sake of simplicity, some method embodiments are described as a series of actions. However, those skilled in the art should be aware that this application is not limited by the order of the actions described, because according to this application, some steps can be performed in other orders or simultaneously. Secondly, those skilled in the art should also be aware that the actions and components involved in some embodiments described in this specification are not necessarily required by this application.

[0213] Those skilled in the art will appreciate that some embodiments of the present application may be provided as methods, devices, or computer program products. Therefore, some embodiments of the present application may take the form of a complete hardware embodiment, a complete software embodiment, or an embodiment combining software and hardware. Furthermore, some embodiments of the present application may take the form of a computer program product implemented on one or more computer-usable storage media (including but not limited to magnetic disk storage, CD-ROM (Compact Disc Read-Only Memory), optical storage, etc.) containing computer-usable program code.

[0214] Some embodiments of the present application are described with reference to the flowcharts and / or block diagrams of the methods, terminal devices (systems), and computer program products according to the embodiments of the present application. It should be understood that each process and / or box in the flowchart and / or block diagram, as well as the combination of the processes and / or boxes in the flowchart and / or block diagram, can be implemented by computer program instructions. These computer program instructions can be provided to a processor of a general-purpose computer, a special-purpose computer, an embedded processor, or other programmable data processing terminal device to produce a machine, so that the instructions executed by the processor of the computer or other programmable data processing terminal device produce a device for implementing the functions specified in one or more processes in the flowchart and / or one or more boxes in the block diagram.

[0215] These computer program instructions may also be stored in a computer-readable memory that can direct a computer or other programmable data processing terminal device to operate in a specific manner, so that the instructions stored in the computer-readable memory produce a manufactured product including an instruction device that implements the functions specified in one or more processes in the flowchart and / or one or more boxes in the block diagram.

[0216] These computer program instructions can also be loaded onto a computer or other programmable data processing terminal device so that a series of operating steps are executed on the computer or other programmable terminal device to produce computer-implemented processing, so that the instructions executed on the computer or other programmable terminal device provide steps for implementing the functions specified in one or more processes in the flowchart and / or one or more boxes in the block diagram.

[0217] Although some embodiments of the present application have been described, those skilled in the art may make additional changes and modifications to these embodiments once they have learned the basic creative concept. Therefore, the appended claims are intended to be interpreted as including some embodiments and all changes and modifications that fall within the scope of some embodiments of the present application.

[0218] Finally, it should be noted that, in this document, relational terms such as first and second, etc., are used only to distinguish one entity or operation from another entity or operation, and do not necessarily require or imply any actual relationship or order between these entities or operations. Moreover, the terms "comprises," "comprising," or any other variations thereof are intended to cover non-exclusive inclusion, such that a process, method, article, or terminal device that includes a series of elements includes not only those elements, but also other elements not explicitly listed, or elements inherent to such process, method, article, or terminal device. In the absence of further limitations, an element defined by the phrase "comprising a ..." does not exclude the presence of additional identical elements in the process, method, article, or terminal device that includes the element.

[0219] The above describes in detail the disk array expansion method, device, storage system, and product provided by the present application. Specific examples are used herein to illustrate the principles and implementation methods of the present application. The description of the above embodiments is intended only to help understand the method and core concept of the present application. At the same time, for those skilled in the art, based on the concept of the present application, there may be changes in the specific implementation methods and application scope. In summary, the contents of this specification should not be construed as limiting the present application.

Claims

1. A method for expanding the capacity of a disk array, characterized in that: include: According to the array block size, the newly added hard disk space is divided into a plurality of newly added data blocks, and the plurality of newly added data blocks are added to the disk array; the array block size is the data block size specified when the disk array is created; Mark all newly added data blocks as not expanded, and keep the spatial distribution of the original data blocks and check blocks in the disk array unchanged; When writing data to a non-expanded data block for the first time, generating full block data based on the data to be written and writing the full block data to the non-expanded data block, and updating the check data of the stripe to which the data block belongs; The space occupied by the full block data is consistent with the array block size; When the unexpanded data block is first written with full block data, the data block is marked as completed with expansion.

2. The method for expanding the capacity of a disk array according to claim 1, characterized in that: Also includes: Initializing a capacity expansion bitmap according to the newly added data blocks in the disk array; The expansion bitmap is used to record whether the disk array has completed expansion; When the unexpanded data block is written with full block data for the first time, the expansion bitmap is updated according to the position of the data block in the disk array.

3. The method for expanding the capacity of a disk array according to claim 1, characterized in that: Adding the multiple newly added data blocks to the disk array includes: Taking the hard disk as a unit, each newly added data block is added to the end of each stripe in the disk array, so that each stripe contains a data block of each hard disk.

4. The method for expanding the capacity of a disk array according to claim 1, characterized in that: Generate full block data based on the data to be written, including: The size of the space occupied by the data to be written and the size of the array blocks are obtained; and the data to be written is supplemented with all-zero data to generate full block data.

5. The method for expanding the capacity of a disk array according to claim 1, characterized in that: Generate full block data based on the data to be written, including: According to the array block size, a new all-zero memory area is created in the memory of the disk array, and all-zero data is stored; According to the array block size, all-zero data is taken out from the all-zero memory area to supplement the data to be written, so that the space occupied by the data to be written is consistent with the array block size.

6. The method for expanding the capacity of a disk array according to claim 4 or 5, characterized in that: Generate full block data based on the data to be written, and also include: When the size of the data to be written is equal to the array block size, the data to be written is used as the full block data; When the space occupied by the data to be written is larger than the size of the array block, the data to be written is divided according to the size of the array block; A full block of data is generated for each portion of the data obtained by segmentation, and written into different unexpanded data blocks.

7. The method for expanding the capacity of a disk array according to claim 6, characterized in that: Generate full block data based on the data to be written, and also include: Determine the size of the space occupied by the data to be written; If the size of the space occupied by the to-be-written data is equal to the size of the space occupied by the array block, the to-be-written data is directly written into the non-expanded data block as the full block data; If the size of the space occupied by the data to be written is smaller than the size of the space occupied by the array block, the data to be written is supplemented with the all-zero data until the size of the space occupied by the data to be written is equal to the size of the space occupied by the array block, a new full block data is generated, and the new full block data is written into the data block that has not been expanded; If the size of the space occupied by the data to be written is larger than the size of the space occupied by the array block, the data to be written is divided, and the part of the data to be written that meets the full block data size is directly written into the unexpanded data block as the full block data, and the part of the data to be written that is smaller than the array block size is supplemented with the all-zero data to generate a new full block data, and the new full block data is written into another unexpanded data block.

8. The method for expanding the capacity of a disk array according to claim 2, characterized in that: Initializing the expansion bitmap according to the newly added data blocks in the disk array includes: Create an expansion bitmap, and record the stripe number and stripe identifier according to the newly added data block, wherein the stripe number corresponds to the stripe identifier one by one, the stripe number indicates the position of the stripe, and the stripe identifier is composed of the block identifier; the block identifier includes a non-expanded state and a completed expansion state, which is used to indicate whether the newly added data block in the stripe has completed the expansion; When initializing the expansion bitmap, all block identifiers are set to a non-expanded state.

9. The method for expanding the capacity of a disk array according to claim 8, characterized in that: Updating the capacity expansion bitmap according to the position of the data block in the disk array includes: Obtaining the stripe number of the stripe where the data block is located; Determining a location of the data block in the stripe; A corresponding stripe identifier is determined from the expansion bitmap according to the stripe number, and a corresponding position character is set to a completion expansion state according to the position of the data block in the stripe.

10. The method for expanding the capacity of a disk array according to claim 2, characterized in that: Also includes: When receiving a read / write request, determining whether the disk array has the capacity expansion bitmap, the read / write request including a write data request or a read data request; If the disk array does not have the capacity expansion bitmap, directly performing a write / read data operation on the data block; If the disk array has the capacity expansion bitmap, it is determined whether the write data request is to write data to the newly added data block, or it is determined whether the write data request is to read data from the newly added data block.

11. The disk array expansion method according to claim 10, characterized in that: Also includes: When receiving a write data request, determining whether the area operated by the write data request is a newly added data block; If the area of ​​the write data request operation is not a newly added data block, the data is directly written into the area; If the area of ​​the write data request operation is a newly added data block, query the expansion bitmap to determine whether the data block has completed the expansion; If the data block has completed the expansion, the data is directly written into the area and the verification data is recalculated.

12. The method for expanding the capacity of a disk array according to claim 11, characterized in that: Also includes: If the data block has not completed expansion, the all-zero data is used to supplement the data to be written, generate full block data, write the full block data into the area, update the verification data, and set the block flag in the expansion bitmap to the completed expansion state.

13. The method for expanding the capacity of a disk array according to claim 10, characterized in that: Also includes: When receiving a data read request, determining whether the area operated by the data read request is a newly added data block; If the area of ​​the data read request operation is not a newly added data block, directly read the data in the area; If the area of ​​the read data request operation is a newly added data block, query the expansion bitmap to determine whether the data block has completed expansion; If the data block has been expanded, directly read the data of the data block; If the data block is not expanded, the data block is not read and all zero data is directly returned.

14. The method for expanding the capacity of a disk array according to claim 8, characterized in that: Also includes: The initialized expansion bitmap is stored in the non-volatile memory; When all the block identifiers in the expansion bitmap are in the expansion completion state, the expansion bitmap is deleted and the memory is released.

15. The method for expanding the capacity of a disk array according to claim 1, characterized in that: Updating the check data of the stripe to which the data block belongs, including: XORing the original check data in the stripe to which the data block belongs with the data in the data block to obtain new check data; The new check data is written into the check block in the stripe to replace the original check data.

16. The method for expanding the capacity of a disk array according to claim 15, characterized in that: Also includes: The data block is read, and if there is a non-expanded data block in the stripe, it is determined that the non-expanded data block stores the all-zero data, and the all-zero data in the non-expanded data block is used to perform an XOR operation with other data blocks.

17. A disk array expansion device, characterized in that: Used to implement the method according to any one of claims 1 to 16, comprising: The adding module is configured to divide the newly added hard disk space into a plurality of newly added data blocks according to the array block size, and add the plurality of newly added data blocks to the disk array; the array block size is the data block size specified when the disk array is created; A recording module is configured to mark all newly added data blocks as not expanded, and keep the spatial distribution of the original data blocks and check blocks in the disk array unchanged; The data access module is configured to generate full block data based on the data to be written and write the full block data into the data block, and calculate and update the check data of the stripe to which the data block belongs according to the full block data when writing data to the data block for the first time; the space occupied by the full block data is consistent with the size of the array block; The recording module is further configured to mark the data block as completed with expansion when the unexpanded data block is first written with full block data.

18. A storage system, characterized in that: include: The upper unit is used to receive access requests or expansion instructions sent by the host and send them to the array management module; The access request includes a read data request and a write data request; The array management unit is used to manage the disk array, including: according to the access request, controlling the hard disk The disk and drive unit accesses data to the disk array; and according to the expansion instruction, executes the disk array expansion method according to any one of claims 1 to 16 to expand the disk array; The hard disk and drive unit includes a disk array composed of multiple hard disks, and is used to perform data access to the disk array according to the access request.

19. A computer non-volatile readable storage medium having a computer program stored thereon, characterized in that: When the computer program is executed by a processor, the steps in the method according to any one of claims 1 to 16 are implemented.

20. An electronic device comprising a memory, a processor, and a computer program stored in the memory and executable on the processor, wherein: When the processor executes the computer program, the processor implements the steps in the method according to any one of claims 1 to 16.

Citation Information

Patent Citations

  • On-line capacity expansion method for disk arrays

    CN101546249A

  • Method and device for expanding capacity of independent redundant disk array and medium

    CN112114758A

  • Disk array initialization method and system, electronic equipment and storage medium

    CN115098046A

  • Disk array capacity expansion method and device, storage system and product

    CN117234436A

  • Method for redistributing data when a disk array is expanded

    US20230315324A1

Cited By

  • Disk array capacity expansion method and device, electronic equipment and medium

    CN122086331A