On Mon, Oct 19, 2015 at 7:27 PM, Aaron Davies <[email protected]> wrote: > i have a situation where diff -r of two directories fails to report > differences that diff of two files in those directories shows > > i haven't dug into the code yet, but the directories involved are on an NFS > mount of a netapp filer, one is the copy-on-write snapshot counterpart of the > other, they show up as the same filesystem, and are the same inode > > so my guess is that there's something in the recursive traversal that says > that any two directories that are on the same fs and are the same inode must > have identical descendent contents and can be skipped completely > > this fs probably violates POSIX by doing this, but there's no easy way around > it[1], so it would be very useful if diff had a command-line option to turn > that optimization off > > i've heard anecdotal reports of other filesystems that cause the same problem > > here's a sample session: > > $ mkdir foo > $ echo baz >foo/bar > $ # wait until the next snapshot is created > $ echo quux >foo/bar > $ diff -r .snapshot/nightly.0/foo foo > $ diff .snapshot/nightly.0/foo/bar foo/bar > 1c1 > < baz > --- >> quux > $ stat -c %i .snapshot/nightly.0/foo foo > 69403847 > 69403847 > $ > -- > Aaron Davies > [email protected] > > [1] when i ran into this, i ended up using something like diff <(find > .snapshot/nightly.0/foo -type f|sort|xargs cat) <(find foo -type f|sort|xargs > cat) to do the comparison -- sufficient for my needs at the time, but > cleaning it up for general purpose use would essentially be rewriting the -r > part of diff from scratch
Hi Aaron, Thanks for the suggestion, but what NetApp software are you using? I've just tried to reproduce that on a NetApp-backed nfs-mounted directory, and see different inode numbers for the directories: $ stat --format %i foo .snapshot/hourly.2016-05-15_*/foo 97582543 97557711
