Abstract-Regenerating codes for distributed storage have attracted much research interest in the past decade. Such codes trade the bandwidth needed to repair a failed node with the overall amount of data stored in the network. Minimum storage regenerating (MSR) codes are an important class of optimal regenerating codes that minimize (first) the amount of data stored per node and (then) the repair bandwidth. Specifically, an [n, k, d]-(α) MSR code C over F q stores a file F consisting of αk symbols over F q among n nodes, each storing α symbols, in such a way that:• the file F can be recovered by downloading the content of any k of the n nodes; and • the content of any failed node can be reconstructed by accessing any d of the remaining n − 1 nodes and downloading α/(d−k+1) symbols from each of these nodes. In practice, the file F is typically available in uncoded form on some k of the n nodes, known as systematic nodes, and the defining node-repair condition above can be relaxed to requiring the optimal repair bandwidth for systematic nodes only. Such codes are called systematic-repair MSR codes.Unfortunately, finite-α constructions of [n, k, d] MSR codes are known only for certain special cases: either low rate, namely k/n 0.5, or high repair connectivity, namely d = n − 1. Our main result in this paper is a finite-α construction of systematic-repair [n, k, d] MSR codes for all possible values of parameters n, k, d. We also introduce a generalized construction for [n, k] MSR codes to achieve the optimal repair bandwidth for all values of d simultaneously.