On 2019-03-11 15:10:25 -0400, Theodore Ts'o wrote:
> Hmm, that message is coming from the lvcreate command.  I'm not sure
> why it is failing.   Can you try running:
> 
>     sudo bash -vx /sbin/e2scrub /

#!/bin/bash

#  Copyright (C) 2018 Oracle.  All Rights Reserved.
#
#  Author: Darrick J. Wong <darrick.w...@oracle.com>
#
#  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.

# Automatically check a LVM-managed filesystem online.
# We use lvm snapshots to do this, which means that we can only
# check filesystems in VGs that have at least 256MB (or so) of
# free space.

snap_size_mb=256
+ snap_size_mb=256
fstrim=0
+ fstrim=0
reap=0
+ reap=0
e2fsck_opts=""
+ e2fsck_opts=
conffile="/etc/e2scrub.conf"
+ conffile=/etc/e2scrub.conf

test -f "${conffile}" && . "${conffile}"
+ test -f /etc/e2scrub.conf
+ . /etc/e2scrub.conf
# e2scrub configuration file

# e-mail destination used by e2scrub_fail when problems are found with
# the file system.
# recipient=root

# e-mail sender used by e2scrub_fail when problems are found with
# the file system.
# sender=e2sc...@host.domain.name

# Snapshots will be created to run fsck; the snapshot will be of this size.
# snap_size_mb=256

# Set this to 1 to enable fstrim for everyone.
# fstrim=0

# Arguments passed into e2fsck.
# e2fsck_opts="-vtt"

# Set this to 1 to have e2scrub_all scrub all LVs, not just the mounted ones.
# scrub_all=0

print_help() {
        echo "Usage: $0 [OPTIONS] mountpoint | device"
        echo
        echo "mountpoint must be on a LVM-managed block device"
        echo "-r: Remove e2scrub snapshot and exit, do not check anything."
        echo "-t: Run fstrim if successful."
        echo "-V: Print version information and exit."
}

print_version() {
        echo "e2scrub 1.45.0 (6-Mar-2019)"
}

exitcode() {
        ret="$1"

        # If we're being run as a service, the return code must fit the LSB
        # init script action error guidelines, which is to say that we
        # compress all errors to 1 ("generic or unspecified error", LSB 5.0
        # section 22.2) and hope the admin will scan the log for what
        # actually happened.

        # We have to sleep 2 seconds here because journald uses the pid to
        # connect our log messages to the systemd service.  This is critical
        # for capturing all the log messages if the scrub fails, because the
        # fail service uses the service name to gather log messages for the
        # error report.
        if [ -n "${SERVICE_MODE}" ]; then
                test "${ret}" -ne 0 && ret=1
                sleep 2
        fi

        exit "${ret}"
}

while getopts "rtV" opt; do
        case "${opt}" in
        "r") reap=1;;
        "t") fstrim=1;;
        "V") print_version; exitcode 0;;
        *) print_help; exitcode 2;;
        esac
done
+ getopts rtV opt
shift "$((OPTIND - 1))"
+ shift 0

arg="$1"
+ arg=/
if [ -z "${arg}" ]; then
        print_help
        exitcode 1
fi
+ '[' -z / ']'

# Find the device for a given mountpoint
dev_from_mount() {
        local mountpt="$(realpath "$1")"

        lsblk -o NAME,FSTYPE,MOUNTPOINT -p -P -n 2> /dev/null | while read 
vars; do
                eval "${vars}"
                if [ "${mountpt}" != "${MOUNTPOINT}" ]; then
                        continue
                fi
                case "${FSTYPE}" in
                ext[234])
                        echo "${NAME}"
                        return 0
                        ;;
                esac
        done
        return 1
}

# Check a device argument
dev_from_arg() {
        local dev="$1"
        local fstype="$(lsblk -o FSTYPE -n "${dev}" 2> /dev/null)"

        case "${fstype}" in
        ext[234])
                echo "${dev}"
                return 0
                ;;
        esac
        return 1
}

mnt_from_dev() {
        local dev="$1"

        if [ -n "${dev}" ]; then
                lsblk -o MOUNTPOINT -n "${dev}"
        fi
}

