2013-10-17 13:11:24 +04:00
#!/usr/bin/env bash
2017-06-29 11:27:56 +03:00
# Copyright (C) 2011-2017 Red Hat, Inc. All rights reserved.
2011-01-05 03:16:18 +03:00
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
2016-01-21 13:49:46 +03:00
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2011-01-05 03:16:18 +03:00
2012-03-16 16:59:43 +04:00
# get.sh: get various values from volumes
#
# USAGE:
# get pv_field PV field [pvs params]
# get vg_field VG field [vgs params]
# get lv_field LV field [lvs params]
#
# get lv_devices LV [lvs params]
2013-09-16 13:12:37 +04:00
test -z " $BASH " || set -e -o pipefail
2012-03-16 16:59:43 +04:00
2013-09-16 13:12:37 +04:00
# trims only leading prefix and suffix
2012-03-16 16:59:43 +04:00
trim_( ) {
2013-09-16 13:12:37 +04:00
rm -f debug.log # drop log, command was ok
2023-02-09 18:04:54 +03:00
local var = ${ 1 % " ${ 1 ##*[! ] } " } # remove trailing space characters
echo " ${ var # " ${ var %%[! ]* } " } " # remove leading space characters
2012-03-16 16:59:43 +04:00
}
2011-01-05 03:16:18 +03:00
pv_field( ) {
2017-06-29 11:26:28 +03:00
local r
r = $( pvs --config 'log{prefix=""}' --noheadings -o " $2 " " ${ @ : 3 } " " $1 " )
2014-06-05 15:05:36 +04:00
trim_ " $r "
2011-01-05 03:16:18 +03:00
}
vg_field( ) {
2017-06-29 11:26:28 +03:00
local r
r = $( vgs --config 'log{prefix=""}' --noheadings -o " $2 " " ${ @ : 3 } " " $1 " )
2014-06-05 15:05:36 +04:00
trim_ " $r "
2011-01-05 03:16:18 +03:00
}
lv_field( ) {
2017-06-29 11:26:28 +03:00
local r
r = $( lvs --config 'log{prefix=""}' --noheadings -o " $2 " " ${ @ : 3 } " " $1 " )
2014-06-05 15:05:36 +04:00
trim_ " $r "
2012-03-16 16:59:43 +04:00
}
2017-02-24 06:36:03 +03:00
lv_first_seg_field( ) {
2017-06-29 11:26:28 +03:00
local r
2018-02-17 13:24:32 +03:00
r = $( head -1 < <( lvs --config 'log{prefix=""}' --unbuffered --noheadings -o " $2 " " ${ @ : 3 } " " $1 " ) )
2017-02-24 06:36:03 +03:00
trim_ " $r "
}
2016-03-01 17:32:20 +03:00
lvh_field( ) {
2017-06-29 11:26:28 +03:00
local r
r = $( lvs -H --config 'log{prefix=""}' --noheadings -o " $2 " " ${ @ : 3 } " " $1 " )
2016-03-01 17:32:20 +03:00
trim_ " $r "
}
2015-08-21 23:06:00 +03:00
lva_field( ) {
2017-06-29 11:26:28 +03:00
local r
r = $( lvs -a --config 'log{prefix=""}' --noheadings -o " $2 " " ${ @ : 3 } " " $1 " )
2015-08-21 23:06:00 +03:00
trim_ " $r "
}
2012-03-16 16:59:43 +04:00
lv_devices( ) {
2013-09-16 13:12:37 +04:00
lv_field " $1 " devices -a " ${ @ : 2 } " | sed 's/([^)]*)//g; s/,/\n/g'
2011-01-05 03:16:18 +03:00
}
2013-09-16 13:18:31 +04:00
lv_field_lv_( ) {
2023-02-09 18:04:54 +03:00
lv_field " $1 " " $2 " -a --unbuffered | tr -d '[]'
2013-09-16 13:18:31 +04:00
}
lv_tree_devices_( ) {
local lv = " $1 / $2 "
2017-06-29 11:26:28 +03:00
local type
2018-02-17 13:24:32 +03:00
type = $( lv_first_seg_field " $lv " segtype -a)
2017-06-29 11:26:28 +03:00
#local orig
#orig=$(lv_field_lv_ "$lv" origin)
2013-09-16 13:18:31 +04:00
# FIXME: should we count in also origins ?
#test -z "$orig" || lv_tree_devices_ $1 $orig
case " $type " in
linear| striped)
lv_devices " $lv "
; ;
mirror| raid*)
2017-06-29 11:26:28 +03:00
local log
log = $( lv_field_lv_ " $lv " mirror_log)
2013-09-16 13:18:31 +04:00
test -z " $log " || lv_tree_devices_ " $1 " " $log "
for i in $( lv_devices " $lv " )
do lv_tree_devices_ " $1 " " $i " ; done
; ;
thin)
2017-06-29 11:27:56 +03:00
lv_tree_devices_ " $1 " " $( lv_field_lv_ " $lv " pool_lv) "
2013-09-16 13:18:31 +04:00
; ;
thin-pool)
2017-06-29 11:27:56 +03:00
lv_tree_devices_ " $1 " " $( lv_field_lv_ " $lv " data_lv) "
lv_tree_devices_ " $1 " " $( lv_field_lv_ " $lv " metadata_lv) "
2013-09-16 13:18:31 +04:00
; ;
2014-02-24 20:40:00 +04:00
cache)
2017-06-29 11:27:56 +03:00
lv_tree_devices_ " $1 " " $( lv_devices " $lv " ) "
2014-02-24 20:40:00 +04:00
; ;
cache-pool)
2017-06-29 11:27:56 +03:00
lv_tree_devices_ " $1 " " $( lv_field_lv_ " $lv " data_lv) "
lv_tree_devices_ " $1 " " $( lv_field_lv_ " $lv " metadata_lv) "
2014-02-24 20:40:00 +04:00
; ;
2013-09-16 13:18:31 +04:00
esac
}
lv_tree_devices( ) {
lv_tree_devices_ " $@ " | sort | uniq
}
2015-04-03 15:20:03 +03:00
first_extent_sector( ) {
pv_field " $@ " pe_start --units s --nosuffix
}
2013-09-16 13:12:37 +04:00
#set -x
2012-03-16 16:59:43 +04:00
unset LVM_VALGRIND
2016-05-03 22:22:34 +03:00
unset LVM_LOG_FILE_EPOCH
2011-01-05 03:16:18 +03:00
" $@ "