A data deduplication method, wherein the method is applied to a storage array, wherein the storage array comprises a switching device ("Switching device A", "Switching device B"), a first controller ("Controller A"), and a cache device ("Cache device M"), wherein the first controller is connected to the switching device; the cache device is connected to the switching device; and the switching device is connected to a hard disk in the storage array; and the method comprises: calculating, by the cache device, an eigenvalue of a to-be-deduplicated data block; receiving, by the first controller, the eigenvalue of the to-be-deduplicated data block from the cache device, and searching an eigenvalue index set of data blocks for the eigenvalue of the to-be-deduplicated data block; when the eigenvalue of the to-be-deduplicated data block is not found in the eigenvalue index set of data blocks, obtaining, by the first controller, a cache address of the to-be-deduplicated data block in the cache device via the switching device; sending, by the first controller, a read data instruction to a controller of a target hard disk via the switching device, wherein the read data instruction carries an identifier of the cache device and the cache address; reading, by the controller of the target hard disk, the to-be-deduplicated data block from the cache address via the switching device according to the identifier of the cache device and the cache address; storing, by the controller of the target hard disk, the to-be-deduplicated data block into the target hard disk; and when an eigenvalue same as the eigenvalue of the to-be-deduplicated data block exists in the eigenvalue index set, updating, by the first controller, a reference count in an index of the eigenvalue existing in the eigenvalue index set and instructing, by the first controller, the cache device to delete the to-be-deduplicated data block; wherein the storage array further comprises a second controller ("Controller B"), wherein the second controller is connected to the switching device; the second controller stores an address of the to-be-deduplicated data block, and the second controller is a home controller of a target logical unit in which the to-be-deduplicated data block is located; and the receiving, by the first controller, the eigenvalue of the to-be-deduplicated data block from the cache device specifically comprises: sending, by the cache device, the eigenvalue of the to-be-deduplicated data block to the second controller via the switching device; determining, by the second controller, that a home controller of the eigenvalue of the to-be-deduplicated data block is the first controller; and sending, by the second controller, the eigenvalue of the to-be-deduplicated data block to the first controller via the switching device. calculating, by the cache device, an eigenvalue of a to-be-deduplicated data block; receiving, by the first controller, the eigenvalue of the to-be-deduplicated data block from the cache device, and searching an eigenvalue index set of data blocks for the eigenvalue of the to-be-deduplicated data block; when the eigenvalue of the to-be-deduplicated data block is not found in the eigenvalue index set of data blocks, obtaining, by the first controller, a cache address of the to-be-deduplicated data block in the cache device via the switching device; sending, by the first controller, a read data instruction to a controller of a target hard disk via the switching device, wherein the read data instruction carries an identifier of the cache device and the cache address; reading, by the controller of the target hard disk, the to-be-deduplicated data block from the cache address via the switching device according to the identifier of the cache device and the cache address; storing, by the controller of the target hard disk, the to-be-deduplicated data block into the target hard disk; and when an eigenvalue same as the eigenvalue of the to-be-deduplicated data block exists in the eigenvalue index set, updating, by the first controller, a reference count in an index of the eigenvalue existing in the eigenvalue index set and instructing, by the first controller, the cache device to delete the to-be-deduplicated data block; wherein the storage array further comprises a second controller ("Controller B"), wherein the second controller is connected to the switching device; the second controller stores an address of the to-be-deduplicated data block, and the second controller is a home controller of a target logical unit in which the to-be-deduplicated data block is located; and the receiving, by the first controller, the eigenvalue of the to-be-deduplicated data block from the cache device specifically comprises: sending, by the cache device, the eigenvalue of the to-be-deduplicated data block to the second controller via the switching device; determining, by the second controller, that a home controller of the eigenvalue of the to-be-deduplicated data block is the first controller; and sending, by the second controller, the eigenvalue of the to-be-deduplicated data block to the first controller via the switching device.