def zero_block_size(): value = config.get('irs', 'zero_block_size_mb') try: value = int(value) except ValueError: raise exception.InvalidConfiguration( reason="Unsupported value for irs:zero_block_size_mb", zero_block_size_mb=value) if value < MIN_BLOCK_SIZE_MB or value > MAX_BLOCK_SIZE_MB: raise exception.InvalidConfiguration( reason="Out of range value for irs:zero_block_size_mb", zero_block_size_mb=value, min=MIN_BLOCK_SIZE_MB, max=MAX_BLOCK_SIZE_MB) return value * constants.MEGAB
def default_qcow2_compat(): value = config.get('irs', 'qcow2_compat') if value not in _QCOW2_COMPAT_SUPPORTED: raise exception.InvalidConfiguration( reason="Unsupported value for irs:qcow2_compat", qcow2_compat=value, supported_values=_QCOW2_COMPAT_SUPPORTED) return value
def zero(device_path, size=None, task=_NullTask()): """ Zero a block device. Arguments: device_path (str): Path to block device to wipe size (int): Number of bytes to write. If not specified, use the device size. Size must be aligned to `vdsm.storage.constants.BLOCK_SIZE`. task (`storage.task.Task`): Task running this operation. If specified, the zero operation will be aborted if the task is aborted. Raises: `vdsm.common.exception.ActionStopped` if the wipe was aborted `vdsm.storage.exception.VolumesZeroingError` if writing to storage failed. `vdsm.storage.exception.InvalidParameterException` if size is not aligned to `vdsm.storage.constants.BLOCK_SIZE`. """ if size is None: # Always aligned to LVM extent size (128MiB). size = fsutils.size(device_path) elif size % sc.BLOCK_SIZE: raise se.InvalidParameterException("size", size) log.info("Zeroing device %s (size=%d)", device_path, size) with utils.stopwatch("Zero device %s" % device_path, level=logging.INFO, log=log): zero_method = config.get('irs', 'zero_method') try: if zero_method == "blkdiscard": _zero_blkdiscard(device_path, size, task) elif zero_method == "dd": _zero_dd(device_path, size, task) else: raise exception.InvalidConfiguration( reason="Unsupported value for irs:zero_method", zero_method=zero_method) except se.StorageException as e: raise se.VolumesZeroingError("Zeroing device %s failed: %s" % (device_path, e))
def default_qcow2_compat(): value = config.get('irs', 'qcow2_compat') if value not in _QCOW2_COMPAT_SUPPORTED: raise exception.InvalidConfiguration( "Unsupported value for irs:qcow2_compat: %r" % value) return value