Hello community, here is the log from the commit of package btrfsmaintenance for openSUSE:Factory checked in at 2017-04-11 09:46:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/btrfsmaintenance (Old) and /work/SRC/openSUSE:Factory/.btrfsmaintenance.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "btrfsmaintenance" Tue Apr 11 09:46:45 2017 rev:7 rq:486446 version:0.3.1 Changes: -------- --- /work/SRC/openSUSE:Factory/btrfsmaintenance/btrfsmaintenance.changes 2016-03-16 10:38:43.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.btrfsmaintenance.new/btrfsmaintenance.changes 2017-04-11 09:46:47.403292020 +0200 @@ -1,0 +2,22 @@ +Fri Apr 7 00:00:00 CEST 2017 - dste...@suse.cz + +- version 0.3.1 + - dist-install: fix installation paths, install functions + - functions: fix syntax to be compatible with dash + - spec: install functions file + +------------------------------------------------------------------- +Tue Nov 15 00:00:00 CET 2016 - dste...@suse.cz + +- version 0.3 + - add syslog to logging targets + - add none target (/dev/null) + - autodetect btrfs filesystems for balance, scrub and trim + - detect mixed blockgroups and use correct balance filters + - fix uninstall rules + - fix capturing entire output to the log + - fix when cron files are symlinks + - add generic installation script + - doc updates: retention policy tuning + +------------------------------------------------------------------- Old: ---- btrfsmaintenance-0.2.tar.bz2 New: ---- btrfsmaintenance-0.3.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ btrfsmaintenance.spec ++++++ --- /var/tmp/diff_new_pack.8UaTwv/_old 2017-04-11 09:46:47.979210664 +0200 +++ /var/tmp/diff_new_pack.8UaTwv/_new 2017-04-11 09:46:47.983210099 +0200 @@ -1,7 +1,7 @@ # # spec file for package btrfsmaintenance # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: btrfsmaintenance -Version: 0.2 +Version: 0.3.1 Release: 0 Summary: Scripts for btrfs periodic maintenance tasks License: GPL-2.0 @@ -56,6 +56,7 @@ install -m 755 btrfs-scrub.sh %{buildroot}%{_datadir}/%{name} install -m 755 btrfs-trim.sh %{buildroot}%{_datadir}/%{name} install -m 755 btrfsmaintenance-refresh-cron.sh %{buildroot}%{_datadir}/%{name} +install -m 644 btrfsmaintenance-functions %{buildroot}%{_datadir}/%{name} %if 0%{?suse_version} >= 1210 install -m 755 -d %{buildroot}%{_unitdir} ++++++ btrfsmaintenance-0.2.tar.bz2 -> btrfsmaintenance-0.3.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/README.md new/btrfsmaintenance-0.3.1/README.md --- old/btrfsmaintenance-0.2/README.md 2016-03-04 18:03:27.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/README.md 2017-04-07 14:41:46.299279436 +0200 @@ -146,6 +146,11 @@ ### Installation ### +For debian based systems, run `debian-install.sh` as root. + +For non-debian based systems, check for distro provided package or +do manual installation of files as described below. + * `btrfs-*.sh` task scripts are expected at `/usr/share/btrfsmaintenance` * `sysconfig.btrfsmaintenance` configuration template is put to: * `/etc/sysconfig/btrfsmaintenance` on SUSE and RedHat based systems or derivatives @@ -157,7 +162,7 @@ ### cron jobs ### The periodic execution of the tasks is done by the 'cron' service. Symlinks to -th task scripts are located in the respective directories in +the task scripts are located in the respective directories in `/etc/cron.<PERIOD>`. The script `btrfsmaintenance-refresh-cron.sh` will synchronize the symlinks @@ -185,6 +190,170 @@ values and can be deployed without changes (expecting the root filesystem to be btrfs). +## Tuning periodic snapshotting ## + +There are various tools and handwritten scripts to manage periodic snapshots +and cleaning. The common problem is tuning the retention policy constrained by +the filesystem size and not running out of space. + +This section will describe factors that affect that, using [snapper](https://snapper.io) +as an example, but adapting to other tools should be straightforward. + +### Intro ### + +Snapper is a tool to manage snapshots of btrfs subvolumes. It can create +snapshots of given subvolume manually, periodically or in a pre/post way for +a given command. It can be configured to retain existing snapshots according +to time-based settings. As the retention policy can be very different for +various usecases, we need to be able to find matching settings. + +The settings should satisfy user's expectation about storing previous copies of +the subvolume but not taking too much space. In an extreme, consuming the whole +filesystem space and preventing some operations to finish. + +In order to avoid such situations, the snapper settings should be tuned according +to the expected usecase and filesystem size. + +### Sample problem ### + +Default settings of snapper on default root partition size can easily lead to +no-space conditions (all TIMELINE values set to 10). Frequent system updates +make it happen earlier, but this also affects long-term use. + +### Factors affecting space consumption ### + +1. frequency of snapshotting +2. amount of data changes between snapshots (delta) +4. snapshot retention settings +3. size of the filesystem + +Each will be explained below. + +The way how the files are changed affects the space consumption. When a new +data overwrite existing, the new data will be pinned by the following snapshot, +while the original data will belong to previous snapshot. This means that the +allocated file blocks are freed after the last snapshot pointing to them is +gone. + +### Tuning + +The administrator/user is suppsed to know the approximate use of the partition +with snapshots enabled. + +The decision criteria for tuning is space consumption and we're optimizing to +maximize retention without running out of space. + +All the factors are intertwined and we cannot give definite answers but rather +describe the tendencies. + +#### Snapshotting frequency + +* **automatic**: if turned on with the `TIMELINE` config option, the periodic + snapshots are taken hourly. The daily/weekly/monthly/yearly periods will keep + the first hourly snapshot in the given period. + +* **at package update**: package manager with snapper support will create + pre/post snapshots before/after an update happens. + +* **manual**: the user can create a snapshot manually with `snapper create`, + with a given snapshot type (ie. single, pre, post). + +#### Amount of data change + +This is a parameter hard to predict and calculate. We work with rough +estimates, eg. megabytes, gigabytes etc. + +#### Retention settings + +The user is supposed to know possible needs of recovery or examination of +previous file copies stored in snapshots. + +It's not recommended to keep too old snapshots, eg. monthly or even yearly if +there's no apparent need for that. The yearly snapshots should not substitute +backups, as they reside on the same partition and cannot be used for recovery. + +#### Filesystem size + +Bigger filesystem allows for longer retention, higher frequency updates and +amount of data changes. + +As an example of a system root partition, the recommended size is 30 GiB, but +50 GiB is selected by the installer if the snapshots are turned on. + +For non-system partition it is recommended to watch remaining free space. +Although getting an accurate value on btrfs is tricky, due to shared extents +and snapshots, the output of `df` gives a rough idea. Low space, like under a +few gigabytes is more likely to lead to no-space conditions, so it's a good +time to delete old snapshots or review the snapper settings. + + +### Typical usecases + +#### A rolling distro + +* frequency of updates: high, multiple times per week +* amount of data changed between updates: high + +Suggested values: + + TIMELINE_LIMIT_HOURLY="12" + TIMELINE_LIMIT_DAILY="5" + TIMELINE_LIMIT_MONTHLY="1" + TIMELINE_LIMIT_YEARLY="0" + +The size of root partition should be at least 30GiB, but more is better. + +#### Regular/enterprise distro + +* frequency of updates: low, a few times per month +* amount of data changed between updates: low to moderate + +Most data changes come probably from the package updates, in the range of +hundreds of megabytes per update. + +Suggested values: + + TIMELINE_LIMIT_HOURLY="12" + TIMELINE_LIMIT_DAILY="7" + TIMELINE_LIMIT_MONTHLY="6" + TIMELINE_LIMIT_YEARLY="1" + +#### Big file storage + +* frequency of updates: moderate to high +* amount of data changed between updates: no changes in files, new files added, old deleted + +Suggested values: + + TIMELINE_LIMIT_HOURLY="12" + TIMELINE_LIMIT_DAILY="7" + TIMELINE_LIMIT_MONTHLY="6" + TIMELINE_LIMIT_YEARLY="0" + +Note, that deleting a big file that has been snapshotted will not free the space +until all relevant snapshots are deleted. + +#### Mixed + +* frequency of updates: unpredictable +* amount of data changed between updates: unpredictable + +Examples: + +* home directory with small files (in range of kilobytes to megabytes), large files (hundreds of megabytes to gigabytes). +* git trees, bare and checked out repositories + +Not possible to suggest config numbers as it really depends on user +expectations. Keeping a few hourly snapshots should not consume too much space +and provides a copy of files, eg. to restore after accidental deletion. + +Starting point: + + TIMELINE_LIMIT_HOURLY="12" + TIMELINE_LIMIT_DAILY="7" + TIMELINE_LIMIT_MONTHLY="0" + TIMELINE_LIMIT_YEARLY="0" + ## About ## The goal of this project is to help administering btrfs filesystems. It is not diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/btrfs-balance.sh new/btrfsmaintenance-0.3.1/btrfs-balance.sh --- old/btrfsmaintenance-0.2/btrfs-balance.sh 2016-03-04 18:03:27.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/btrfs-balance.sh 2017-04-07 14:41:46.271278542 +0200 @@ -20,10 +20,13 @@ fi LOGIDENTIFIER='btrfs-balance' +. $(dirname $(realpath $0))/btrfsmaintenance-functions { +evaluate_auto_mountpoint BTRFS_BALANCE_MOUNTPOINTS OIFS="$IFS" IFS=: +exec 2>&1 # redirect stderr to stdout to catch all output to log destination for MM in $BTRFS_BALANCE_MOUNTPOINTS; do IFS="$OIFS" if [ $(stat -f --format=%T "$MM") != "btrfs" ]; then @@ -33,16 +36,31 @@ echo "Before balance of $MM" btrfs filesystem df "$MM" df -H "$MM" - btrfs balance start -dusage=0 "$MM" - for BB in $BTRFS_BALANCE_DUSAGE; do - # quick round to clean up the unused block groups - btrfs balance start -v -dusage=$BB "$MM" - done - btrfs balance start -musage=0 "$MM" - for BB in $BTRFS_BALANCE_MUSAGE; do - # quick round to clean up the unused block groups - btrfs balance start -v -musage="$BB" "$MM" - done + + if detect_mixed_bg "$MM"; then + btrfs balance start -musage=0 -dusage=0 "$MM" + # we use the MUSAGE values for both, supposedly less aggressive + # values, but as the data and metadata space is shared on + # mixed-bg this does not lead to the situations we want to + # prevent when the blockgroups are split (ie. underused + # blockgroups) + for BB in $BTRFS_BALANCE_MUSAGE; do + # quick round to clean up the unused block groups + btrfs balance start -v -musage=$BB -dusage=$BB "$MM" + done + else + btrfs balance start -dusage=0 "$MM" + for BB in $BTRFS_BALANCE_DUSAGE; do + # quick round to clean up the unused block groups + btrfs balance start -v -dusage=$BB "$MM" + done + btrfs balance start -musage=0 "$MM" + for BB in $BTRFS_BALANCE_MUSAGE; do + # quick round to clean up the unused block groups + btrfs balance start -v -musage="$BB" "$MM" + done + fi + echo "After balance of $MM" btrfs filesystem df "$MM" df -H "$MM" @@ -52,6 +70,8 @@ case "$BTRFS_LOG_OUTPUT" in stdout) cat;; journal) systemd-cat -t "$LOGIDENTIFIER";; + syslog) logger -t "$LOGIDENTIFIER";; + none) cat >/dev/null;; *) cat;; esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/btrfs-defrag.sh new/btrfsmaintenance-0.3.1/btrfs-defrag.sh --- old/btrfsmaintenance-0.2/btrfs-defrag.sh 2016-03-04 18:03:27.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/btrfs-defrag.sh 2017-04-07 14:41:46.275278670 +0200 @@ -24,6 +24,7 @@ { OIFS="$IFS" IFS=: +exec 2>&1 # redirect stderr to stdout to catch all output to log destination for P in $BTRFS_DEFRAG_PATHS; do IFS="$OIFS" if [ $(stat -f --format=%T "$P") != "btrfs" ]; then @@ -38,6 +39,8 @@ case "$BTRFS_LOG_OUTPUT" in stdout) cat;; journal) systemd-cat -t "$LOGIDENTIFIER";; + syslog) logger -t "$LOGIDENTIFIER";; + none) cat >/dev/null;; *) cat;; esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/btrfs-scrub.sh new/btrfsmaintenance-0.3.1/btrfs-scrub.sh --- old/btrfsmaintenance-0.2/btrfs-scrub.sh 2016-03-04 18:03:27.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/btrfs-scrub.sh 2017-04-07 14:41:46.275278670 +0200 @@ -20,6 +20,7 @@ fi LOGIDENTIFIER='btrfs-scrub' +. $(dirname $(realpath $0))/btrfsmaintenance-functions readonly= if [ "$BTRFS_SCRUB_READ_ONLY" = "true" ]; then @@ -33,8 +34,10 @@ fi { +evaluate_auto_mountpoint BTRFS_SCRUB_MOUNTPOINTS OIFS="$IFS" IFS=: +exec 2>&1 # redirect stderr to stdout to catch all output to log destination for MNT in $BTRFS_SCRUB_MOUNTPOINTS; do IFS="$OIFS" echo "Running scrub on $MNT" @@ -53,6 +56,8 @@ case "$BTRFS_LOG_OUTPUT" in stdout) cat;; journal) systemd-cat -t "$LOGIDENTIFIER";; + syslog) logger -t "$LOGIDENTIFIER";; + none) cat >/dev/null;; *) cat;; esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/btrfs-trim.sh new/btrfsmaintenance-0.3.1/btrfs-trim.sh --- old/btrfsmaintenance-0.2/btrfs-trim.sh 2016-03-04 18:03:27.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/btrfs-trim.sh 2017-04-07 14:41:46.279278798 +0200 @@ -20,10 +20,13 @@ fi LOGIDENTIFIER='btrfs-trim' +. $(dirname $(realpath $0))/btrfsmaintenance-functions { +evaluate_auto_mountpoint BTRFS_TRIM_MOUNTPOINTS OIFS="$IFS" IFS=: +exec 2>&1 # redirect stderr to stdout to catch all output to log destination for MNT in $BTRFS_TRIM_MOUNTPOINTS; do IFS="$OIFS" if [ $(stat -f --format=%T "$MNT") != "btrfs" ]; then @@ -38,6 +41,8 @@ case "$BTRFS_LOG_OUTPUT" in stdout) cat;; journal) systemd-cat -t "$LOGIDENTIFIER";; + syslog) logger -t "$LOGIDENTIFIER";; + none) cat >/dev/null;; *) cat;; esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/btrfsmaintenance-functions new/btrfsmaintenance-0.3.1/btrfsmaintenance-functions --- old/btrfsmaintenance-0.2/btrfsmaintenance-functions 1970-01-01 01:00:00.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/btrfsmaintenance-functions 2017-04-07 14:41:46.303279563 +0200 @@ -0,0 +1,68 @@ +#!/bin/bash +# +# this file contains common code for the btrfs maintenance scripts +# + +# function: evaluate_auto_mountpoint +# parameter: A variable name +# +# this function checks whether the variable contains the special keyword "auto" +# if yes, all currently mounted btrfs filesystems are evaluated and their mountpoints +# are put into the parameter variable +evaluate_auto_mountpoint() { + MOUNTPOINTSVAR=\$"$1" + if [ "$(eval "expr \"$MOUNTPOINTSVAR\"")" = "auto" ]; then + local BTRFS_DEVICES="" + local DEVICE="" + local MNT="" + local MNTLIST="" + # find all mounted btrfs filesystems, print their device nodes, sort them + # and remove identical entries + BTRFS_DEVICES=$(findmnt --types btrfs --output "SOURCE" --nofsroot --noheading | sort | uniq) + # find one (and only one) corresponding mountpoint for each btrfs device node + for DEVICE in $BTRFS_DEVICES; do + MNT=$(findmnt --types btrfs --first-only --noheadings --output "TARGET" --source "$DEVICE") + if [ -n "$MNTLIST" ]; then + MNTLIST="$MNTLIST:$MNT" + else + MNTLIST="$MNT" + fi + done + echo "evaluate mounted filesystems: $MNTLIST" + eval "$1=$MNTLIST" + fi +} + +# function: detect_mixed_bg +# parameter: path to a mounted filesystem +# +# check if the filesystem contains mixed block groups, +detect_mixed_bg() { + # simple test is to read 'btrfs fi df', + # (we could look for /sys/sfs/btrfs/UUID/allocation/mixed if we know + # the UUID) + + btrfs filesystem df "$1" | grep -q "Data+Metadata" +} + +# function: check_scrub_running +# parameter: path to a mounted filesystem +# +# check if scrub is in progress on a given filesystem, return 0 if it is so +check_scrub_running() { + btrfs scrub status "$1" | grep -q "scrub.*running for" +} + +# function: check_balance_running +# parameter: path to a mounted filesystem +# +# check if balance is in progress on a given filesystem, return 0 if it is so +check_balance_running() { + # 0: not in progress + # 1: in progress + # 2: other error (EPERM) + if btrfs balance status "$1" >& /dev/null; then + return 1 + fi + return 0 +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/btrfsmaintenance-refresh-cron.sh new/btrfsmaintenance-0.3.1/btrfsmaintenance-refresh-cron.sh --- old/btrfsmaintenance-0.2/btrfsmaintenance-refresh-cron.sh 2016-03-04 18:03:27.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/btrfsmaintenance-refresh-cron.sh 2017-04-07 14:41:46.275278670 +0200 @@ -19,7 +19,8 @@ if [ "$1" = 'uninstall' ]; then for SCRIPT in btrfs-scrub.sh btrfs-defrag.sh btrfs-balance.sh btrfs-trim.sh; do for PERIOD in daily weekly monthly; do - FILE="/etc/cron.$PERIOD/$SCRIPT" + LINK="${SCRIPT%.*}" + FILE="/etc/cron.$PERIOD/$LINK" rm -f "$FILE" done done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/debian-install.sh new/btrfsmaintenance-0.3.1/debian-install.sh --- old/btrfsmaintenance-0.2/debian-install.sh 2016-03-04 18:03:27.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/debian-install.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +0,0 @@ -#!/bin/sh -install -oroot -groot -m644 sysconfig.btrfsmaintenance /etc/default/btrfsmaintenance -install -d -oroot -groot -m755 /usr/share/btrfsmaintenance -install -oroot -groot -m755 btrfs-*.sh /usr/share/btrfsmaintenance/ -echo "Now edit cron periods and mount points in /etc/default/btrfsmaintenance then run ./btrfsmaintenance-refresh-cron.sh to update cron symlinks -" \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/dist-install.sh new/btrfsmaintenance-0.3.1/dist-install.sh --- old/btrfsmaintenance-0.2/dist-install.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/dist-install.sh 2017-04-07 14:41:46.279278798 +0200 @@ -0,0 +1,33 @@ +#!/bin/sh +# usage: $0 [sysconfdir] +# +# Install configuration template, documentation and scripts. Target path is +# autodetected or can be overriden by the first argument. +# +# Common values of sysconfdir: +# - /etc/sysconfig +# - /etc/default + +sysconfdir="$1" + +if [ -z "$1" ]; then + if [ -d /etc/sysconfig ]; then + sysconfdir=/etc/sysconfig + elif [ -d /etc/default ]; then + sysconfdir=/etc/default + else + echo "Cannot detect sysconfig directory, please specify manually" + exit 1 + fi +else + sysconfdir="$1" +fi + +install -oroot -groot -m644 sysconfig.btrfsmaintenance "$sysconfdir"/btrfsmaintenance +install -d -oroot -groot -m755 /usr/share/btrfsmaintenance +install -oroot -groot -m755 btrfs-*.sh /usr/share/btrfsmaintenance/ +install -oroot -groot -m644 btrfsmaintenance-functions /usr/share/btrfsmaintenance/ + +echo "Installation path: $sysconfdir" +echo "Now edit cron periods and mount points in $sysconfdir/btrfsmaintenance then run ./btrfsmaintenance-refresh-cron.sh to update cron symlinks +" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btrfsmaintenance-0.2/sysconfig.btrfsmaintenance new/btrfsmaintenance-0.3.1/sysconfig.btrfsmaintenance --- old/btrfsmaintenance-0.2/sysconfig.btrfsmaintenance 2016-03-04 18:03:27.000000000 +0100 +++ new/btrfsmaintenance-0.3.1/sysconfig.btrfsmaintenance 2017-04-07 14:41:46.291279180 +0200 @@ -1,8 +1,8 @@ ## Path: System/File systems/btrfs -## Type: string(none,stdout,journal) +## Type: string(none,stdout,journal,syslog) ## Default: "stdout" # -# Output target for messages. Journal messages are tagged by the task name like +# Output target for messages. Journal and syslog messages are tagged by the task name like # 'btrfs-scrub' etc. BTRFS_LOG_OUTPUT="stdout" @@ -36,6 +36,7 @@ # Which mountpoints/filesystems to balance periodically. This may reclaim unused # portions of the filesystem and make the rest more compact. # (Colon separated paths) +# The special word/mountpoint "auto" will evaluate all mounted btrfs filesystems at runtime BTRFS_BALANCE_MOUNTPOINTS="/" ## Path: System/File systems/btrfs @@ -61,7 +62,8 @@ ## Type: string ## Default: "1 5 10 20 30" # -# The usage percent for balancing metadata block groups. +# The usage percent for balancing metadata block groups. The values are also +# used in case the filesystem has mixed blockgroups. # # Note: default values should not disturb normal work but may not reclaim # enough block groups. If you observe that, add higher values but beware that @@ -74,6 +76,7 @@ # # Which mountpoints/filesystems to scrub periodically. # (Colon separated paths) +# The special word/mountpoint "auto" will evaluate all mounted btrfs filesystems at runtime BTRFS_SCRUB_MOUNTPOINTS="/" ## Path: System/File systems/btrfs @@ -117,4 +120,5 @@ # # Which mountpoints/filesystems to trim periodically. # (Colon separated paths) +# The special word/mountpoint "auto" will evaluate all mounted btrfs filesystems at runtime BTRFS_TRIM_MOUNTPOINTS="/"