Patent ID: 7593966

Claim:
A method for storing data, the method comprising: providing a fileserver having: a file system configured to store client files; a policy component configured to store a protection policy associated with a set of files; a mirror service in communication with the policy component, the mirror service configured to prepare modified and created files in a set of files to be written to a repository as specified in the protection policy associated with the set of files; a fileserver API coupled to the mirror service and configured to communicate with a repository; a fileserver file transfer module in communication with the file system and configured to transfer files for the file system to at least one repository or transfer files for the file system from at least one repository; and, a location updating component configured to maintain a list of repository nodes that contain a replica of each file in the set of files and a list of files in the set of files stored at the fileserver; said fileserver initiates recovery of files in the set of files on the fileserver, wherein based on the list of files and the list of repository nodes stored at said fileserver, a replica of a file in the list of files is recovered from a repository node in the list of repository nodes; wherein using a stub file in the set of stub files, said fileserver allows access to a full content of a file associated with the stub file by receiving a client request for a specified file in the set of files, replacing the stub file with the full content of the specified file associated with the stub file, and replacing remaining stub files in the set of stub files with respective full contents of remaining files in the set of files while replacing the stub file with the full content of the specified file; determining a caching level for said fileserver; and recursively, determining a utilization of the fileserver; comparing the caching level against the utilization; and creating a file migration candidate list when the utilization exceeds the caching level; staging out one candidate file; replacing the candidate file with a stub file; and determining whether the utilization of the fileserver still exceeds the caching level, wherein said determining if the utilization of the fileserver still exceeds the caching level further comprises staging out another candidate file on the candidate list and again determining if the utilization of the fileserver exceeds the caching level.