packages/utils/uvol/files/autopart.defaults
Daniel Golle 312594f869
uvol: add new package
uvol is a wrapper-script which allows automated handling of storage
volumes. uvol currently comes with backend support for LVM2 and UBI,
covering practically all options for storage large enough to be
managed (NAND, SPI-NAND, eMMC, SATA, NVME, virtio-blk, ...).

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2021-04-10 12:02:23 +01:00

77 lines
1.4 KiB
Bash

#!/bin/sh
. /lib/functions.sh
. /lib/upgrade/common.sh
OWRT_VOLUMES=owrt-volumes
part_fixup() {
echo "write" | sfdisk --force -q -w never $1
}
get_free_area() {
local found=
sfdisk -q -F "$1" 2>/dev/null | while read start end sectors size; do
case $start in
*"Unpartitioned"* | *"Units:"* | *"Sector"* | *"Start"* )
continue
;;
[0-9]*)
case "$size" in
*"M")
[ "${size%%M}" -lt 100 ] && continue
;;
*"G" | *"T")
;;
*"k" | *"b")
continue
;;
esac
[ "$found" ] || echo "start=$start, size=$((end - start))"
found=1
;;
esac
done
}
create_lvm_part() {
local disk=$1
local freepart
freepart="$(get_free_area $disk)"
if [ "$freepart" ]; then
echo "$freepart, type=lvm, name=$OWRT_VOLUMES" | sfdisk --force -w never -a $disk
partx -a $disk 1>/dev/null 2>/dev/null || true
return 0
else
return 1
fi
}
lvm_init() {
lvm pvcreate -f $1
lvm vgcreate "$2" $1
lvm vgs
}
autopart_init() {
local diskdev
local lvmpart
local diskserial
export_bootdevice && export_partdevice diskdev 0
[ "$diskdev" ] || return
[ -e "/sys/class/block/$diskdev/device/serial" ] && diskserial=$(cat /sys/class/block/$diskdev/device/serial)
part_fixup /dev/$diskdev
create_lvm_part /dev/$diskdev || return
lvmpart=$(get_partition_by_name $diskdev $OWRT_VOLUMES)
[ "$lvmpart" ] || return
lvm_init /dev/$lvmpart "${OWRT_VOLUMES}${diskserial:+-${diskserial:2}}"
}
autopart_init
exit 0