diff options
author | Jonathan Bauer | 2020-05-25 12:40:20 +0200 |
---|---|---|
committer | Jonathan Bauer | 2020-05-25 12:40:20 +0200 |
commit | 58c7c0e9bd953d2f1653b25fd5ba330cd4e87f32 (patch) | |
tree | 67de344524cf673ee8871cb1fb3e071728cc6594 | |
parent | Merge branch 'nobash-merge' into downloader-nobash-merge (diff) | |
download | systemd-init-58c7c0e9bd953d2f1653b25fd5ba330cd4e87f32.tar.gz systemd-init-58c7c0e9bd953d2f1653b25fd5ba330cd4e87f32.tar.xz systemd-init-58c7c0e9bd953d2f1653b25fd5ba330cd4e87f32.zip |
[slx-dmsetup] more work towards persistent thin pool
-rwxr-xr-x | modules.d/slx-dmsetup/scripts/dmsetup-slx-device | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/modules.d/slx-dmsetup/scripts/dmsetup-slx-device b/modules.d/slx-dmsetup/scripts/dmsetup-slx-device index 6ee810c4..56ea3172 100755 --- a/modules.d/slx-dmsetup/scripts/dmsetup-slx-device +++ b/modules.d/slx-dmsetup/scripts/dmsetup-slx-device @@ -356,7 +356,6 @@ writable_device_size="$scratch_device_size" ### ## THIN-PROVISIONING ### -declare -rg pool_metadata_dev="/dev/mapper/pool-metadata" declare -rg pool_data_dev="/dev/mapper/pool-data" declare -rg pool_dev="/dev/mapper/pool" create_pool() { @@ -371,39 +370,36 @@ create_pool() { [ "$metadata_dev_size" -lt 4096 ] && metadata_dev_size="4096" # TODO handle the exotic case of a too large metadata device to fit within RAM. [ "$metadata_dev_size" -gt 33554432 ] && metadata_dev_size="33554432" - # TODO handle persistent metadata device on disk + local writable_device_offset=0 local metadata_dev= - local metadata_volatile="yes" - if [ -z "$metadata_volatile" ]; then + local metadata_persistent= + if [ -n "$metadata_persistent" ]; then # create persistent slice of the writable device for the pool metadata - if ! dmsetup_create_noudevsync "metadata" \ - "0 $metadata_dev_size linear $writable_device 0"; then + if ! dmsetup_create_noudevsync "pool-metadata" \ + "0 $metadata_dev_size linear $writable_device $writable_device_offset"; then echo "$0: Failed to create linear device for pool metadata device." else - metadata_dev="/dev/mapper/metadata" + writable_device_offset="$metadata_dev_size" writable_device_size=$(( $writable_device_size - $metadata_dev_size )) + declare -r metadata_dev="/dev/mapper/pool-metadata" + # TODO configurable wipe: dd if=/dev/zero of="$metadata_dev" count=1 bs=4096 fi fi if [ -z "$metadata_dev" ]; then # create RAMdisk in /run for metadata device metadata_dev="$(mktemp -p /run/openslx .pool-metadata.XXX)" dd of="$metadata_dev" bs=512 seek="$metadata_dev_size" &> /dev/null - metadata_dev="$(losetup --show --find $metadata_dev)" - fi - if ! dmsetup_create_noudevsync "${pool_metadata_dev##*/}" \ - "0 $metadata_dev_size linear $metadata_dev 0"; then - echo "$0: Failed to create pool metadata device on '$writable_device'." - return 1 + declare -r metadata_dev="$(losetup --show --find $metadata_dev)" fi if ! dmsetup_create_noudevsync "${pool_data_dev##*/}" \ - "0 $writable_device_size linear $writable_device 0"; then + "0 $writable_device_size linear $writable_device $writable_device_offset"; then echo "$0: Failed to create pool data device on '$writable_device'." return 1 fi low_water_mark=32 if ! dmsetup_create_noudevsync "${pool_dev##*/}" \ - "0 $writable_device_size thin-pool $pool_metadata_dev $pool_data_dev $data_block_size $low_water_mark"; then + "0 $writable_device_size thin-pool $metadata_dev $pool_data_dev $data_block_size $low_water_mark"; then echo "$0: Failed to create thin-pool device on '$writable_device'." return 1 fi |