This paper discusses how to building high available storage systems on top of peer-to-peer infrastructure. We first demonstrate that traditional definitions of availability are not suitable for distributed systems. Then the application-specific availability is defined and analyzed in this paper. We observed by experiments that, in a P2P storage system with frequently node join and leave, availability can’t be improved effectively by pure redundancy (replication or erasure coding). A method is proposed in this paper which combines peer auto-selection and redundancy to effectively improve the availability of P2P storage systems.