# Construct block device path and mountpoint from argument
if [ -b "${arg}" ]; then
        dev="$(dev_from_arg "${arg}")"
        mnt="$(mnt_from_dev "${dev}")"
else
        dev="$(dev_from_mount "${arg}")"
        mnt="${arg}"
fi
+ '[' -b / ']'
++ dev_from_mount /
+++ realpath /
++ local mountpt=/
++ lsblk -o NAME,FSTYPE,MOUNTPOINT -p -P -n
++ read vars
++ eval 'NAME="/dev/sda" FSTYPE="" MOUNTPOINT=""'
+++ NAME=/dev/sda
+++ FSTYPE=
+++ MOUNTPOINT=
++ '[' / '!=' '' ']'
++ continue
++ read vars
++ eval 'NAME="/dev/sda1" FSTYPE="ext2" MOUNTPOINT="/boot"'
+++ NAME=/dev/sda1
+++ FSTYPE=ext2
+++ MOUNTPOINT=/boot
++ '[' / '!=' /boot ']'
++ continue
++ read vars
++ eval 'NAME="/dev/sda2" FSTYPE="" MOUNTPOINT=""'
+++ NAME=/dev/sda2
+++ FSTYPE=
+++ MOUNTPOINT=
++ '[' / '!=' '' ']'
++ continue
++ read vars
++ eval 'NAME="/dev/sda5" FSTYPE="crypto_LUKS" MOUNTPOINT=""'
+++ NAME=/dev/sda5
+++ FSTYPE=crypto_LUKS
+++ MOUNTPOINT=
++ '[' / '!=' '' ']'
++ continue
++ read vars
++ eval 'NAME="/dev/sr0" FSTYPE="" MOUNTPOINT=""'
+++ NAME=/dev/sr0
+++ FSTYPE=
+++ MOUNTPOINT=
++ '[' / '!=' '' ']'
++ continue
++ read vars
++ eval 'NAME="/dev/mapper/sda5_crypt" FSTYPE="LVM2_member" MOUNTPOINT=""'
+++ NAME=/dev/mapper/sda5_crypt
+++ FSTYPE=LVM2_member
+++ MOUNTPOINT=
++ '[' / '!=' '' ']'
++ continue
++ read vars
++ eval 'NAME="/dev/mapper/zira--vg-root" FSTYPE="ext4" MOUNTPOINT="/"'
+++ NAME=/dev/mapper/zira--vg-root
+++ FSTYPE=ext4
+++ MOUNTPOINT=/
++ '[' / '!=' / ']'
++ case "${FSTYPE}" in
++ echo /dev/mapper/zira--vg-root
++ return 0
++ return 1
+ dev=/dev/mapper/zira--vg-root
+ mnt=/
if [ ! -e "${dev}" ]; then
        echo "${arg}: Not an ext[234] filesystem."
        print_help
        exitcode 16
fi
+ '[' '!' -e /dev/mapper/zira--vg-root ']'

# Make sure this is an LVM device we can snapshot
lvm_vars="$(lvs --nameprefixes -o name,vgname,lv_role --noheadings "${dev}" 2> 
/dev/null)"
++ lvs --nameprefixes -o name,vgname,lv_role --noheadings 
/dev/mapper/zira--vg-root
+ lvm_vars='  LVM2_LV_NAME='\''root'\'' LVM2_VG_NAME='\''zira-vg'\'' 
LVM2_LV_ROLE='\''public'\'''
eval "${lvm_vars}"
+ eval '  LVM2_LV_NAME='\''root'\'' LVM2_VG_NAME='\''zira-vg'\'' 
LVM2_LV_ROLE='\''public'\'''
  LVM2_LV_NAME='root' LVM2_VG_NAME='zira-vg' LVM2_LV_ROLE='public'
++ LVM2_LV_NAME=root
++ LVM2_VG_NAME=zira-vg
++ LVM2_LV_ROLE=public
if [ -z "${LVM2_VG_NAME}" ] || [ -z "${LVM2_LV_NAME}" ] ||
   echo "${LVM2_LV_ROLE}" | grep -q "snapshot"; then
        echo "${arg}: Not connnected to a LVM logical volume."
        print_help
        exitcode 16
