code: func CreateSnapDeviceRaw(poolName string, deviceID int, baseDeviceID int) error {
  	task, err := TaskCreateNamed(deviceTargetMsg, poolName)
  	if task == nil {
  		return err
  	}
  
  	if err := task.setSector(0); err != nil {
  		return fmt.Errorf("devicemapper: Can't set sector %s", err)
  	}
  
  	if err := task.setMessage(fmt.Sprintf("create_snap %d %d", deviceID, baseDeviceID)); err != nil {
  		return fmt.Errorf("devicemapper: Can't set message %s", err)
  	}
  
  	dmSawExist = false // reset before the task is run
  	if err := task.run(); err != nil {
  		// Caller wants to know about ErrDeviceIDExists so that it can try with a different device id.
  		if dmSawExist {
  			return ErrDeviceIDExists
  		}
  		return fmt.Errorf("devicemapper: Error running deviceCreate (CreateSnapDeviceRaw) %s", err)
  	}
  
  	return nil
  }
docs: // CreateSnapDeviceRaw creates a snapshot device. Caller needs to suspend and resume the origin device if it is active.