On Thu, Mar 08, 2018 at 12:13:34PM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > Create an e2scrub_all command to find all ext* filesystems > and run an online scrub against them all. Looks good, although the man page is again very light on details. I'd rather use the same man page as for e2scrub with added paragraph that this is doing it on all ext[234] fs on lvm that can find in the system (regardless whether it's mounted or not). Thanks! -Lukas > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- > scrub/Makefile.in | 9 ++++++-- > scrub/e2scrub_all.8.in | 18 ++++++++++++++++ > scrub/e2scrub_all.in | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 79 insertions(+), 2 deletions(-) > create mode 100644 scrub/e2scrub_all.8.in > create mode 100644 scrub/e2scrub_all.in > > > diff --git a/scrub/Makefile.in b/scrub/Makefile.in > index a8bb06b..1744941 100644 > --- a/scrub/Makefile.in > +++ b/scrub/Makefile.in > @@ -11,8 +11,8 @@ INSTALL = @INSTALL@ > > @MCONFIG@ > > -PROGS= e2scrub > -MANPAGES= e2scrub.8 > +PROGS= e2scrub e2scrub_all > +MANPAGES= e2scrub.8 e2scrub_all.8 > CONFFILES= e2scrub.conf > > ifeq ($(HAVE_UDEV),yes) > @@ -29,6 +29,11 @@ e2scrub: $(DEP_SUBSTITUTE) e2scrub.in > $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2scrub.in $@ > $(Q) chmod a+x $@ > > +e2scrub_all: e2scrub_all.in > + $(E) " SUBST $@" > + $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2scrub_all.in $@ > + $(Q) chmod a+x $@ > + > %.8: %.8.in $(DEP_SUBSTITUTE) > $(E) " SUBST $@" > $(Q) $(SUBSTITUTE_UPTIME) $< $@ > diff --git a/scrub/e2scrub_all.8.in b/scrub/e2scrub_all.8.in > new file mode 100644 > index 0000000..79c9a05 > --- /dev/null > +++ b/scrub/e2scrub_all.8.in > @@ -0,0 +1,18 @@ > +.TH E2SCRUB 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@" > +.SH NAME > +e2scrub_all - Check all mounted ext[2-4] LVM file systems for errors. > +.SH SYNOPSYS > +.B > +e2scrub_all [OPTION] > +.SH DESCRIPTION > +Searches the system for all LVM volumes containing an ext2, ext3, or > +ext4 file system, and checks them all for errors. > +If the file system has no errors, it will be fstrim'd. > +.SH OPTIONS > +.TP > +\fB-V\fR > +Print version information and exit. > +.SH AUTHOR > +Darrick J. Wong <darrick.wong@xxxxxxxxxx> > +.SH COPYRIGHT > +Copyright ©2018 Darrick J. Wong. License is GPLv2+. <http://www.gnu.org/licenses/gpl-2.0.html> > diff --git a/scrub/e2scrub_all.in b/scrub/e2scrub_all.in > new file mode 100644 > index 0000000..414a519 > --- /dev/null > +++ b/scrub/e2scrub_all.in > @@ -0,0 +1,54 @@ > +#!/bin/bash > + > +# Copyright (C) 2018 Oracle. All Rights Reserved. > +# > +# Author: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License > +# as published by the Free Software Foundation; either version 2 > +# of the License, or (at your option) any later version. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. > + > +# Check all ext[234] filesystems mounted on LVM > +types="ext2,ext3,ext4" > + > +print_help() { > + echo "Usage: $0" > +} > + > +print_version() { > + echo "e2scrub_all @E2FSPROGS_VERSION@ (@E2FSPROGS_DATE@)" > +} > + > +while getopts "V" opt; do > + case "${opt}" in > + "V") print_version; exit 0;; > + *) print_help; exit 2;; > + esac > +done > +shift "$((OPTIND - 1))" > + > +# Scrub any fs on lvm by creating a snapshot and fscking that. > +lvs -o vg_name,lv_name,lv_role --noheadings 2> /dev/null | while read vg lv role extra; do > + # parsing error? > + test -n "${extra}" && continue > + # Skip snapshots > + echo "${role}" | grep -q "snapshot" && continue > + > + dev="/dev/${vg}/${lv}" > + # Skip non-ext[234] > + blkid -p -n "${types}" "${dev}" > /dev/null 2>&1 || continue > + > + ${DBG} "@root_sbindir@/e2scrub" "${dev}" > +done > + > +exit 0 >