diff --git a/nova/privsep/xenapi.py b/nova/privsep/xenapi.py index 023e16f9cee1..d1e470dff525 100644 --- a/nova/privsep/xenapi.py +++ b/nova/privsep/xenapi.py @@ -24,3 +24,14 @@ import nova.privsep @nova.privsep.sys_admin_pctxt.entrypoint def xenstore_read(path): return processutils.execute('xenstore-read', path) + + +@nova.privsep.sys_admin_pctxt.entrypoint +def block_copy(src_path, dst_path, block_size, num_blocks): + processutils.execute('dd', + 'if=%s' % src_path, + 'of=%s' % dst_path, + 'bs=%d' % block_size, + 'count=%d' % num_blocks, + 'iflag=direct,sync', + 'oflag=direct,sync') diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index 71fe41aee67f..dcf680899cf2 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -2399,14 +2399,8 @@ def _copy_partition(session, src_ref, dst_ref, partition, virtual_size): _sparse_copy(src_path, dst_path, virtual_size) else: num_blocks = virtual_size / SECTOR_SIZE - utils.execute('dd', - 'if=%s' % src_path, - 'of=%s' % dst_path, - 'bs=%d' % DD_BLOCKSIZE, - 'count=%d' % num_blocks, - 'iflag=direct,sync', - 'oflag=direct,sync', - run_as_root=True) + nova.privsep.xenapi.block_copy( + src_path, dst_path, DD_BLOCKSIZE, num_blocks) def _mount_filesystem(dev_path, mount_point):