Patent ID: 8219750

Claim:
A system for implementing distributed RAID, comprising: a plurality of data bank computers, each data bank coupled to each host and each of the other plurality of data banks, each data bank including: a processor; a data store; a computer readable medium comprising instructions executable for: executing an first application program on the data bank, wherein the first application program is a first virtual machine and executing the first application program comprises executing the first virtual machine using a virtualization layer on the data bank; and implementing a distributed RAID application, the distributed RAID application operable to: receive a command corresponding to a first segment of a first volume, wherein the command was issued by the first application program and the first volume and redundancy data corresponding to a RAID level implemented in conjunction with the first volume are stored on each of the plurality of data banks such that for each segment of the first volume a corresponding redundancy segment comprising the redundancy data associated with that segment does not reside on the same data bank as the segment, and wherein the first virtual machine corresponds to a second volume, the second volume stored on each of the plurality of data banks; determine a first data bank of the plurality of data banks, wherein the first data bank corresponds to the first segment and if the first data bank is the data bank which received the command execute the first command with respect to the first segment and if not, forward the first command to the first data bank; and determine if the first command is a write command and if the first command is a write command determine a second data bank of the plurality of data banks, wherein the second data bank corresponds to a first redundancy segment associated with the first segment and if the second data bank is the data bank which received the command execute the first command with respect to the first redundancy segment and if not, forward the first command to the second data bank, wherein each segment of the first volume corresponds to one of the plurality of data banks and each segment is allocated to one of the plurality of data banks according to a permutation of the plurality of data banks and each of the redundancy segments is allocated to one of the plurality of data banks which is distinct from each of the plurality of data banks corresponding to any segments of the first volume associated with that redundancy segment.