Hello,

I have a 13.2-RELEASE-p3 system with a large storage attached:

===Cut===

NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP DEDUP    HEALTH  ALTROOT tank    135T   122T  12.8T        -         -    66%    90% 1.27x    ONLINE  - zroot  31.5G  27.8G  3.74G        -         -    70%    88% 1.00x    ONLINE  -

===Cut===

In order to process some newly incoming files I'd like to use the zfs diff functionality to get the list of the files created or modified. So I wrote a simple script (/root/periodic/zfsdiff) diffing two dataset snapshots between today and yesterday. Most of these launches do merely work. But not all of them. Some (like 15%) just are waiting for something infinitely, while seemingly doing nothing:

===Cut===

39935  -  I      18101:52,29 zfs diff tank/data/tank2@2025-01-20 tank/data/tank2@2025-01-21
46118  -  Is         0:00,00 /bin/sh /root/periodic/zfsdiff
46126  -  I        354:34,75 zfs diff tank/data/tank0@2025-02-03 tank/data/tank0@2025-02-04 49620  -  I       2155:14,42 zfs diff tank/data/tank1@2025-02-10 tank/data/tank1@2025-02-11
53243  -  Is         0:00,00 /bin/sh /root/periodic/zfsdiff
53255  -  I       3607:34,83 zfs diff tank/data/tank0@2025-02-09 tank/data/tank0@2025-02-10
56849  -  Is         0:00,00 /bin/sh /root/periodic/zfsdiff
59725  -  I       3630:23,01 zfs diff tank/data/tank2@2025-01-27 tank/data/tank2@2025-01-28 65460  -  I       1425:25,55 zfs diff tank/data/tank1@2025-02-03 tank/data/tank1@2025-02-04 82371  -  I        111:25,63 zfs diff tank/data/tank3@2025-02-11 tank/data/tank3@2025-02-12
98172  -  Is         0:00,00 /bin/sh /root/periodic/zfsdiff
98223  -  I       4792:11,99 zfs diff tank/data/tank3@2025-02-04 tank/data/tank3@2025-02-05 40589  2  IN     18108:48,07 zfs diff tank/data/tank2@2025-01-20 tank/data/tank2@2025-01-21
28649  6  I+       471:24,81 zfs diff tank/data/tank1@2025-02-03

===Cut===

Surprisingly, this has little to no correlation to the size of the snapshot, for instance I have the relatively small snapshot diff that fails to process (notice the idle process above):

===Cut===

tank/data/tank1@2025-02-03                       31.6M      - 16.0T  -
tank/data/tank1@2025-02-04                       32.5M      - 16.0T  -

===Cut===

Also, some of these leave no output, without any traces of the script killed or crashed which is very suspicious as well. You could say that this probably means there were no changes, but the snapshot size thinks there were some.

Is there any trick there ? Does this look like a race condition, do I have to run these sequentially, like one diff at a time ? Can those interfere with only their fellow diffs, or also with snapshot creation ?


Thanks.

Eugene.


Reply via email to