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,