This paper examines the choices for semantic level and granularity that have been made in the Echo distributed file system. The primary goals of Echo are to explore issues of scaling, availability, and performance. For scaling and uniformity of access, Echo provides a global, hierarchical name space. Replication is employed for availability. Performance is achieved by distributed caching on clients, and by using a log on the file server to reduce disk seeks. The log also records information about updates that are in progress, and this information is used during crash recovery to bring all replicas into agreement.