diff --git a/docker/main/rootfs/usr/local/bin/fix-ownership b/docker/main/rootfs/usr/local/bin/fix-ownership index 495fcb3dc2..7649a208b1 100755 --- a/docker/main/rootfs/usr/local/bin/fix-ownership +++ b/docker/main/rootfs/usr/local/bin/fix-ownership @@ -105,6 +105,8 @@ if [[ -n "$sentinel" ]]; then mismatch_expr+=(-a ! -path "$sentinel") fi +exec 3>&1 + for path in "$@"; do # An absent root is an incomplete sweep, not a finished one: /media/frigate # is not in the image, so a boot before the volume is mounted would @@ -121,7 +123,18 @@ for path in "$@"; do # stale mount. Tolerate it rather than aborting under errexit, but never # read a failed scan as "nothing to do": that would record the sweep as # complete without having looked. - if ! count=$(find "$path" -name lost+found -prune -o "${mismatch_expr[@]}" -printf '.' 2>/dev/null | wc -c); then + # The walk prints nothing until it ends, so report every 30s through fd 3 + # (stdout) while the count itself comes back through the substitution. + if ! count=$(find "$path" -name lost+found -prune -o "(" "${mismatch_expr[@]}" ")" -printf 'm\n' -o -printf '.\n' 2>/dev/null \ + | awk -v path="$path" ' + BEGIN { next_report = systime() + 30 } + $0 == "m" { mismatched++ } + systime() >= next_report { + printf "[INFO] fix-ownership: still scanning %s, %d entries checked, %d need changes\n", path, NR, mismatched > "/dev/fd/3" + fflush("/dev/fd/3") + next_report = systime() + 30 + } + END { print mismatched + 0 }'); then swept_clean=0 echo "[WARN] fix-ownership: could not scan ${path}; will retry on next boot" continue diff --git a/docs/docs/configuration/non_root.md b/docs/docs/configuration/non_root.md index f6e9dd1e08..df8d6393c4 100644 --- a/docs/docs/configuration/non_root.md +++ b/docs/docs/configuration/non_root.md @@ -71,13 +71,14 @@ Both the script and the boot sweep report progress, so you can tell a slow sweep ``` [INFO] fix-ownership: scanning /media/frigate for ownership mismatches; this may take a while on large filesystems +[INFO] fix-ownership: still scanning /media/frigate, 2481000 entries checked, 2390112 need changes [WARN] fix-ownership: adjusting ownership of 4823941 entries under /media/frigate [INFO] fix-ownership: /media/frigate 5% (241197/4823941 entries) [INFO] fix-ownership: /media/frigate 10% (482394/4823941 entries) [INFO] fix-ownership: finished /media/frigate in 12m 4s ``` -The scan has no percentage because the total isn't known until it finishes. Watch the boot sweep with `docker logs -f frigate`. +The scan has no percentage because the total isn't known until it finishes, so it reports a running count every 30 seconds instead. Watch the boot sweep with `docker logs -f frigate`. Once the volumes are aligned, start Frigate normally. A file at `/config/.permissions_version` records what was done, so later boots skip the sweep unless you change `PUID`/`PGID`.