blob: 4a5b57f3514425c2c81885f7b7702a18625a5aa0 (
plain) (
tree)
|
|
source "/usr/lib/utils.sh"
# Close previous connections to be able to run this script many times.
dnbd3-client --device "$SLX_DNBD3_DEVICE" --close && \
if ! systemd-preserve-process-marker dnbd3-client --host "$SLX_DNBD3_SERVERS" \
--image "${SLX_SERVER_BASE}${SLX_DNBD3_IMAGE}" --device \
"$SLX_DNBD3_DEVICE" --rid "$SLX_DNBD3_RID"
then
warn "Failed to connect $SLX_DNBD3_IMAGE from $SLX_DNBD3_SERVERS to $SLX_DNBD3_DEVICE"
emergency_shell -n "Error in $0"
return 1
fi
local nbd_device='/dev/nbd0' && \
systemd-preserve-process-marker qemu-nbd --connect="$nbd_device" \
"$SLX_DNBD3_DEVICE" --read-only && \
local read_only_partition="$(utils_create_partition_via_offset "$nbd_device" \
${SLX_SYSTEM_PARTITION_LABEL})" && \
# Make read-only partition writable.
# TODO implement persistent available indicator.
local persistent="N" # 'P' for persistent storage, 'N' for not persistent
if true; then
modprobe brd max_part=1 rd_size=524288 && \
local writable_device="/dev/ram0"
else
# Use next free loop device.
local writable_device="$(losetup -f)" && \
dd if=/dev/zero of=persistent_storage.img bs=1k count=1000 && \
losetup "$writable_device" persistent_storage.img
persistent="P"
fi
local partition_size="$(blockdev --getsz "$read_only_partition")" && \
local writable_partition_name="root" && \
local chunksize="1"
modprobe dm_snapshot
dmsetup create "$writable_partition_name" --noudevsync --table \
"0 $partition_size snapshot $read_only_partition $writable_device $persistent $chunksize"
dmsetup mknodes --noudevsync "$writable_partition_name"
|