From d9e0a37b142582fd8b972385b31d65791aad3d73 Mon Sep 17 00:00:00 2001 From: sneak Date: Wed, 11 Nov 2026 03:54:15 +0000 Subject: [PATCH] README: guard the daily cron scan against an unmounted disk (closes #175) A disk that is not mounted leaves its mount point an empty directory. scan then deletes every record under it, and the next scan reads every file again. The README now says so, and its cron line runs scan only when mountpoint reports /srv as mounted. Model: opus-5-5 --- README.md | 12 ++++++++++-- TODO.md | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 93e057a..2dda80d 100644 --- a/README.md +++ b/README.md @@ -112,10 +112,18 @@ docker run --rm -v /var/lib/sfdupes:/var/lib/sfdupes sfdupes report > dupes.tsv 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"). + +A disk that is not mounted leaves an empty directory at its mount point. `scan` +finds no files there, deletes every record under it and exits 0. The next scan +with the disk mounted reads every file on it again. So the line below runs +`scan` only when `mountpoint` reports `/srv` as mounted. Otherwise it prints +`a disk is not mounted; scan of /srv skipped`, which `cron` mails, and scans +nothing. For each other disk mounted below `/srv`, add `&& mountpoint -q` and +its mount point after the first test. 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 diff --git a/TODO.md b/TODO.md index e0cee09..3f500fc 100644 --- a/TODO.md +++ b/TODO.md @@ -29,6 +29,9 @@ Newest first. An entry ends with its date and its issue or branch, where those are known. +- `README.md` says what a disk that is not mounted does to the database. The + daily `cron` line runs `scan` only when `mountpoint` reports `/srv` as mounted + (2026-11-11, https://git.eeqj.de/sneak/sfdupes/issues/175) - `report` and `trees` leave out empty files. `report` writes no group of size 0, and `trees` writes no group whose trees hold 0 bytes. An empty file still counts toward a tree's digest (2026-11-11,