From 58d27a6df33e9f4dd728f229684b2b23b53389fa Mon Sep 17 00:00:00 2001 From: clawbot <35+clawbot@noreply.example.org> Date: Wed, 11 Nov 2026 09:37:10 +0100 Subject: [PATCH] README: guard the daily cron scan against an unmounted disk (closes #175) (#186) --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0a36a64..3c9345d 100644 --- a/README.md +++ b/README.md @@ -114,15 +114,20 @@ docker run --rm -v /srv:/srv:ro -v /var/lib/sfdupes:/var/lib/sfdupes \ Run `scan` as root, so that it can read every file. `scan` warns about a directory it cannot read, and about a new or changed file it cannot read. It skips the path and deletes the records at or below it (see "Rules for the -walk"). As the file `/etc/cron.d/sfdupes`: +walk"). + +An unmounted disk leaves its mount point empty, so `scan` deletes every record +under it, and the next scan reads every file on the disk again. Test the mount +point of each disk at or below `/srv` with its own `mountpoint -q`, joined with +`&&`, and test `/srv` only when it is one. As the file `/etc/cron.d/sfdupes`: ``` -30 3 * * * root /usr/local/bin/sfdupes scan /srv 2>>/var/log/sfdupes.log || tail -n 3 /var/log/sfdupes.log +30 3 * * * root if mountpoint -q /srv; then /usr/local/bin/sfdupes scan /srv 2>>/var/log/sfdupes.log || tail -n 3 /var/log/sfdupes.log; else echo "a disk is not mounted; scan of /srv skipped"; fi ``` - The first scan creates `/var/lib/sfdupes/db.sqlite` and its directory. To keep - the database elsewhere, put `SFDUPES_DATABASE=/path/to/db.sqlite` before the - command on the same line. + the database elsewhere, put `SFDUPES_DATABASE=/path/to/db.sqlite` directly + before `/usr/local/bin/sfdupes`. - `scan` writes nothing to stdout. Its stderr, appended here to `/var/log/sfdupes.log`, holds: - one line naming the database;