summaryrefslogtreecommitdiffstats
path: root/modules.d/slx-dmsetup
diff options
context:
space:
mode:
authorJonathan Bauer2020-05-25 12:40:20 +0200
committerJonathan Bauer2020-05-25 12:40:20 +0200
commit58c7c0e9bd953d2f1653b25fd5ba330cd4e87f32 (patch)
tree67de344524cf673ee8871cb1fb3e071728cc6594 /modules.d/slx-dmsetup
parentMerge branch 'nobash-merge' into downloader-nobash-merge (diff)
downloadsystemd-init-58c7c0e9bd953d2f1653b25fd5ba330cd4e87f32.tar.gz
systemd-init-58c7c0e9bd953d2f1653b25fd5ba330cd4e87f32.tar.xz
systemd-init-58c7c0e9bd953d2f1653b25fd5ba330cd4e87f32.zip
[slx-dmsetup] more work towards persistent thin pool
Diffstat (limited to 'modules.d/slx-dmsetup')
-rwxr-xr-xmodules.d/slx-dmsetup/scripts/dmsetup-slx-device26
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