bug#79446: 9.7: cp(1): Unnecessary writes / incorrect logging messages
Kye Hunter <[email protected]>
| Newsgroups | gmane.comp.gnu.core-utils.bugs |
|---|---|
| Message-ID | <[email protected]> |
Hi both, Thanks for the explanations, the trace is making much more sense to me now! > Yes. Unfortunately it's more complicated than the mode, as the > Linux xattr library don't give 'cp' an easy way to test whether > the extended attributes are identical. We could add this to our > list of things to do but any changes along these lines would be > nontrivial. Yeah so I see that cp is making calls to llistxattr, but that it appears to only give information on the names, but not on the values, of the xattrs. I also see that (at least on my machine) changing the xattrs does not affect the file's modification or change times (I think I have access times disabled), so that can't be used either (rather unfortunate, though I guess it makes sense). However, if it's just a matter of not knowing the values of the xattrs, then shouldn't the absence of any xattrs be enough to know that they are identical? The files I'm testing on don't have xattrs, and I sort of doubt any files on my system have them, so for my case at least this could be a good solution. If I add --no-preserve=mode to the command, this does prevent the extra call to chmod, but adding --no-preserve=xattr still results in a call to chmod, which seems odd based on your explanation. Reading the man page again, the apparent overlap in the attributes "mode" and "xattr" seems sort of confusing. Is the behavior of the combination of --preserve=mode with --no-preserve=xattr even well defined? I guess my expectation would be that in this case the permission bits, ext attribute bits, and the ACLs are copied, but the xattrs are not. To me, another good solution here seems like it could be to remove the overlap in these two, so that it would be possible to specify copying the mode/ACLs without the xattrs, and then wouldn't be necessary to worry about the values of the xattrs for --preserve=mode without --preserve=xattrs. In any case, in the traces I'm seeing with --preserve=mode, I don't see anywhere that cp is writing any xattrs at all, just that it makes an unnecessary chmod. > 2. The other odd thing in the trace is that there are some kind > of odd > shenanigans going on with the two identical binary files, and a > third temporary file that cp makes and then removes. > > > The point is that they're not *supposed* to be "identical binaries"; > they're supposed to be multiple names for ONE file, because you > specified --preserve=all, which includes replicating the original > pattern of (hard) links in the target. Yeah so I think I had never actually had hardlinked files come up in any real situation before, so I'm not surprised I didn't catch that! But yes, I can confirm that is what's going on here. But I'm not convinced that the behavior with hardlinks is totally logical here. The first odd thing would seem to be that these files are being relinked every time that cp is run, even when they're already linked. But it gets stranger—starting with an empty target directory, if I run this command: cp --no-preserve=links --update=older --target-directory="/home/kye/test" ./* then the first time I run it, the files hardlinked in the source directory are not hardlinked in the target (seemingly correct), but when running it the second time (and afterwards) the two files then do become hardlinked, apparently contradicting the --no-preserve=links option. So, it makes sense that hardlinked files were being hardlinked in the target directory when I had --preserve=all, but maybe it doesn't make sense to relinking them over-and-over when they are already linked. And it seems like --update=older is somehow forcing the files to be hardlinked, but only when they already exist in the target directory. I think that when I was using ZFS, these hardlinked files were not present, so I never saw them in diffs back then, but I checked and if I avoid having the mode of directories reset, these redundant links are still incrementing the generation number on btrfs. This moves them into the category of problematic (for me) and it would be great if they weren't occurring. > (You might like to submit a Linux kernel feature request to implement > an extra option flag for 'linkat' to do the same, perhaps AT_REPLACE.) I think I can see how that could be helpful in this case, but perhaps I'm not the best person for the task. If no one else wants to though, I guess I could give it a shot. Would being able to directly replace a file with a hardlink to another file make it easier to avoid unnecessarily replacing one hardlink with itself? Or would it just be for convenience in cases like this one? > I have to admit I'm a bit puzzled by > unlinkat(3, "./CuYCWUCU", 0) = 0 > which would appear to be successfully removing a filename that no > longer exists. I agree, seems a bit fishy. Thanks, -Kye -- Kye E. Hunter PGP: 6859 E2DE D598 49EA 9319 10CD DEF2 BA03 A6BE 3062 --
OpenPGP_0xDEF2BA03A6BE3062.asc
(application/pgp-keys, 16.5 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 2Yxey97PeCAaDmfIDyOKaszbiaWia54= =C8LG -----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.asc
(application/pgp-signature, 840 B)
-----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEE6rtd//+VJLjpVVklKgTRkYDBcJYFAmjK9Q4FAwAAAAAACgkQKgTRkYDBcJbi JQ/+OeFLR1ktP0jdmPb4ZWg+OBDXncA78XcZU/vO9StnWbD6xazyHDmCMQRAFYGqaPVoG+BbrNzs AA/3WEcXr3iLDbtf/+Fs7+HsWFIGwRwyJwOZPwGz6AsEEkbvSBIREzl/hmoh8Z2qld/4NBP9655k 7cRH1WgOusc6FSG3F6sQgvK4gu+7K8lL0LRLoEsHXB2VywVO/U2Xyu4K1K4gxoE9FiXHwT6n+3mf /E9CkgF4jXfQiWkwBLBoQRO6x+4jXJV9lvuEKNP6k0nux2s9ylHpBsc65QNpTkKlLifKoWnVHQDc JnmhZ8pfoIxur4rgS6WITH5anRdxYglx3ZQloil7iGCsCoOikeX0xDowlGEUlmZTwS2+4hoBc3Pf t9XE6wTi48Ys/y/WCw/ADHrDRBmh6bRUeVz5ZxwVlSBqtq0XpkLvNdLNBuhryRxIJNrH6CvLo1MA BTk7WVkfFjLGtwJA4rGl+nwgekGQaZwD65fe5gBIMgEHVnlk+wW0XgOQSVQzMdkHirofJUDTtNU0 VO/44ubSRHaZTMHNxeWdRyT6s+i9PJb08vxmaBQvxjI0rGmKH5gWfTzqZnPBjURk4v02PXNgw10P S/pZgLMHoZddvShvVpRGR2TKcBQkRWMr3z6oYPX4966hf2kdWbMBeDo9wSHoA3EENH1+8CQLmnYG 58M= =1d3Q -----END PGP SIGNATURE-----