A file system for a computer, enabling the computer to access remote independent storage units over a computer network in response to a request, from an application executed on the computer, to read data stored in a file on the storage units, wherein a file includes segments of the data and corresponding redundancy information for each segment, and wherein, for each file, each segment of the data is stored on a randomly or pseudorandomly selected one of the storage units, and wherein, for each segment of the data, the corresponding redundancy information is stored on a randomly or pseudorandomly selected one of the storage units, the file system comprising:
- means, responsive to the request to read data from a file, for selecting, for each segment of the requested data, one of the storage units on which data representing the segment is stored;
- means for reading each segment of the requested data from the selected storage unit for the segment;
- means for serializing the segments read from the selected storage units;
- and
- means for providing the serialized data to the application;
- wherein the means for selecting includes:
- in the file system:
- means for requesting data from one of the storage units, indicating an estimated time;
- means for requesting data from another of the storage units, indicating an estimated time, if the first storage unit rejects the request;
- and
- means for requesting the data from the first storage unit if the second storage unit rejects the request;
- and
- in each storage unit:
- means for rejecting a request for data if the request cannot be serviced by the storage unit within the estimated time;
- and
- means for accepting a request for data if the request can be serviced by the storage unit within the estimated time.