#!/bin/bash # Copyright (C) 2018 Oracle. All Rights Reserved. # # Author: Darrick J. Wong <darrick.wong@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. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin if (( $EUID != 0 )); then echo "e2scrub_all must be run as root" exit 1 fi periodic_e2scrub=0 scrub_all=0 snap_size_mb=256 reap=0 conffile="/etc/e2scrub.conf" test -f "${conffile}" && . "${conffile}" scrub_args="" print_help() { echo "Usage: $0 [OPTIONS]" echo " -n: Show what commands e2scrub_all would execute." echo " -r: Remove e2scrub snapshots." echo " -A: Scrub all ext[234] filesystems even if not mounted." echo " -V: Print version information and exit." } print_version() { echo "e2scrub_all 1.46.5 (30-Dec-2021)" } 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. if [ -n "${SERVICE_MODE}" -a "${ret}" -ne 0 ]; then test "${ret}" -ne 0 && ret=1 fi exit "${ret}" } while getopts "nrAV" opt; do case "${opt}" in "n") DBG="echo Would execute: " ;; "r") scrub_args="${scrub_args} -r"; reap=1;; "A") scrub_all=1;; "V") print_version; exitcode 0;; *) print_help; exitcode 2;; esac done shift "$((OPTIND - 1))" # If we're in service mode and the service is not enabled via config file... if [ -n "${SERVICE_MODE}" -a "${periodic_e2scrub}" -ne 1 ]; then # ...don't start e2scrub processes. if [ "${reap}" -eq 0 ]; then exitcode 0 fi # ...and if we don't see any leftover e2scrub snapshots, don't # run the reaping process either, because lvs can be slow. if ! readlink -q -s -e /dev/mapper/*.e2scrub* > /dev/null; then exitcode 0 fi fi # close file descriptor 3 (from cron) since it causes lvm to kvetch exec 3<&- # If some prerequisite packages are not installed, exit with a code # indicating success to avoid spamming the sysadmin with fail messages # when e2scrub_all is run out of cron or a systemd timer. if ! type mapfile >& /dev/null ; then test -n "${SERVICE_MODE}" && exitcode 0 echo "e2scrub_all: can't find mapfile --- is bash 4.xx installed?" exitcode 1 fi if ! type lsblk >& /dev/null ; then test -n "${SERVICE_MODE}" && exitcode 0 echo "e2scrub_all: can't find lsblk --- is util-linux installed?" exitcode 1 fi if ! type lvcreate >& /dev/null ; then test -n "${SERVICE_MODE}" && exitcode 0 echo "e2scrub_all: can't find lvcreate --- is lvm2 installed?" exitcode 1 fi # Find scrub targets, make sure we only do this once. ls_scan_targets() { local devices=$(lvs -o lv_path --noheadings -S "lv_active=active,lv_role=public,lv_role!=snapshot,vg_free>=${snap_size_mb}") if [ -z "$devices" ]; then return 0; fi lsblk -o NAME,MOUNTPOINT,FSTYPE,TYPE -P -n -p $devices | \ grep FSTYPE=\"ext\[234\]\" | grep TYPE=\"lvm\" | \ while read vars ; do eval "${vars}" if [ "${scrub_all}" -eq 1 ] || [ -n "${MOUNTPOINT}" ]; then echo ${MOUNTPOINT:-${NAME}} fi done } # Find leftover scrub snapshots ls_reap_targets() { lvs -o lv_path -S lv_role=snapshot -S lv_name=~\(e2scrub$\) \ --noheadings | sed -e 's/.e2scrub$//' } # Figure out what we're targeting ls_targets() { if [ "${reap}" -eq 1 ]; then ls_reap_targets else ls_scan_targets fi } # systemd doesn't know to do path escaping on the instance variable we pass # to the e2scrub service, which breaks things if there is a dash in the path # name. Therefore, do the path escaping ourselves if needed. # # systemd path escaping also drops the initial slash so we add that back in so # that log messages from the service units preserve the full path and users can # look up log messages using full paths. However, for "/" the escaping rules # do /not/ drop the initial slash, so we have to special-case that here. escape_path_for_systemd() { local path="$1" if [ "${path}" != "/" ]; then echo "-$(systemd-escape --path "${path}")" else echo "-" fi } # Scrub any mounted fs on lvm by creating a snapshot and fscking that. mapfile -t targets < <(ls_targets) for tgt in "${targets[@]}"; do # If we're not reaping and systemd is present, try invoking the # systemd service. if [ "${reap}" -ne 1 ] && type systemctl > /dev/null 2>&1; then tgt_esc="$(escape_path_for_systemd "${tgt}")" ${DBG} systemctl start "e2scrub@${tgt_esc}" 2> /dev/null res=$? if [ "${res}" -eq 0 ] || [ "${res}" -eq 1 ]; then continue; fi fi # Otherwise use direct invocation ${DBG} "/sbin/e2scrub" ${scrub_args} "${tgt}" done exitcode 0
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
aa-remove-unknown | File | 3 KB | 0755 |
|
aa-status | File | 62.62 KB | 0755 |
|
aa-teardown | File | 137 B | 0755 |
|
add-shell | File | 1.03 KB | 0755 |
|
addgroup | File | 37.35 KB | 0755 |
|
adduser | File | 37.35 KB | 0755 |
|
agetty | File | 55.56 KB | 0755 |
|
apparmor_parser | File | 1.48 MB | 0755 |
|
apparmor_status | File | 62.62 KB | 0755 |
|
arpd | File | 26.33 KB | 0755 |
|
arptables | File | 219.04 KB | 0755 |
|
arptables-nft | File | 219.04 KB | 0755 |
|
arptables-nft-restore | File | 219.04 KB | 0755 |
|
arptables-nft-save | File | 219.04 KB | 0755 |
|
arptables-restore | File | 219.04 KB | 0755 |
|
arptables-save | File | 219.04 KB | 0755 |
|
badblocks | File | 34.32 KB | 0755 |
|
blkdeactivate | File | 15.97 KB | 0755 |
|
blkdiscard | File | 22.38 KB | 0755 |
|
blkid | File | 50.41 KB | 0755 |
|
blkzone | File | 34.38 KB | 0755 |
|
blockdev | File | 30.38 KB | 0755 |
|
bridge | File | 92.49 KB | 0755 |
|
capsh | File | 30.3 KB | 0755 |
|
cfdisk | File | 94.73 KB | 0755 |
|
chcpu | File | 30.38 KB | 0755 |
|
chgpasswd | File | 58.13 KB | 0755 |
|
chmem | File | 34.38 KB | 0755 |
|
chpasswd | File | 54.16 KB | 0755 |
|
chroot | File | 38.51 KB | 0755 |
|
cpgr | File | 48.29 KB | 0755 |
|
cppw | File | 48.29 KB | 0755 |
|
cryptdisks_start | File | 1.51 KB | 0755 |
|
cryptdisks_stop | File | 844 B | 0755 |
|
cryptsetup | File | 169.92 KB | 0755 |
|
cryptsetup-reencrypt | File | 90.38 KB | 0755 |
|
cryptsetup-ssh | File | 23.53 KB | 0755 |
|
ctrlaltdel | File | 14.38 KB | 0755 |
|
dcb | File | 80.52 KB | 0755 |
|
debugfs | File | 229.8 KB | 0755 |
|
delgroup | File | 16.11 KB | 0755 |
|
deluser | File | 16.11 KB | 0755 |
|
depmod | File | 170.34 KB | 0755 |
|
devlink | File | 142.86 KB | 0755 |
|
dhclient | File | 442.66 KB | 0755 |
|
dhclient-script | File | 15.92 KB | 0755 |
|
dmsetup | File | 171.01 KB | 0755 |
|
dmstats | File | 171.01 KB | 0755 |
|
dosfsck | File | 82.38 KB | 0755 |
|
dosfslabel | File | 38.38 KB | 0755 |
|
dumpe2fs | File | 30.31 KB | 0755 |
|
e2freefrag | File | 14.3 KB | 0755 |
|
e2fsck | File | 351.84 KB | 0755 |
|
e2image | File | 42.31 KB | 0755 |
|
e2label | File | 102.55 KB | 0755 |
|
e2mmpstatus | File | 30.31 KB | 0755 |
|
e2scrub | File | 7.13 KB | 0755 |
|
e2scrub_all | File | 5.27 KB | 0755 |
|
e2undo | File | 22.3 KB | 0755 |
|
e4crypt | File | 30.38 KB | 0755 |
|
e4defrag | File | 30.3 KB | 0755 |
|
ebtables | File | 219.04 KB | 0755 |
|
ebtables-nft | File | 219.04 KB | 0755 |
|
ebtables-nft-restore | File | 219.04 KB | 0755 |
|
ebtables-nft-save | File | 219.04 KB | 0755 |
|
ebtables-restore | File | 219.04 KB | 0755 |
|
ebtables-save | File | 219.04 KB | 0755 |
|
faillock | File | 14.15 KB | 0755 |
|
fatlabel | File | 38.38 KB | 0755 |
|
fdisk | File | 110.42 KB | 0755 |
|
filefrag | File | 18.32 KB | 0755 |
|
findfs | File | 14.38 KB | 0755 |
|
fsck | File | 42.42 KB | 0755 |
|
fsck.cramfs | File | 30.44 KB | 0755 |
|
fsck.ext2 | File | 351.84 KB | 0755 |
|
fsck.ext3 | File | 351.84 KB | 0755 |
|
fsck.ext4 | File | 351.84 KB | 0755 |
|
fsck.fat | File | 82.38 KB | 0755 |
|
fsck.minix | File | 54.41 KB | 0755 |
|
fsck.msdos | File | 82.38 KB | 0755 |
|
fsck.vfat | File | 82.38 KB | 0755 |
|
fsfreeze | File | 14.38 KB | 0755 |
|
fstab-decode | File | 18.3 KB | 0755 |
|
fstrim | File | 42.38 KB | 0755 |
|
genl | File | 90.44 KB | 0755 |
|
getcap | File | 14.3 KB | 0755 |
|
getpcaps | File | 14.3 KB | 0755 |
|
getty | File | 55.56 KB | 0755 |
|
groupadd | File | 66.91 KB | 0755 |
|
groupdel | File | 62.73 KB | 0755 |
|
groupmems | File | 54.19 KB | 0755 |
|
groupmod | File | 66.82 KB | 0755 |
|
grpck | File | 58.13 KB | 0755 |
|
grpconv | File | 50.01 KB | 0755 |
|
grpunconv | File | 50.01 KB | 0755 |
|
halt | File | 973.23 KB | 0755 |
|
hwclock | File | 50.5 KB | 0755 |
|
iconvconfig | File | 30.4 KB | 0755 |
|
init | File | 1.55 MB | 0755 |
|
insmod | File | 170.34 KB | 0755 |
|
installkernel | File | 2.6 KB | 0755 |
|
integritysetup | File | 54.07 KB | 0755 |
|
invoke-rc.d | File | 16.12 KB | 0755 |
|
ip | File | 597.62 KB | 0755 |
|
ip6tables | File | 219.04 KB | 0755 |
|
ip6tables-apply | File | 6.89 KB | 0755 |
|
ip6tables-legacy | File | 96.95 KB | 0755 |
|
ip6tables-legacy-restore | File | 96.95 KB | 0755 |
|
ip6tables-legacy-save | File | 96.95 KB | 0755 |
|
ip6tables-nft | File | 219.04 KB | 0755 |
|
ip6tables-nft-restore | File | 219.04 KB | 0755 |
|
ip6tables-nft-save | File | 219.04 KB | 0755 |
|
ip6tables-restore | File | 219.04 KB | 0755 |
|
ip6tables-restore-translate | File | 219.04 KB | 0755 |
|
ip6tables-save | File | 219.04 KB | 0755 |
|
ip6tables-translate | File | 219.04 KB | 0755 |
|
iptables | File | 219.04 KB | 0755 |
|
iptables-apply | File | 6.89 KB | 0755 |
|
iptables-legacy | File | 96.95 KB | 0755 |
|
iptables-legacy-restore | File | 96.95 KB | 0755 |
|
iptables-legacy-save | File | 96.95 KB | 0755 |
|
iptables-nft | File | 219.04 KB | 0755 |
|
iptables-nft-restore | File | 219.04 KB | 0755 |
|
iptables-nft-save | File | 219.04 KB | 0755 |
|
iptables-restore | File | 219.04 KB | 0755 |
|
iptables-restore-translate | File | 219.04 KB | 0755 |
|
iptables-save | File | 219.04 KB | 0755 |
|
iptables-translate | File | 219.04 KB | 0755 |
|
isosize | File | 14.38 KB | 0755 |
|
killall5 | File | 30.38 KB | 0755 |
|
ldattach | File | 26.38 KB | 0755 |
|
ldconfig | File | 387 B | 0755 |
|
ldconfig.real | File | 1.16 MB | 0755 |
|
logsave | File | 14.16 KB | 0755 |
|
losetup | File | 70.52 KB | 0755 |
|
lsmod | File | 170.34 KB | 0755 |
|
luksformat | File | 3.32 KB | 0755 |
|
mkdosfs | File | 50.83 KB | 0755 |
|
mke2fs | File | 130.62 KB | 0755 |
|
mkfs | File | 14.38 KB | 0755 |
|
mkfs.bfs | File | 22.38 KB | 0755 |
|
mkfs.cramfs | File | 34.32 KB | 0755 |
|
mkfs.ext2 | File | 130.62 KB | 0755 |
|
mkfs.ext3 | File | 130.62 KB | 0755 |
|
mkfs.ext4 | File | 130.62 KB | 0755 |
|
mkfs.fat | File | 50.83 KB | 0755 |
|
mkfs.minix | File | 42.39 KB | 0755 |
|
mkfs.msdos | File | 50.83 KB | 0755 |
|
mkfs.vfat | File | 50.83 KB | 0755 |
|
mkhomedir_helper | File | 22.17 KB | 0755 |
|
mklost+found | File | 14.3 KB | 0755 |
|
mkswap | File | 46.38 KB | 0755 |
|
modinfo | File | 170.34 KB | 0755 |
|
modprobe | File | 170.34 KB | 0755 |
|
netplan | File | 798 B | 0755 |
|
newusers | File | 74.73 KB | 0755 |
|
nfnl_osf | File | 18.3 KB | 0755 |
|
nologin | File | 14.3 KB | 0755 |
|
pam-auth-update | File | 20.5 KB | 0755 |
|
pam_extrausers_chkpwd | File | 22.15 KB | 2755 |
|
pam_extrausers_update | File | 30.15 KB | 0755 |
|
pam_getenv | File | 2.82 KB | 0755 |
|
pam_timestamp_check | File | 14.15 KB | 0755 |
|
pivot_root | File | 14.38 KB | 0755 |
|
plymouthd | File | 150.55 KB | 0755 |
|
poweroff | File | 973.23 KB | 0755 |
|
pwck | File | 50.13 KB | 0755 |
|
pwconv | File | 46.01 KB | 0755 |
|
pwunconv | File | 42.01 KB | 0755 |
|
readprofile | File | 22.41 KB | 0755 |
|
reboot | File | 973.23 KB | 0755 |
|
remove-shell | File | 1.07 KB | 0755 |
|
resize2fs | File | 66.3 KB | 0755 |
|
rfkill | File | 30.23 KB | 0755 |
|
rmmod | File | 170.34 KB | 0755 |
|
rmt | File | 58.57 KB | 0755 |
|
rmt-tar | File | 58.57 KB | 0755 |
|
rtacct | File | 28.31 KB | 0755 |
|
rtcwake | File | 34.38 KB | 0755 |
|
rtmon | File | 90.39 KB | 0755 |
|
runlevel | File | 973.23 KB | 0755 |
|
runuser | File | 54.38 KB | 0755 |
|
service | File | 8.88 KB | 0755 |
|
setcap | File | 14.3 KB | 0755 |
|
sfdisk | File | 102.38 KB | 0755 |
|
shadowconfig | File | 885 B | 0755 |
|
shutdown | File | 973.23 KB | 0755 |
|
sshd | File | 895.7 KB | 0755 |
|
start-stop-daemon | File | 47.35 KB | 0755 |
|
sudo_logsrvd | File | 200.1 KB | 0755 |
|
sudo_sendlog | File | 107.34 KB | 0755 |
|
sulogin | File | 42.38 KB | 0755 |
|
swaplabel | File | 18.38 KB | 0755 |
|
swapoff | File | 22.38 KB | 0755 |
|
swapon | File | 42.38 KB | 0755 |
|
switch_root | File | 22.38 KB | 0755 |
|
sysctl | File | 30.23 KB | 0755 |
|
tarcat | File | 936 B | 0755 |
|
tc | File | 614.08 KB | 0755 |
|
telinit | File | 973.23 KB | 0755 |
|
tipc | File | 90.44 KB | 0755 |
|
tune2fs | File | 102.55 KB | 0755 |
|
tzconfig | File | 106 B | 0755 |
|
unix_chkpwd | File | 26.15 KB | 2755 |
|
unix_update | File | 30.15 KB | 0755 |
|
update-ca-certificates | File | 5.29 KB | 0755 |
|
update-passwd | File | 34.56 KB | 0755 |
|
update-rc.d | File | 16.92 KB | 0755 |
|
update-shells | File | 3.72 KB | 0755 |
|
useradd | File | 127.66 KB | 0755 |
|
userdel | File | 86.85 KB | 0755 |
|
usermod | File | 123.46 KB | 0755 |
|
vdpa | File | 30.56 KB | 0755 |
|
veritysetup | File | 43.76 KB | 0755 |
|
vigr | File | 56.53 KB | 0755 |
|
vipw | File | 56.53 KB | 0755 |
|
visudo | File | 219.79 KB | 0755 |
|
wipefs | File | 38.38 KB | 0755 |
|
wpa_action | File | 1.69 KB | 0755 |
|
wpa_cli | File | 140.31 KB | 0755 |
|
wpa_supplicant | File | 3.24 MB | 0755 |
|
xtables-legacy-multi | File | 96.95 KB | 0755 |
|
xtables-monitor | File | 219.04 KB | 0755 |
|
xtables-nft-multi | File | 219.04 KB | 0755 |
|
zic | File | 62.32 KB | 0755 |
|
zramctl | File | 54.52 KB | 0755 |
|