6 if [ "$cmd" = "name" ]; then
11 command -v lvm
>/dev
/null ||
return 1
14 .
/lib
/functions
/uvol.sh
15 .
/lib
/upgrade
/common.sh
16 .
/usr
/share
/libubox
/jshn.sh
19 [ "$BOOTDEV_MAJOR" ] ||
return 1
20 export_partdevice rootdev
0
21 [ "$rootdev" ] ||
return 1
33 LVM_SUPPRESS_FD_WARNINGS
=1 lvm
"$cmd" "$@"
38 lvm_cmd pvs
--reportformat json
--units b
"$@"
42 lvm_cmd vgs
--reportformat json
--units b
"$@"
46 lvm_cmd lvs
--reportformat json
--units b
"$@"
50 echo $
((vg_free_count
* vg_extent_size
))
54 echo $
((vg_extent_count
* vg_extent_size
))
59 test -e "/dev/$vg_name/ro_$1" ||
test -e "/dev/$vg_name/rw_$1"
65 local reports rep pv pvs
68 json_load
"$(pvs -o vg_name -S "pv_name
=~^
/dev
/$rootdev.
*\$
")"
71 for rep
in $reports; do
90 local reports rep vg vgs
95 json_load
"$(vgs -o vg_extent_size,vg_extent_count,vg_free_count -S "vg_name
=$vg_name")"
98 for rep
in $reports; do
104 json_get_vars vg_extent_size vg_extent_count vg_free_count
105 vg_extent_size
=${vg_extent_size%B}
121 local reports rep lv lvs
130 json_load
"$(lvs -o lv_active,lv_name,lv_full_name,lv_size,lv_path,lv_dm_path -S "lv_name
=~^
[rw
][owp
]_
$1\$
&& vg_name
=$vg_name")"
132 json_get_keys reports
133 for rep
in $reports; do
139 json_get_vars lv_active lv_name lv_full_name lv_size lv_path lv_dm_path
152 for dms
in /sys
/devices
/virtual
/block
/dm-
* ; do
153 [ "$dms" = "/sys/devices/virtual/block/dm-*" ] && break
154 read -r dm_name
< "$dms/dm/name"
155 [ $
(basename "$lv_dm_path") = "$dm_name" ] && echo "$(basename "$dms")"
161 existvol
"$1" ||
return 1
168 [ "$lv_size" ] && echo "$lv_size"
173 [ "$lv_path" ] ||
return 2
180 [ "$lv_active" = "active" ] && return 0
182 lvm_cmd lvchange
-a y
"$lv_full_name" ||
return $?
183 lvm_cmd lvchange
-k n
"$lv_full_name" ||
return $?
192 [ "$lv_path" ] ||
return 2
199 [ "$lv_active" = "active" ] ||
return 0
200 devname
="$(getdev "$1")"
201 [ "$devname" ] && /sbin
/block umount
"$devname"
202 lvm_cmd lvchange
-a n
"$lv_full_name"
203 lvm_cmd lvchange
-k y
"$lv_full_name" ||
return $?
211 [ "$lv_full_name" ] ||
return 2
212 existvol
"$1" ||
return 1
217 local mode lvmode ret
218 local volsize
=$
(($2))
219 [ "$volsize" ] ||
return 22
221 [ "$lv_size" ] && return 17
222 size_ext
=$
((volsize
/ vg_extent_size
))
223 [ $
((size_ext
* vg_extent_size
)) -lt $volsize ] && size_ext
=$
((size_ext
+ 1))
239 lvm_cmd lvcreate
-p "$lvmode" -a n
-y -W n
-Z n
-n "${mode}_$1" -l "$size_ext" "$vg_name" ||
return $?
241 if [ ! $ret -eq 0 ] ||
[ "$lvmode" = "r" ]; then
245 [ "$lv_full_name" ] ||
return 22
246 lvm_cmd lvchange
-a y
"$lv_full_name" ||
return $?
247 if [ "$lv_size" -gt $
(( 100 * 1024 * 1024 )) ]; then
248 mkfs.f2fs
-f -l "$1" "$lv_path"
250 [ $ret != 0 ] && [ $ret != 134 ] && {
251 lvm_cmd lvchange
-a n
"$lv_full_name" ||
return $?
255 mke2fs
-F -L "$1" "$lv_path" ||
{
257 lvm_cmd lvchange
-a n
"$lv_full_name" ||
return $?
261 uvol_uci_add
"$1" "/dev/$(getdev "$1")" "rw"
262 lvm_cmd lvchange
-a n
"$lv_full_name" ||
return $?
263 lvm_cmd lvrename
"$vg_name" "wp_$1" "rw_$1" ||
return $?
269 [ "$lv_full_name" ] ||
return 2
270 [ "$lv_active" = "active" ] && return 16
271 lvm_cmd lvremove
-y "$lv_full_name" ||
return $?
278 [ "$lv_full_name" ] ||
return 2
279 [ "$lv_size" -ge "$2" ] ||
return 27
282 lvm_cmd lvchange
-p rw
"$lv_full_name" ||
return $?
283 lvm_cmd lvchange
-a y
"$lv_full_name" ||
return $?
285 uvol_uci_add
"$1" "/dev/$(getdev "$1")" "ro"
286 lvm_cmd lvchange
-a n
"$lv_full_name" ||
return $?
287 lvm_cmd lvchange
-p r
"$lv_full_name" ||
return $?
288 lvm_cmd lvrename
"$lv_full_name" "${lv_full_name%%/*}/ro_$1" ||
return $?
298 local reports rep lv lvs lv_name lv_size lv_mode volname
301 json_load
"$(lvs -o lv_name,lv_size -S "lv_name
=~^
[rw
][owp
]_
$volname\$
&& vg_name
=$vg_name")"
303 json_get_keys reports
304 for rep
in $reports; do
310 json_get_vars lv_name lv_size
311 lv_mode
="${lv_name:0:2}"
312 lv_name
="${lv_name:3}"
314 echo "$lv_name $lv_mode $lv_size"
323 local reports rep lv lvs lv_name lv_dm_path lv_mode volname
325 json_load
"$(lvs -o lv_name,lv_dm_path -S "lv_name
=~^
[rw
][ow
]_.
*\$
&& vg_name
=$vg_name && lv_active
=active
")"
327 json_get_keys reports
328 for rep
in $reports; do
334 json_get_vars lv_name lv_dm_path
335 lv_mode
="${lv_name:0:2}"
336 lv_name
="${lv_name:3}"
349 echo "$vg_extent_size"
388 echo "unknown command"