A method for storage virtualization of files, the method performed by a computing device comprising a processor, memory, and secondary storage, the memory storing computer-executable instructions that, when executed by the processor, implement a file system for managing the storage of files on the secondary storage, the method comprising: storing, on the secondary storage, a placeholder for a file, the file comprising data at least some of which is stored on a network remotely from the secondary storage, the placeholder containing metadata associated with the file, a sparse data stream containing none or some data of the file that is not stored remotely, and information which enables any remotely stored data of the file to be retrieved from the network; receiving, from an application executing on the processor of the computing device, a request to read at least a portion of the data of the file; determining from the information contained in the placeholder whether any of the requested data is stored remotely from the secondary storage; and for any data determined from the placeholder to be stored remotely from the secondary storage, formulating one or more requests to a storage virtualization provider to retrieve the remotely stored data, the formulating one or more requests to the storage virtualization provider further comprising: determining whether any portion of the requested data stored remotely from the secondary storage has previously been requested from the storage virtualization provider but not yet received; and trimming the one or more requests to the storage virtualization provider so that the one or more requests do not overlap with any such previously requested but not yet received data; and transmitting the one or more requests to the storage virtualization provider. storing, on the secondary storage, a placeholder for a file, the file comprising data at least some of which is stored on a network remotely from the secondary storage, the placeholder containing metadata associated with the file, a sparse data stream containing none or some data of the file that is not stored remotely, and information which enables any remotely stored data of the file to be retrieved from the network; receiving, from an application executing on the processor of the computing device, a request to read at least a portion of the data of the file; determining from the information contained in the placeholder whether any of the requested data is stored remotely from the secondary storage; and for any data determined from the placeholder to be stored remotely from the secondary storage, formulating one or more requests to a storage virtualization provider to retrieve the remotely stored data, the formulating one or more requests to the storage virtualization provider further comprising: determining whether any portion of the requested data stored remotely from the secondary storage has previously been requested from the storage virtualization provider but not yet received; and trimming the one or more requests to the storage virtualization provider so that the one or more requests do not overlap with any such previously requested but not yet received data; and determining whether any portion of the requested data stored remotely from the secondary storage has previously been requested from the storage virtualization provider but not yet received; and trimming the one or more requests to the storage virtualization provider so that the one or more requests do not overlap with any such previously requested but not yet received data; and transmitting the one or more requests to the storage virtualization provider.