bcachefs-tools/mount.bcachefs.sh
Kent Overstreet 487ddeb03c Add a shell script version of mount.bcachefs
Sadly, some people are still running distributions too old to properly
support rust :( In the long term we'd like to use Rust for more of
userspace (and potentially in the kernel); this is just a stopgap
measure.
2020-08-24 23:17:17 -04:00

51 lines
844 B
Bash
Executable File

#!/bin/bash
join_by()
{
local IFS="$1"
shift
echo "$*"
}
args=$(getopt -u -o 'sfnvo:t:N:' -n 'mount.bcachefs' -- "$@")
if [ $? -ne 0 ]; then
echo 'Terminating...' >&2
exit 1
fi
read -r -a argv <<< "$args"
for i in ${!argv[@]}; do
[[ ${argv[$i]} == '--' ]] && break
done
i=$((i+1))
if [[ $((i + 2)) < ${#argv[@]} ]]; then
echo "Insufficient arguments"
exit 1
fi
UUID=${argv[$i]}
if [[ ${UUID//-/} =~ ^[[:xdigit:]]{32}$ ]]; then
PARTS=()
for part in $(tail -n +3 /proc/partitions|awk '{print $4}'); do
uuid_line=$(bcachefs show-super /dev/$part|& head -n1)
if [[ $uuid_line =~ $UUID ]]; then
PARTS+=(/dev/$part)
fi
done
if [[ ${#PARTS[@]} == 0 ]]; then
echo "uuid $UUID not found"
exit 1
fi
argv[$i]=$(join_by : "${PARTS[@]}")
fi
exec mount -i -t bcachefs ${argv[@]}