#!/bin/sh
|
|
|
|
# uvol prototype
|
|
# future development roadmap (aka. to-do):
|
|
# * re-implement in C (use libubox, execve lvm/ubi*)
|
|
# * hash to validate volume while writing
|
|
# * add atomic batch processing for use by container/package manager
|
|
|
|
if [ -z "$1" ]; then cat <<EOF
|
|
uvol storage volume manager
|
|
|
|
syntax: uvol command ...
|
|
|
|
commands:
|
|
boot get active volumes ready (called on boot)
|
|
free show number of bytes available
|
|
total show total number of bytes
|
|
align show sector size in bytes
|
|
list [volname] list volumes
|
|
create volname size type create new volume
|
|
size: in bytes
|
|
type: 'ro' or 'rw'
|
|
remove volname delete volume
|
|
device volname show block device for mounting
|
|
size volname show size of volume
|
|
up volname get volume ready for mounting
|
|
down volname take volume down after unmounting
|
|
status volname return status of volume
|
|
return code: 0 - volume is ready for use
|
|
1 - volume is not ready for use
|
|
2 - volume doesn'y exist
|
|
write volname size write to volume from stdin, size in bytes
|
|
EOF
|
|
return 22
|
|
fi
|
|
|
|
uvol_backend=
|
|
backends_tried=
|
|
|
|
for backend in /usr/libexec/uvol/*.sh; do
|
|
total=$($backend total)
|
|
backends_tried="$backends_tried $($backend name)"
|
|
[ "$total" ] && uvol_backend=$backend
|
|
done
|
|
|
|
if [ -z "$uvol_backend" ]; then
|
|
echo "No backend available. (tried:$backends_tried)"
|
|
echo "To setup devices with block storage install 'autopart'."
|
|
return 2
|
|
fi
|
|
|
|
flock -x /tmp/run/uvol.lock "$uvol_backend" "$@"
|