Ubuntu с файловыми системами ZFS (zfsutils- linux) запускает очистку zfs во второе воскресенье каждого месяца. Однострочная очистка находится в файле /etc/cron.d/zfsutils-linux. Я не знал об этом, пока у меня не возникли проблемы с производительностью из-за высокого IO. После того, как я покопался в некоторых, мне пришлось написать собственный скрипт BASH, чтобы изменить это поведение. Очистка ZFS по-прежнему необходима, но я хотел очистить только пару файловых систем одновременно. Сценарий размещен ниже. У кого-нибудь есть более элегантное решение? Пока работает, но похоже на взлом.
# Declaring the array to store zpools.
declare -a myZpools
# Populating the array with system zpools.
while read line;
do
myZpools+=($line)
done <<< "$(/sbin/zpool list | awk -F" " '{print $1}' | grep -v NAME)"
# Length of the array is saved in totalPools variable
totalPools="${#myZpools[@]}"
# Dividing total number of zpools into five portions. The hard-coded denominator can be changed to any desired value. Smaller denominator yields bigger zpool portions to scan.
let portion=$totalPools/5
# If input parameter is not specified, or if it is outside of boundaries of the array length, set it to the beginning of the array.
if ( [ -z $1 ] || [ $1 -ge $totalPools ] )
then
day=0
else
day=$1
fi
# Execute the scrubs.
/sbin/zpool scrub ${myZpools[@]:$day:$portion} &