fi
+ '[' -z zira-vg ']'
+ '[' -z root ']'
+ echo public
+ grep -q snapshot
start_time="$(date +'%Y%m%d%H%M%S')"
++ date +%Y%m%d%H%M%S
+ start_time=20190312092731
snap="${LVM2_LV_NAME}.e2scrub"
+ snap=root.e2scrub
snap_dev="/dev/${LVM2_VG_NAME}/${snap}"
+ snap_dev=/dev/zira-vg/root.e2scrub

teardown() {
        # Remove and wait for removal to succeed.
        ${DBG} lvremove -f "${LVM2_VG_NAME}/${snap}" 3>&-
        while [ -e "${snap_dev}" ] && [ "$?" -eq "5" ]; do
                sleep 0.5
                ${DBG} lvremove -f "${LVM2_VG_NAME}/${snap}" 3>&-
        done
}

check() {
        # First we recover the journal, then we see if e2fsck tries any
        # non-optimization repairs.  If either of these two returns a
        # non-zero status (errors fixed or remaining) then this fs is bad.
        E2FSCK_FIXES_ONLY=1
        export E2FSCK_FIXES_ONLY
        ${DBG} "/sbin/e2fsck" -E journal_only -p ${e2fsck_opts} "${snap_dev}" 
|| return $?
        ${DBG} "/sbin/e2fsck" -f -y ${e2fsck_opts} "${snap_dev}"
}

mark_clean() {
        ${DBG} "/sbin/tune2fs" -C 0 -T "${start_time}" "${dev}"
}

mark_corrupt() {
        ${DBG} "/sbin/tune2fs" -E force_fsck "${dev}"
}

setup() {
        # Try to remove snapshot for 30s, bail out if we can't remove it.
        lveremove_deadline="$(( $(date "+%s") + 30))"
        ${DBG} lvremove -f "${LVM2_VG_NAME}/${snap}" 3>&- 2>/dev/null
        while [ -e "${snap_dev}" ] && [ "$?" -eq "5" ] &&
              [ "$(date "+%s")" -lt "${lvremove_deadline}" ]; do
                sleep 0.5
                ${DBG} lvremove -f "${LVM2_VG_NAME}/${snap}" 3>&-
        done
        if [ -e "${snap_dev}" ]; then
                echo "${arg}: e2scrub snapshot is in use, cannot check!"
                return 1
        fi
        # Create the snapshot, wait for device to appear.
        ${DBG} lvcreate -s -L "${snap_size_mb}m" -n "${snap}" 
"${LVM2_VG_NAME}/${LVM2_LV_NAME}" 3>&-
        if [ $? -ne 0 ]; then
                echo "${arg}: e2scrub snapshot FAILED, will not check!"
                return 1
        fi
        ${DBG} udevadm settle 2> /dev/null
        return 0
}

if [ "${reap}" -gt 0 ]; then
        if [ -e "${snap_dev}" ]; then
                teardown 2> /dev/null
        fi
        exit 0
fi
+ '[' 0 -gt 0 ']'
if ! setup; then
        exitcode 8
fi
+ setup
++ date +%s
+ lveremove_deadline=1552379281
+ lvremove -f zira-vg/root.e2scrub
+ '[' -e /dev/zira-vg/root.e2scrub ']'
+ '[' -e /dev/zira-vg/root.e2scrub ']'
+ lvcreate -s -L 256m -n root.e2scrub zira-vg/root
  Volume group "zira-vg" has insufficient free space (0 extents): 64 required.
+ '[' 5 -ne 0 ']'
+ echo '/: e2scrub snapshot FAILED, will not check!'
/: e2scrub snapshot FAILED, will not check!
+ return 1
+ exitcode 8
+ ret=8
+ '[' -n '' ']'
+ exit 8

> as well as sending me the output of "sudo lvs"

  LV     VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync 
Convert
  root   zira-vg -wi-ao---- 457.38g                                             
       
  swap_1 zira-vg -wi-ao----  19.31g                                             
       

-- 
Vincent Lefèvre <vinc...@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

Reply via email to