A method of managing data at a client device, the client device being a client of a storage server system, the client device storing a file system including a plurality of files, corresponding remote and local backup copies of at least some of said files being stored at the storage server system and at a local backup cache of the client device as sets of respective remote and local storage blocks, the method comprising: building, on the client device, a searchable index of said plurality of files; associating a file pointer with a first file of said plurality of files, the file pointer being associated with the identity of the sets of storage blocks that correspond to the backup copy of the first file; and during a search operation initiated at the client device to recover the first file: identifying, using the index, the file pointer to the first file; identifying, using the file pointer to the first file, the local storage blocks currently stored in the local backup cache that correspond to the backup copy of the first file; in case that a subset of local storage blocks that correspond to the backup copy of the first file are not present in the local backup cache, the method comprises: retrieving, from the storage server system to the client device, a subset of remote storage blocks corresponding to the missing local storage blocks of the backup copy of the first file; and reconstructing the first file from a combination of the identified local storage blocks and the retrieved remote storage blocks. building, on the client device, a searchable index of said plurality of files; associating a file pointer with a first file of said plurality of files, the file pointer being associated with the identity of the sets of storage blocks that correspond to the backup copy of the first file; and during a search operation initiated at the client device to recover the first file: identifying, using the index, the file pointer to the first file; identifying, using the file pointer to the first file, the local storage blocks currently stored in the local backup cache that correspond to the backup copy of the first file; in case that a subset of local storage blocks that correspond to the backup copy of the first file are not present in the local backup cache, the method comprises: retrieving, from the storage server system to the client device, a subset of remote storage blocks corresponding to the missing local storage blocks of the backup copy of the first file; and reconstructing the first file from a combination of the identified local storage blocks and the retrieved remote storage blocks. identifying, using the index, the file pointer to the first file; identifying, using the file pointer to the first file, the local storage blocks currently stored in the local backup cache that correspond to the backup copy of the first file; in case that a subset of local storage blocks that correspond to the backup copy of the first file are not present in the local backup cache, the method comprises: retrieving, from the storage server system to the client device, a subset of remote storage blocks corresponding to the missing local storage blocks of the backup copy of the first file; and reconstructing the first file from a combination of the identified local storage blocks and the retrieved remote storage blocks. retrieving, from the storage server system to the client device, a subset of remote storage blocks corresponding to the missing local storage blocks of the backup copy of the first file; and reconstructing the first file from a combination of the identified local storage blocks and the retrieved remote storage blocks.