Eu gostaria de executar este script btrfs-scrub no Arch Linux. Infelizmente, não será executado como está escrito. Eu não entendo bem algumas linhas do roteiro para modificá-lo eu mesmo.
Suponho que eu poderia usar apenas o btrfs-progs fornecido pelo Arch e ativar o arquivo da unidade do timer incluído para o btrfs-scrub. No entanto, este script foi recomendado para mim e eu pensei que iria tentar. Eu gosto do fato de que faz um balanço.
Ele usa shlock, que não está disponível no repositório do Arch ou no AUR (até onde eu sei). Então, um substituto seria necessário.
Além disso, não entendo o uso de ionice e pkill neste script. Para que eles estão sendo usados?
Qual seria a maneira correta de substituir o uso desse% de script por /var/log/syslog
, que normalmente não faz parte de um sistema systemd como o Arch.
Alguém sabe se o modo Arch (definindo um arquivo de unidade de timer para o btrfs-scrub) executa o equilíbrio. Eu suspeito que não. (Talvez haja uma maneira melhor de realizar meu objetivo no Arch do que usar esse script e estou aberto a sugestões.)
#! /bin/bash
# By Marc MERLIN <[email protected]> 2014/03/20
# License: Apache-2.0
which btrfs >/dev/null || exit 0
export PATH=/usr/local/bin:/sbin:$PATH
# bash shortcut for 'basename $0'
PROG=${0##*/}
lock=/var/run/$PROG
# shlock (from inn) does the right thing and grabs a lock for a dead process
# (it checks the PID in the lock file and if it's not there, it
# updates the PID with the value given to -p)
# You can replace this with another lock program if you prefer or even remove
# the lock.
if ! shlock -p $$ -f $lock; then
echo "$lock held, quitting" >&2
exit
fi
if which on_ac_power >/dev/null 2>&1; then
ON_BATTERY=0
on_ac_power >/dev/null 2>&1 || ON_BATTERY=$?
if [ "$ON_BATTERY" -eq 1 ]; then
exit 0
fi
fi
FILTER='(^Dumping|balancing, usage)'
test -n "$DEVS" || DEVS=$(grep '\<btrfs\>' /proc/mounts | awk '{ print $1 }' | sort -u)
for btrfs in $DEVS
do
tail -n 0 -f /var/log/syslog | grep "BTRFS" | grep -Ev '(disk space caching is enabled|unlinked .* orphans|turning on discard|device label .* devid .* transid|enabling SSD mode|BTRFS: has skinny extents|BTRFS: device label|BTRFS info )' &
mountpoint="$(grep "$btrfs" /proc/mounts | awk '{ print $2 }' | sort | head -1)"
logger -s "Quick Metadata and Data Balance of $mountpoint ($btrfs)" >&2
# Even in 4.3 kernels, you can still get in places where balance
# won't work (no place left, until you run a -m0 one first)
# I'm told that proactively rebalancing metadata may not be a good idea.
#btrfs balance start -musage=0 -v $mountpoint 2>&1 | grep -Ev "$FILTER"
#btrfs balance start -musage=20 -v $mountpoint 2>&1 | grep -Ev "$FILTER"
# After metadata, let's do data:
btrfs balance start -dusage=0 -v $mountpoint 2>&1 | grep -Ev "$FILTER"
btrfs balance start -dusage=20 -v $mountpoint 2>&1 | grep -Ev "$FILTER"
# And now we do scrub. Note that scrub can fail with "no space left
# on device" if you're very out of balance.
logger -s "Starting scrub of $mountpoint" >&2
echo btrfs scrub start -Bd $mountpoint
ionice -c 3 nice -10 btrfs scrub start -Bd $mountpoint
pkill -f 'tail -n 0 -f /var/log/syslog'
logger "Ended scrub of $mountpoint" >&2
done
rm $lock
Tags bash systemd btrfs arch-linux ionice