As storage systems grow in size and complexity, the necessity for automatically managing them increases. One area of concern is system optimization, often managed by the administrator manually tweaking parameters to make the system as efficient as possible. The problem arises when there are multiple objectives to optimize, some of which may interfere with each other. Even when optimization is automated, it often requires either a decision to be made as to which objectives are more important than others, or if the objectives are combined into a linear function, this function (and the potential related weights) must be determined by the administrator. To this end, most systems optimize for only one objective, or when there are two objectives it is two that do not conflict. However, when all objectives are equally important, or it is unknown which objective is most important, the system must learn to balance multiple objectives.
One way to aid in automating system optimization is by looking at the file allocation problem. The file allocation problem considers a set of files (or tasks) that need to be allocated to some number of devices, so as to optimize an objective function. I propose extending the file allocation problem so that rather than optimizing a single objective function, the goal is to allocate data to a number of devices subject to a multi-objective optimization. This dissertation covers the three top-down theoretical approaches I developed as well as a bottom-up practical approach. In addition, I present a system design that incorporates the practical approach with two space saving modifications.