code: func (d *Driver) Get(id, mountLabel string) (containerfs.ContainerFS, error) {
  	title := fmt.Sprintf("lcowdriver: get: %s", id)
  	logrus.Debugf(title)
  
  	// Generate the mounts needed for the deferred operation.
  	disks, err := d.getAllMounts(id)
  	if err != nil {
  		logrus.Debugf("%s failed to get all layer details for %s: %s", title, d.dir(id), err)
  		return nil, fmt.Errorf("%s failed to get layer details for %s: %s", title, d.dir(id), err)
  	}
  
  	logrus.Debugf("%s: got layer mounts: %+v", title, disks)
  	return &lcowfs{
  		root:        unionMountName(disks),
  		d:           d,
  		mappedDisks: disks,
  		vmID:        d.getVMID(id),
  	}, nil
  }
docs: // Get returns the rootfs path for the id. It is reference counted and
  // effectively can be thought of as a "mount the layer into the utility
  // vm if it isn't already". The contract from the caller of this is that
  // all Gets and Puts are matched. It -should- be the case that on cleanup,
  // nothing is mounted.
  //
  // For optimisation, we don't actually mount the filesystem (which in our
  // case means [hot-]adding it to a service VM. But we track that and defer
  // the actual adding to the point we need to access it.