  We present a new 'piggybacking' framework for designing distributed storage
codes that are efficient in data-read and download required during node-repair.
We illustrate the power of this framework by constructing classes of explicit
codes that entail the smallest data-read and download for repair among all
existing solutions for three important settings: (a) codes meeting the
constraints of being Maximum-Distance-Separable (MDS), high-rate and having a
small number of substripes, arising out of practical considerations for
implementation in data centers, (b) binary MDS codes for all parameters where
binary MDS codes exist, (c) MDS codes with the smallest repair-locality. In
addition, we employ this framework to enable efficient repair of parity nodes
in existing codes that were originally constructed to address the repair of
only the systematic nodes. The basic idea behind our framework is to take
multiple instances of existing codes and add carefully designed functions of
the data of one instance to the other. Typical savings in data-read during
repair is 25% to 50% depending on the choice of the code parameters.
