OpenStack Block Storage (Cinder)
Go to file
whoami-rajat 8d7e292bcd Skip sparse copy during volume reimage
When rebuilding a volume backed instance, while copying the new
image to the existing volume, we preserve sparseness.
This could be problematic since we don't write the zero blocks of
the new image and the data in the old image can still persist
leading to a data leak scenario.

To prevent this, we are using `-S 0`[1][2] option with the `qemu-img convert`
command to write all the zero bytes into the volume.

In the testing done, this doesn't seem to be a problem with known 'raw'
images but good to handle the case anyway.

Following is the testing performed with 3 images:

1. CIRROS QCOW2 to RAW
======================

Volume size: 1 GiB
Image size (raw): 112 MiB

CREATE VOLUME FROM IMAGE (without -S 0)

LVS (10.94% allocated)
  volume-91ea43ef-684c-402f-896e-63e45e5f4fff stack-volumes-lvmdriver-1 Vwi-a-tz-- 1.00g stack-volumes-lvmdriver-1-pool 10.94

REBUILD (with -S 0)

LVS (10.94% allocated)
  volume-91ea43ef-684c-402f-896e-63e45e5f4fff stack-volumes-lvmdriver-1 Vwi-aotz-- 1.00g stack-volumes-lvmdriver-1-pool 10.94

Conclusion:
Same space is consumed on the disk with and without preserving sparseness.

2. DEBIAN QCOW2 to RAW
======================

Volume size: 3 GiB
Image size (raw): 2 GiB

CREATE VOLUME FROM IMAGE (without -S 0)

LVS (66.67% allocated)
  volume-edc42b6a-df5d-420e-85d3-b3e52bcb735e stack-volumes-lvmdriver-1 Vwi-a-tz-- 3.00g stack-volumes-lvmdriver-1-pool 66.67

REBUILD (with -S 0)

LVS (66.67% allocated)
  volume-edc42b6a-df5d-420e-85d3-b3e52bcb735e stack-volumes-lvmdriver-1 Vwi-aotz-- 3.00g stack-volumes-lvmdriver-1-pool 66.67

Conclusion:
Same space is consumed on the disk with and without preserving sparseness.

3. FEDORA QCOW2 TO RAW
======================

CREATE VOLUME FROM IMAGE (without -S 0)

Volume size: 6 GiB
Image size (raw): 5 GiB

LVS (83.33% allocated)
  volume-efa1a227-a30d-4385-867a-db22a3e80ad7 stack-volumes-lvmdriver-1 Vwi-a-tz-- 6.00g stack-volumes-lvmdriver-1-pool 83.33

REBUILD (with -S 0)

LVS (83.33% allocated)
  volume-efa1a227-a30d-4385-867a-db22a3e80ad7 stack-volumes-lvmdriver-1 Vwi-aotz-- 6.00g stack-volumes-lvmdriver-1-pool 83.33

Conclusion:
Same space is consumed on the disk with and without preserving sparseness.

Another testing was done to check if the `-S 0` option actually
works in OpenStack setup.
Note that we are converting qcow2 to qcow2 image which won't
happen in a real world deployment and only for test purposes.

DEBIAN QCOW2 TO QCOW2
=====================

CREATE VOLUME FROM IMAGE (without -S 0)

LVS (52.61% allocated)
  volume-de581f84-e722-4f4a-94fb-10f767069f50 stack-volumes-lvmdriver-1 Vwi-a-tz-- 3.00g stack-volumes-lvmdriver-1-pool 52.61

REBUILD (with -S 0)

LVS (66.68% allocated)
  volume-de581f84-e722-4f4a-94fb-10f767069f50 stack-volumes-lvmdriver-1 Vwi-aotz-- 3.00g stack-volumes-lvmdriver-1-pool 66.68

Conclusion:
We can see that the space allocation increased hence we are not preserving sparseness when using the -S 0 option.

[1] https://qemu-project.gitlab.io/qemu/tools/qemu-img.html#cmdoption-qemu-img-common-opts-S
[2] abf635ddfe/qemu-img.c (L182-L186)

Closes-Bug: #2045431

Change-Id: I5be7eaba68a5b8e1c43f0d95486b5c79c14e1b95
(cherry picked from commit 1a8ea0eac4)
(cherry picked from commit 85857a19ab)
2024-02-13 05:31:06 +00:00
api-ref/source Reject unsafe delete attachment calls 2023-05-10 19:52:39 +02:00
cinder Skip sparse copy during volume reimage 2024-02-13 05:31:06 +00:00
doc Reject unsafe delete attachment calls 2023-05-10 19:52:39 +02:00
etc/cinder Add Cinder NFS driver for Dell PowerStore 2022-07-28 01:27:22 -07:00
playbooks Handle the case when tempest fails 2022-05-03 17:22:27 +02:00
rally-jobs Remove Block Storage API v2 2021-06-04 17:21:28 -04:00
releasenotes Skip sparse copy during volume reimage 2024-02-13 05:31:06 +00:00
roles Native multibackend-matrix Zuul v3 job 2021-09-08 01:05:44 +02:00
tools Merge "Support os-brick specific lock_path" 2022-09-10 00:04:36 +00:00
.coveragerc Update .coveragerc after the removal of openstack directory 2016-10-17 19:09:37 +05:30
.gitignore db: Enable auto-generation of database migrations 2022-02-20 19:06:01 +00:00
.gitreview Update .gitreview for stable/2023.1 2023-03-08 12:43:18 +00:00
.pylintrc Pylint: add nvmet to ignored-modules 2023-01-20 10:28:08 -05:00
.stestr.conf Add .stestr.conf configuration 2017-10-10 00:46:42 +00:00
.zuul.yaml Merge "Ceph minimum client on cinder-plugin-ceph-tempest job enable" 2023-02-17 22:12:48 +00:00
bindep.txt Add libcgroup related packages in bindep.txt 2021-06-15 00:54:55 +00:00
CONTRIBUTING.rst Ussuri contrib docs community goal 2020-03-05 14:11:48 -05:00
driver-requirements.txt Add install docs for LINSTOR driver dependencies 2022-12-15 09:40:06 +01:00
HACKING.rst Use LOG.warning instead of deprecated LOG.warn 2022-02-09 08:29:02 +09:00
LICENSE Initial fork out of Nova. 2012-05-03 10:48:26 -07:00
mypy-files.txt Merge "mypy: cmd/manage.py" 2022-11-18 17:00:55 +00:00
README.rst Merge "Refactor README links" 2020-01-22 11:44:36 +00:00
reno.yaml Update release note info 2021-04-16 11:11:41 -04:00
requirements.txt Merge "Require tooz>=2.8.0" 2023-02-13 05:14:22 +00:00
setup.cfg Add Python 3.10 to setup.cfg metadata 2023-03-16 03:07:15 +00:00
setup.py Cleanup py27 support 2020-04-17 14:47:10 +02:00
test-requirements.txt Update hacking to 5.0 series 2023-02-10 11:46:57 -05:00
tox.ini Update TOX_CONSTRAINTS_FILE for stable/2023.1 2023-03-08 12:43:21 +00:00

OpenStack Cinder

image

OpenStack Cinder is a storage service for an open cloud computing service.

You can learn more about Cinder at:

Getting Started

If you'd like to run from the master branch, you can clone the git repo:

git clone https://opendev.org/openstack/cinder

If you'd like to contribute, please see the information in CONTRIBUTING.rst

You can raise bugs on Launchpad

Python client

Python Cinderclient