A method for storing data across N storage devices S.sub.1 . . . S.sub.N,
wherein at least one the storage devices has a storage capacity not equal
to a storage capacity of others involves identifying a storage device
S.sub.MAX having a largest capacity; encoding the data with an erasure
encoder to produce F erasure codewords, where F=.times. ##EQU00001## and
distributing the erasure codewords among storage devices S.sub.1 . . .
S.sub.N in approximate proportion to the storage capacity C.sub.K of each
of S.sub.1 . . . S.sub.N so that enough erasure codewords are stored in
each of the N storage devices to assure that if any one of the storage
devices become unavailable, all of the data stored in the systems can be
restored using the fountain codewords stored in the remaining storage
devices. The erasure codewords can be fountain codewords.