From: Lukas Czerner <lczerner@redhat.com>
To: zkabelac@redhat.com
Cc: Lukas Czerner <lczerner@redhat.com>,
dchinner@redhat.com, rwheeler@redhat.com, linux-lvm@redhat.com
Subject: [linux-lvm] [PATCH 11/35] fsadm: Add "remove" command
Date: Wed, 21 Sep 2011 18:45:30 +0200 [thread overview]
Message-ID: <1316623554-28975-12-git-send-email-lczerner@redhat.com> (raw)
In-Reply-To: <1316623554-28975-1-git-send-email-lczerner@redhat.com>
Remove command allows to remove unused devices from the pool (volume
group).
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
scripts/fsadm.sh | 82 ++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 62 insertions(+), 20 deletions(-)
diff --git a/scripts/fsadm.sh b/scripts/fsadm.sh
index 6617de0..4a4f625 100755
--- a/scripts/fsadm.sh
+++ b/scripts/fsadm.sh
@@ -823,11 +823,12 @@ list_filesystems() {
IFS=$NL
local c=0
for line in $(LANG=C $LVM lvs -o lv_path,lv_size,segtype --noheadings --separator ' ' --nosuffix --units k 2> /dev/null); do
- c=$((c+1))
line=$(echo $line | sed -e 's/^ *\//\//')
volume=$(echo $line | cut -d' ' -f1)
- volumes[$c]=$volume
- segtype[$c]=$(echo $line | cut -d' ' -f3)
+ [ "$volume" == "$last_volume" ] && continue
+ c=$((c+1))
+ local volumes[$c]=$volume
+ local segtype[$c]=$(echo $line | cut -d' ' -f3)
detect_fs $volume
detect_mounted
detect_fs_size
@@ -835,16 +836,17 @@ list_filesystems() {
total=$(echo $line | cut -d' ' -f2)
TOTAL=$(humanize_size ${total%%.})
fi
- total[$c]=$TOTAL
- fstype[$c]=$FSTYPE
- free[$c]=$FREE
- used[$c]=$USED
- mounted[$c]=$MOUNTED
+ local total[$c]=$TOTAL
+ local fstype[$c]=$FSTYPE
+ local free[$c]=$FREE
+ local used[$c]=$USED
+ local mounted[$c]=$MOUNTED
FSTYPE=
FREE=
USED=
TOTAL=
MOUNTED=
+ last_volume=$volume
done
IFS=$IFS_OLD
@@ -909,7 +911,7 @@ list_devices() {
c=$((c+1))
line=$(echo $line | sed -e 's/ */ /g')
_total=$(echo $line | cut -d' ' -f3)
- total[$c]=$(humanize_size ${_total%%.*})
+ local total[$c]=$(humanize_size ${_total%%.*})
VOLUME=$(echo $line | cut -d' ' -f4)
RVOLUME="/dev/$(echo $line | cut -d' ' -f4)"
line=$($GREP -e " $RVOLUME " $tmp)
@@ -921,16 +923,16 @@ list_devices() {
if [ ! -z $line ]; then
line=$(echo $line | sed -e 's/^ *\//\//')
- group[$c]=$(echo $line | cut -d' ' -f2)
+ local group[$c]=$(echo $line | cut -d' ' -f2)
_total=$(echo $line | cut -d' ' -f3)
- total[$c]=$(humanize_size ${_total%%.*})
+ local total[$c]=$(humanize_size ${_total%%.*})
_free=$(echo $line | cut -d' ' -f4)
- free[$c]=$(humanize_size ${_free%%.*})
+ local free[$c]=$(humanize_size ${_free%%.*})
_used=$(echo $line | cut -d' ' -f5)
- used[$c]=$(humanize_size ${_used%%.*})
+ local used[$c]=$(humanize_size ${_used%%.*})
fi
- volumes[$c]=$RVOLUME
- mounted[$c]=$MOUNTED
+ local volumes[$c]=$RVOLUME
+ local mounted[$c]=$MOUNTED
free=
used=
total=
@@ -991,14 +993,14 @@ list_pool() {
for line in $(LANG=C $LVM vgs -o vg_name,pv_count,vg_size,vg_free --separator ' ' --noheadings --nosuffix --units k 2> /dev/null); do
c=$((c+1))
line=$(echo $line | sed -e 's/^ *//')
- group[$c]=$(echo $line | cut -d' ' -f1)
- devices[$c]=$(echo $line | cut -d' ' -f2)
+ local group[$c]=$(echo $line | cut -d' ' -f1)
+ local devices[$c]=$(echo $line | cut -d' ' -f2)
_total=$(echo $line | cut -d' ' -f3)
_free=$(echo $line | cut -d' ' -f4)
_used=$((${_total%%.*}-${_free%%.*}))
- used[$c]=$(humanize_size ${_used%%.*})
- total[$c]=$(humanize_size ${_total%%.*})
- free[$c]=$(humanize_size ${_free%%.*})
+ local used[$c]=$(humanize_size ${_used%%.*})
+ local total[$c]=$(humanize_size ${_total%%.*})
+ local free[$c]=$(humanize_size ${_free%%.*})
done
IFS=$IFS_OLD
@@ -1122,6 +1124,45 @@ add() {
fi
}
+###############################
+# Remove devices form the group
+###############################
+remove() {
+ devices=$@
+ tmp=$(mktemp)
+ tmp2=$(mktemp)
+ nothing=1
+
+ $LVM vgs -o vg_name --separator ' ' --noheadings | sed -e 's/^ *//' > $tmp
+
+ [ "$(cat $tmp | wc -l)" == "0" ] && return
+
+ IFS=$NL
+ for vgname in $(cat $tmp); do
+ if [ -z $devices ]; then
+ $LVM vgreduce -a $vgname
+ nothing=0
+ else
+ $LVM vgs $vgname -o pv_name --separator ' ' --noheadings > $tmp2
+ IFS=$IFS_OLD
+ for dev in $devices; do
+ $GREP $dev $tmp2 &> /dev/null
+ if [ $? -eq 0 ]; then
+ $LVM vgreduce $vgname $dev
+ nothing=0
+ fi
+ done
+ IFS=$NL
+ fi
+ done
+ rm -f $tmp $tmp2
+ IFS=$IFS_OLD
+
+ if [ $nothing -eq 1 ]; then
+ warn "Nothing to do."
+ fi
+}
+
####################################
# Calclulate diff between two dates
@@ -1222,6 +1263,7 @@ do
"destroy") COMMAND=$1; shift; ARGS=$@; break ;;
"list") COMMAND=$1; shift; ARGS=$@; break ;;
"add") COMMAND=$1; shift; ARGS=$@; break ;;
+ "remove") COMMAND=$1; shift; ARGS=$@; break ;;
*) error "Wrong argument \"$1\". (see: $TOOL --help)"
esac
shift
--
1.7.4.4
next prev parent reply other threads:[~2011-09-21 16:45 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-21 16:45 [linux-lvm] [RFC][PATCH 00/35] fsadm update Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 01/35] fsadm: Add "create" command Lukas Czerner
2011-09-21 19:00 ` Stephane Chazelas
2011-09-22 9:28 ` Lukas Czerner
2011-09-22 10:01 ` Zdenek Kabelac
2011-09-22 10:27 ` Lukas Czerner
2011-09-22 10:56 ` Stephane Chazelas
2011-09-21 16:45 ` [linux-lvm] [PATCH 02/35] fsadm: Add "destroy" command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 03/35] fsadm: Add "list" command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 04/35] fsadm: Make "create" command more vg aware Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 05/35] fsadm: Teach "destroy" command to take more arguments Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 06/35] fsadm: Simple cleanup and comment update Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 07/35] fsadm: Create "add" command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 08/35] fsadm: Update "list" command for better alignment Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 09/35] fsadm: Specify number of stripes when no device is given Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 10/35] fsadm: Print type of the volume in filesystem listing Lukas Czerner
2011-09-21 16:45 ` Lukas Czerner [this message]
2011-09-22 10:06 ` [linux-lvm] [PATCH 11/35] fsadm: Add "remove" command Zdenek Kabelac
2011-09-22 10:36 ` Lukas Czerner
2011-09-22 10:43 ` Zdenek Kabelac
2011-09-22 10:52 ` Lukas Czerner
2011-09-22 11:41 ` Zdenek Kabelac
2011-09-21 16:45 ` [linux-lvm] [PATCH 12/35] fsadm: Try to avoid calling LVM in the loops Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 13/35] fsadm: Merge "destroy" and "remove" into one command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 14/35] fsadm: Allow to remove all volume groups Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 15/35] fsadm: Make all internal math in kilobytes Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 16/35] fsadm: Use warn for warnings in list command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 17/35] fsadm: Handle resize if there is no file system Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 18/35] fsadm: Fsck extN before resize only if it is not mounted Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 19/35] fsadm: Align numbers to the decimal point Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 20/35] fsadm: Add simple configuration file Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 21/35] fsadm: Use DEFAULT_POOL when creating volume group Lukas Czerner
2011-09-22 10:09 ` Zdenek Kabelac
2011-09-21 16:45 ` [linux-lvm] [PATCH 22/35] fsadm: Add LVOL_PREFIX configuration option Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 23/35] fsadm: Only use readlink if link is provided Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 24/35] fsadm: Remove unnecessary modification of PATH variable Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 25/35] fsadm: Allow to specify size without "size=" prefix in "resize" Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 26/35] fsadm: Allow to specify lv in vg/lv format Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 27/35] fsadm: error out when no size is provided in resize Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 28/35] fsadm: Umount ext2 file system prior resize Lukas Czerner
2011-09-22 10:28 ` Zdenek Kabelac
2011-09-21 16:45 ` [linux-lvm] [PATCH 29/35] lvresize: Specify --resize-fs-only when going to use fsadm resize Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 30/35] test: add helper to compute aligned lv size Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 31/35] fsadm: Add help for new commands and update man page Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 32/35] fsadm: Update authorship of the fsadm Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 33/35] test: Add test for fsadm add command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 34/35] test: Add test for fsadm create command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 35/35] test: Add test for fsadm resize command Lukas Czerner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1316623554-28975-12-git-send-email-lczerner@redhat.com \
--to=lczerner@redhat.com \
--cc=dchinner@redhat.com \
--cc=linux-lvm@redhat.com \
--cc=rwheeler@redhat.com \
--cc=zkabelac@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).