code: func (fs *FileStore) Init(info *spb.ServerInfo) error {
  	fs.Lock()
  	defer fs.Unlock()
  
  	if fs.serverFile == nil {
  		var err error
  		// Open/Create the server file (note that this file must not be opened,
  		// in APPEND mode to allow truncate to work).
  		fs.serverFile, err = fs.fm.createFile(serverFileName, os.O_RDWR|os.O_CREATE, nil)
  		if err != nil {
  			return err
  		}
  	} else {
  		if _, err := fs.fm.lockFile(fs.serverFile); err != nil {
  			return err
  		}
  	}
  	f := fs.serverFile.handle
  	// defer is ok for this function...
  	defer fs.fm.unlockFile(fs.serverFile)
  
  	// Truncate the file (4 is the size of the fileVersion record)
  	if err := f.Truncate(4); err != nil {
  		return err
  	}
  	// Move offset to 4 (truncate does not do that)
  	if _, err := f.Seek(4, io.SeekStart); err != nil {
  		return err
  	}
  	// ServerInfo record is not typed. We also don't pass a reusable buffer.
  	if _, _, err := writeRecord(f, nil, recNoType, info, info.Size(), fs.crcTable); err != nil {
  		return err
  	}
  	return nil
  }
docs: // Init is used to persist server's information after the first start