Data in data runs are stored in a non-volatile memory array in adaptive
metablocks that are configured according to the locations of data
boundaries. A serial flash buffer is used to store some data, while other
data are directly stored in non-volatile memory. Data may be stored with
alignment to data boundaries during updating of the data to improve
efficiency of subsequent updates.