In a distributed storage system, client caches managed on the basis of small granularity objects can provide better memory utilization then page-based caches. However, object servers, unlike page servers, must perform additional disk reads. These {\em installation reads} are required to install modified objects onto their corresponding disk pages. The {\em opportunistic log} is a new technique that significantly reduces the cost of installation reads. It defers the installation reads, removing them from the modification commit path, and manages a large pool of pending installation reads that can be scheduled efficiently. Using simulations, we show that the opportunistic log substantially enhances the I/O performance of reliable storage servers. An object server without the opportunistic log requires much better client caching to outperform a page server. With an opportunistic log, only a small client cache improvement suffices. Our results imply that efficient scheduling of installation reads can substantially improve the performance of large-scale storage systems, and therefore introduce a new performance tradeoff between page-based and object-based architectures.