4 .
/lib
/upgrade
/common.sh
5 .
/usr
/share
/libubox
/jshn.sh
7 OWRT_VOLUMES
=owrt-volumes
10 get_partition_by_name_gpt
() {
12 local part parts node name
13 json_load
"$(sfdisk -J "/dev
/$dev" 2>/dev/null)"
14 json_select
"partitiontable" ||
return
15 json_select
"partitions" ||
return
17 for part
in $parts; do
19 json_get_vars node name
20 if [ "$2" = "$name" ]; then
29 echo "write" | sfdisk
--force -q -w never
"$1"
34 sfdisk
-q -F "$1" 2>/dev
/null |
while read -r start end sectors size
; do
36 *"Unpartitioned"* |
*"Units:"* |
*"Sector"* |
*"Start"* )
42 [ "${size%%M}" -lt 100 ] && continue
50 [ "$found" ] ||
echo "start=$start, size=$((end - start))"
61 freepart
="$(get_free_area "$disk")"
62 if [ "$freepart" ]; then
63 echo "$freepart, type=lvm, name=$OWRT_VOLUMES" | sfdisk
--force -w never
-a "$disk"
64 partx
-a "$disk" 1>/dev
/null
2>/dev
/null || true
73 lvm vgcreate
"$2" "$1"
80 local diskserial diskhash
82 export_bootdevice
&& export_partdevice diskdev
0
84 [ "$diskdev" ] ||
return
86 [ -e "/sys/class/block/$diskdev/device/serial" ] && diskserial
="$(cat "/sys
/class
/block
/$diskdev/device
/serial
")"
87 [ -e "/sys/class/block/$diskdev/device/cid" ] && diskserial
="$diskserial$(cat "/sys
/class
/block
/$diskdev/device
/cid
")"
88 [ "$diskserial" ] || diskserial
="$(cat /proc/sys/kernel/random/uuid)"
89 diskhash
="$(echo "$diskserial" | sha256sum | cut -d' ' -f1)"
90 part_fixup
"/dev/$diskdev"
91 create_lvm_part
"/dev/$diskdev" ||
return
92 lvmpart
="$(get_partition_by_name_gpt "$diskdev" "$OWRT_VOLUMES")"
94 [ "$lvmpart" ] ||
return
95 lvm_init
"$lvmpart" "${OWRT_VOLUMES}-${diskhash:0:16}"