code: func (g Generationer) ResetStorageGeneration() error {
  	var buf bytes.Buffer
  	if _, err := io.CopyN(&buf, rand.Reader, 20); err != nil {
  		return err
  	}
  	hex := fmt.Sprintf("%x", buf.Bytes())
  	buf.Reset()
  	buf.WriteString(hex)
  	buf.WriteString(`
  
  This file's random string on the first line is an optimization and
  paranoia facility for clients.
  
  If the client sees the same random string in multiple upload sessions,
  it assumes that the blobserver still has all the same blobs, and also
  it's the same server.  This mechanism is not fundamental to
  Perkeep's operation: the client could also check each blob before
  uploading, or enumerate all blobs from the server too.  This is purely
  an optimization so clients can mix this value into their "is this file
  uploaded?" local cache keys.
  
  If you deleted any blobs (or suspect any were corrupted), it's best to
  delete this file so clients can safely re-upload them.
  
  `)
  
  	return ioutil.WriteFile(g.generationFile(), buf.Bytes(), 0644)
  }
docs: // ResetStorageGeneration reinitializes the generation by recreating the
  // GENERATION.dat file with a new random string