def save
      return true if !new_record? && !changed?
      raise Exceptions::ValidationFailedException.new(errors) if !valid?

      if new_record?
        create # Create a new hard drive
      else
        # Mediums like Hard Drives are not updatable, they need to be recreated
        # Because Hard Drives contain info and paritions, it's easier to error
        # out now than try and do some complicated logic
        msg = "Hard Drives cannot be updated. You need to create one from scratch."
        raise Exceptions::MediumNotUpdatableException.new(msg)
      end
    end
def save
      return true if !new_record? && !changed?
      raise Exceptions::ValidationFailedException.new(errors) if !valid?

      if new_record?
        create # Create a new hard drive
      else
        # Mediums like Hard Drives are not updatable, they need to be recreated
        # Because Hard Drives contain info and paritions, it's easier to error
        # out now than try and do some complicated logic
        msg = "Hard Drives cannot be updated. You need to create one from scratch."
        raise Exceptions::MediumNotUpdatableException.new(msg)
      end
    end
Saves the hard drive object. If the hard drive is new,
 this will create a new hard drive. Otherwise, it will
 save any other details about the existing hard drive.

 Currently, **saving existing hard drives does nothing**.
 This is a limitation of VirtualBox, rather than the library itself.

 @return [Boolean] True if command was successful, false otherwise.