Preventing file access time modification

John Scott via Duplicity-talk <[email protected]> Sun, 02 Aug 2026 21:43:54 +0000
Newsgroups gmane.comp.sysutils.backup.duplicity.general
Message-ID <[email protected]>
--===============6961519653248067931==
Content-Type: multipart/signed; micalg="sha-256"; protocol="application/pkcs7-signature";
	boundary="=-BzQpblKQWlcqPu3ZCd50"


--=-BzQpblKQWlcqPu3ZCd50
Content-Type: multipart/signed; micalg="pgp-sha512";
	protocol="application/pgp-signature"; boundary="=-1+we+xOiCj3nmAR9hjs0"


--=-1+we+xOiCj3nmAR9hjs0
Content-Type: multipart/mixed; boundary="=-Ipu/G5dutJ1P5N5rub2w"

--=-Ipu/G5dutJ1P5N5rub2w
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi,
It appears the last discussion on this was almost 20 years ago, so only bec=
ause it's been so long, I would like to affirm interest in using Duplicity,=
 such that it does not update the file access timestamps when reading from =
the filesystem to back it up. For completeness I'll partly be re-hashing so=
me of the discussion points herein.

Virtually all UNIX-like systems keep a timestamp of when a file was last ac=
cessed, although it's common for there to be limitations on when the timest=
amp is updated, such as with filesystem mount options (like relatime). Whet=
her this is still a useful feature may be up for debate, but it certainly c=
an be useful in some circumstances: for system auditing, perhaps, or to fin=
d cruft that isn't used anymore. If Duplicity updates the access timestamp =
of virtually every file on a source filesystem in the course of backing it =
up, that effectively "poisons the well" and makes the timestamps useless fo=
r almost all purposes.
In the previous thread about this, there was talk about determining the acc=
ess timestamp for a file, copying it, and "restoring" the timestamp. This w=
ould still be hideous today, but at least it'd be portable: the futimens() =
and utimensat() functions were standardized in POSIX.1-2008 [1] and can pro=
bably be used from Python.
A more sensible way to do this, at least on Linux, is with the O_NOATIME op=
en() option. The constant is available to Python programs [2] and is not de=
fined on operating systems that don't have such a concept. Also, a short di=
scussion on whether backup programs should try using O_NOATIME at all, and =
a comparison of existing practices, is available at [3]. It should be strai=
ghtforward to resolve the concerns there by making this functionality confi=
gurable with a command-line option.

In the short-term, I'm going to try a couple hacks and see if they can get =
me by:
 =E2=80=A2 make an LD_PRELOAD-able shared library that provides a wrapper a=
round open() to forcefully pass O_NOATIME, and hope the Python interpreter =
picks up on it
 =E2=80=A2 Linux's overlayfs allegedly does not update the access time for =
lower-layer filesystems [4], although this is perceived as a defect. If I m=
ake a disposable overlayfs on-the-fly, this might yield a new source filesy=
stem I can use.

I'll give the former a try and plan to report back soon.

[1] https://pubs.opengroup.org/onlinepubs/9799919799/functions/futimens.htm=
l
[2] https://github.com/python/cpython/issues/45086 and https://docs.python.=
org/3/library/os.html#os.O_NOATIME
[3] https://github.com/syncthing/syncthing/pull/6809#issuecomment-653032388
[4] https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html#non-s=
tandard-behavior

--=-Ipu/G5dutJ1P5N5rub2w
Content-Type: message/rfc822; name="Preventing access time modification.eml"
Content-Description: [Duplicity-talk] Preventing access time modification?
Content-Disposition: inline; filename="Preventing access time modification.eml"

Received: from mailman by lists.gnu.org with archive (Exim 4.43)
	id 1Hy13L-0007mc-4v
	for [email protected]; Tue, 12 Jun 2007 03:44:35 -0400
Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43)
	id 1Hy13K-0007lR-4U
	for [email protected]; Tue, 12 Jun 2007 03:44:34 -0400
Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43)
	id 1Hy13I-0007jv-WD
	for [email protected]; Tue, 12 Jun 2007 03:44:33 -0400
Received: from [199.232.76.173] (helo=monty-python.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.43) id 1Hy13I-0007jj-T0
	for [email protected]; Tue, 12 Jun 2007 03:44:32 -0400
Received: from symlink.to.noone.org ([85.10.207.172] helo=sym.noone.org)
	by monty-python.gnu.org with esmtp (Exim 4.60)
	(envelope-from <[email protected]>) id 1Hy13I-0006Uw-6X
	for [email protected]; Tue, 12 Jun 2007 03:44:32 -0400
Received: by sym.noone.org (Postfix, from userid 1000)
	id F17238943DE; Tue, 12 Jun 2007 09:44:27 +0200 (CEST)
Date: Tue, 12 Jun 2007 09:44:27 +0200
From: Axel Beckert <[email protected]>
To: Duplicity Discussion <[email protected]>
Message-ID: <[email protected]>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Organization: DeuxChevaux.org -- The =?iso-8859-1?Q?Citr?=
	=?iso-8859-1?B?b+tu?= 2CV Database
X-Operating-System: Linux 2.6.8-11-amd64-k8
X-Machine: sym x86_64
X-Editor: GNU Emacs 21.4.1
User-Agent: Mutt/1.5.9i
X-detected-kernel: Linux 2.4-2.6
Subject: [Duplicity-talk] Preventing access time modification?
X-BeenThere: [email protected]
X-Mailman-Version: 2.1.5
Precedence: list
Reply-To: Discussion of the backup program duplicity
	<[email protected]>
List-Id: Discussion of the backup program duplicity
 <duplicity-talk.nongnu.org>
List-Unsubscribe:  <http://lists.nongnu.org/mailman/listinfo/duplicity-talk>,
	<mailto:[email protected]?subject=unsubscribe>
List-Archive: <http://lists.gnu.org/pipermail/duplicity-talk>
List-Post: <mailto:[email protected]>
List-Help: <mailto:[email protected]?subject=help>
List-Subscribe: <http://lists.nongnu.org/mailman/listinfo/duplicity-talk>,
	<mailto:[email protected]?subject=subscribe>
X-List-Received-Date: Tue, 12 Jun 2007 07:44:34 -0000
Content-Transfer-Encoding: quoted-printable

Hi,

I guess this is something for the wishlist, but it shouldn't be too
hard to implement:

I'm using duplicity to backup a classical unix mailserver where
mailboxes are not only read using IMAP or POP but also logged in users
locally on the filesystem.

And there's one big annoyance: Many classical unix text-mode MUAs
recognize mailboxes with new, unread mail by comparing modification
time with (read) access time. If the last one is older, there must be
new unread mail in mailbox. But if duplicity runs in the nightly
backup run, it changes the access time and therefore, the MUAs think,
there's no new mail in that mailbox.

This is especially annoying if you automatically sort your incoming
mails into a lots of folder and then read the mails in those folders
with new mail, because you will miss all folders where new mail came
in before but not after the backup job. Short said: duplicity marks
mail folders it backupped as read.

Since this feature will have a (probably only slight, but still
recognizable) performance loss when reading and comparing files and
there are probably uses where this such a feature is not wanted, it
should be only optional, i.e. activated by a switch like e.g.
"--no-access-time-modification".

(Unfortunately I'm much more the Perl guy than the Python guy, so I
can't offer a patch.)

		Regards, Axel
--=20
/~\                                    | Axel Beckert
\ /  Plain Text Ribbon Campaign        | [email protected]
 X   Say No to HTML in E-Mail and News | [email protected]
/ \                                    | http://noone.org/abe/



--=-Ipu/G5dutJ1P5N5rub2w--

--=-1+we+xOiCj3nmAR9hjs0
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----

iPsEABYKAKMWIQSiPzylvTnZ6xisfzWz9N0oYfTNugUCam+6DXIYaHR0cHM6Ly9q
b2huc2NvdHQubWUvLndlbGwta25vd24vbmkvc2hhLTI1Ni9zWUF3OTN6QUVrRkIy
RDREM1hOemRSeHEyMFBjNnByZGdtbEVWeXo0QUZRP2N0PWFwcGxpY2F0aW9uJTJG
cGdwLWtleXMSHGpzY290dEBwb3N0ZW8ubmV0AAoJELP03Shh9M26tYwBAO/m7YYm
9a95y8gbwe38dJlcdFf2u6S3yeN91g91cbK9AQDcV4BIxXyLzCuMO1K1wPTWS43Z
zczmBwxJ2cwKJr5BAQ==
=G69U
-----END PGP SIGNATURE-----

--=-1+we+xOiCj3nmAR9hjs0--

--=-BzQpblKQWlcqPu3ZCd50
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Disposition: attachment; filename="smime.p7s"
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCFKkw
ggajMIIEi6ADAgECAhBeWQSjcMYmnmBZPA/x5yy9MA0GCSqGSIb3DQEBDQUAMIGAMQswCQYDVQQG
EwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVt
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3Jr
IENBIDIwHhcNMjYwMzA1MDgyODU3WhcNMzYwMjIxMDgyODU3WjBTMQswCQYDVQQGEwJQTDEhMB8G
A1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSEwHwYDVQQDDBhDZXJ0dW0gU01JTUUgRzEg
UjM2IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDHrSfSl9si6Wek+uwLiN0e
TgxQTAXTz1HaGbv+STlJIJ6/JE6UKURV3UxTEtAk1FLVZ1NdwLiYdQnGFOyIJ85iZYm7oVKxkpoo
owyg8/I0VEcKkocjS0xOi4HIlW2sjlGDTGpkC2yM1dfRiLXobXJIH+mxO5PMbrpo2n3Fa7D3R4MJ
m6t6LXuVWGV1LZJKht7fr4oHm69D4RRWrHEBetqGU1WeZ+Cv98XGs6qH4CPHJPhDG7wNVC2phcbO
EVOp74snpow/o5rUXsCuo0S7C7WpWGd6WKJ5rap4eLNK0hhpUKFpnqnUuYBOEmxO+Hic3S/axD3Y
B31krq+Ww+KXyH8L60aO6s86ds1BpSUBt93EA4WZLHhWVcWnUd6kSyBc8Jgzmw4NIBRWH6n7+yUo
9Q8g6ort7su0qcLHQFSGtecLdjMSI78rlUjzcqaVEutETN+XXfB0plGnrbi+sHI7lIrUR1jSkr9z
P7z+prSmEn5szIUcb/0SfpVAGx3KQ8NqgQWe26Mk7bdfYlBKXAGkYVNjjwedSelRIphMtuEBxmXu
HQZTq4OUpvBSBFvrrdrq9NUA4Vj08zPFbaa8a5rlGGFLll8ZSHsBo41oWIQzjH7B+ZnHJKNjGO+i
E8LzDXIJikIquSGgM+Mne2Cc9NGYx4gYfYCR+oESnfGw00c8VeYV0QIDAQABo4IBQzCCAT8wcgYI
KwYBBQUHAQEEZjBkMDgGCCsGAQUFBzAChixodHRwOi8vc3ViY2EucmVwb3NpdG9yeS5jZXJ0dW0u
cGwvY3RuY2EyLmNlcjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAf
BgNVHSMEGDAWgBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAPBgNVHRMBAf8EBTADAQH/MDYGA1UdHwQv
MC0wK6ApoCeGJWh0dHA6Ly9zdWJjYS5jcmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwHQYDVR0lBBYw
FAYIKwYBBQUHAwQGCCsGAQUFBwMCMA4GA1UdDwEB/wQEAwIBBjARBgNVHSAECjAIMAYGBFUdIAAw
HQYDVR0OBBYEFCXkawV+8UIByJC9aCTAONF1upo0MA0GCSqGSIb3DQEBDQUAA4ICAQBmrvqNAS45
nYjDe9BCythBvajfK9HQxI0hgwxNnw+QqqPBsLEQ16BfeIjWe/YsrzkCztmXa2GGjpMYmMcQSEI0
HXeHcOOnyzO0sHzkLcdzbqsAb1RiahaN2GykAqevkKqT5KHrMaeOA7hPH4emMSvBi9VVtWGelnM7
RUfpfQ2S2VNT9l8lPAsO/kwpmLRvQ/HU68LGLOAYrDpEBsYQja5Nv+imSbSJsdsJzIfgJ6gIT5BS
0agTyYSJNMPdACVG42q8+wQ6Z6ErAkOnRXcQQZ3d65SeUBM5WwAvMJtitfA8Agh8LqNRD2fCnmEM
IAXc5Y7U0P9pongwle0bZ9KvinE9cGZuGYSg6JauT/hOczXC2JJwal0y6pUKjzYnuqpEfgz2USY6
CJGEpxX+6PRSUxMXo57ly+bbDXKOOPkz50dfICDhzYqnD2csgHzHOThYMWp+PXNXqJQX+6QkwvbO
yZB+XWYAN7O8mnOKNsZ1t79OcWtJ6SFo9RVjfYrVTy7oI/oi4BQmPbjLLV4RrveCjen9PWUrhmd2
wtf5IflJH1wNkjG+OISk+5oIXgRxJbiDbTr8iVfSiXd3ThCidf3xw8AQSGa1zRIGTLbbl4aYsqqa
qONwRAZTJ+8O5Vcu8gTF6xBhFU4T65T4RiSdy9O7aKjy/h1kBQiTb/LiD6Vn5SU1/zCCBv0wggTl
oAMCAQICEGz9G05+Z6J4mWehEe6879EwDQYJKoZIhvcNAQELBQAwUzELMAkGA1UEBhMCUEwxITAf
BgNVBAoMGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEhMB8GA1UEAwwYQ2VydHVtIFNNSU1FIEcx
IFIzNiBDQSAyMB4XDTI2MDYyOTAyNDQ1OFoXDTI3MDYyOTAyNDAyMlowPjEaMBgGA1UEAwwRanNj
b3R0QHBvc3Rlby5uZXQxIDAeBgkqhkiG9w0BCQEWEWpzY290dEBwb3N0ZW8ubmV0MIICIjANBgkq
hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArWUwTWatki/WO6Z8HexVDPEHyb/dRNfNIiOIcytqmAaG
rcwGZPFbfHkP9SvNjholyCkjXdDBq62c9tdudIFiJ5kdcndLnw2OKgrjUbOA4xjQA5ysBxbI6AJy
3JY65EWC3JnXH/aA5okyCXu+ZNwI+d9AefgX/VVaaqmZhwgfl9I3WuNxNYxGIowHjT+qLgkZgLzV
PHx5gg5D8rxHrMjpTIhrY34Tv5aPHFA8vxnV0yE8/AIXuMpZt7RYn4JvLHD94r7e8okTbS93V1Vo
jHPO5Lp9SvTM9MsLaenFN0GuQjsmAuE/CLv3E1f/socySK7wQbfQ3qjMi+TMFe/GgGegW8Fslp6Q
DaXpxdWKpXkJGAn7llJTkle2JhP8nODQGrLsqBPzzvdW3sOrqpNVoKXu2ud4DMiN563i7mhJcaV5
Z6UZX5clExAlRvUSAJM7cbBWBqpftvldW7tvwq47Ry3m8d8qhOBuhlLkRczP3fpctIQoReI8IpZX
SdF81flbJ2e51DdwqKX4+Mcams+6lLNFt/qCpuliMzzgr73Cct7DMYtK4M+Er9fTLtFGmSyXCaXf
9PdxWaWbuferG+n4Dra4pj1ckXMOIlR+Gen8hdyux64SxYMO1WgUhCOLIeOTJw5O9t32ODACOorw
wT1++l1yBV7cIi8Smbw3mxUoaCD3BCECAwEAAaOCAeAwggHcMAwGA1UdEwEB/wQCMAAwUQYDVR0f
BEowSDBGoESgQoZAaHR0cDovL2NlcnR1bXNtaW1lZzFyMzZjYTIuY3JsLmNlcnR1bS5wbC9jZXJ0
dW1zbWltZWcxcjM2Y2EyLmNybDCBnQYIKwYBBQUHAQEEgZAwgY0wNgYIKwYBBQUHMAGGKmh0dHA6
Ly9jZXJ0dW1zbWltZWcxcjM2Y2EyLm9jc3AtY2VydHVtLmNvbTBTBggrBgEFBQcwAoZHaHR0cDov
L2NlcnR1bXNtaW1lZzFyMzZjYTIucmVwb3NpdG9yeS5jZXJ0dW0ucGwvY2VydHVtc21pbWVnMXIz
NmNhMi5jZXIwHwYDVR0jBBgwFoAUJeRrBX7xQgHIkL1oJMA40XW6mjQwHQYDVR0OBBYEFIPk5h8F
iBPyS27MymMlx5QUChv8MEwGA1UdIARFMEMwCQYHZ4EMAQUBAjA2BgsqhGgBhvZ3AmQCATAnMCUG
CCsGAQUFBwIBFhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMB0GA1UdJQQWMBQGCCsGAQUFBwME
BggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBPAwHAYDVR0RBBUwE4ERanNjb3R0QHBvc3Rlby5uZXQw
DQYJKoZIhvcNAQELBQADggIBAIgwW6upjUUYU41IF1bYaXadInqWEjuhtki8l6ddqW0iF6miwecH
x3EOOV4hzbo4DBLRt+u/EbQx7C4XguwVVP02qoNlSReZCJM3sxLMaIFQUcCYv0DEr1lZVhXYrFnd
IAiCoqT2k+/2xXf1eYxIH8DVmQtKAJ+MWxbv+lndQZtAtcz9YIykRPX4d0b3GIFObZFQWOtZp+Mt
rzqpMtLzSPPwDmLFoBbuaTVHR9AvP/xKbJFH9D54oLewb2tfr7GScW6E+R4MtGM05+dHDGew7din
KE5E1RsBLzwDwbiS7FnuUnDiQjpt6g1bTqdTGVHFtFSeJ2Nysa5Oc3Us6J+xHB912iEeDUKyizQU
YeEa2afv9R1IfRPZh4YTGMJ/DTDqIv9x69e4zcu2rgMX1x86ECUL2XYnEJzyWg6DFGQioWnJK9B1
uxv5XubMmYSWKEI8m2dilRDtPoNWBTlnPYxTgoVIxAsqeeoE1NBMMUccZLFeH/N+0K9ECeXuRqSJ
yGXDYrZWaEUH8/Oudc8mfjH8YWhJPOIydCRk3D8GDaodHhfmA31mVS1uAVeS289tuZGBu0gMBaIh
mRmVGkEYR9VCNtZSaai3Qnlx3ROCc7biSCWx16WBJvqTR3dQ/tw4M7gYUqq9g7d9dJ1rUxH0Dzw3
7NoywmRvRh8nGjvfls4YaIUIMIIG/TCCBOWgAwIBAgIQbP0bTn5noniZZ6ER7rzv0TANBgkqhkiG
9w0BAQsFADBTMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu
MSEwHwYDVQQDDBhDZXJ0dW0gU01JTUUgRzEgUjM2IENBIDIwHhcNMjYwNjI5MDI0NDU4WhcNMjcw
NjI5MDI0MDIyWjA+MRowGAYDVQQDDBFqc2NvdHRAcG9zdGVvLm5ldDEgMB4GCSqGSIb3DQEJARYR
anNjb3R0QHBvc3Rlby5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCtZTBNZq2S
L9Y7pnwd7FUM8QfJv91E180iI4hzK2qYBoatzAZk8Vt8eQ/1K82OGiXIKSNd0MGrrZz21250gWIn
mR1yd0ufDY4qCuNRs4DjGNADnKwHFsjoAnLcljrkRYLcmdcf9oDmiTIJe75k3Aj530B5+Bf9VVpq
qZmHCB+X0jda43E1jEYijAeNP6ouCRmAvNU8fHmCDkPyvEesyOlMiGtjfhO/lo8cUDy/GdXTITz8
Ahe4ylm3tFifgm8scP3ivt7yiRNtL3dXVWiMc87kun1K9Mz0ywtp6cU3Qa5COyYC4T8Iu/cTV/+y
hzJIrvBBt9DeqMyL5MwV78aAZ6BbwWyWnpANpenF1YqleQkYCfuWUlOSV7YmE/yc4NAasuyoE/PO
91bew6uqk1Wgpe7a53gMyI3nreLuaElxpXlnpRlflyUTECVG9RIAkztxsFYGql+2+V1bu2/CrjtH
Lebx3yqE4G6GUuRFzM/d+ly0hChF4jwilldJ0XzV+VsnZ7nUN3Copfj4xxqaz7qUs0W3+oKm6WIz
POCvvcJy3sMxi0rgz4Sv19Mu0UaZLJcJpd/093FZpZu596sb6fgOtrimPVyRcw4iVH4Z6fyF3K7H
rhLFgw7VaBSEI4sh45MnDk723fY4MAI6ivDBPX76XXIFXtwiLxKZvDebFShoIPcEIQIDAQABo4IB
4DCCAdwwDAYDVR0TAQH/BAIwADBRBgNVHR8ESjBIMEagRKBChkBodHRwOi8vY2VydHVtc21pbWVn
MXIzNmNhMi5jcmwuY2VydHVtLnBsL2NlcnR1bXNtaW1lZzFyMzZjYTIuY3JsMIGdBggrBgEFBQcB
AQSBkDCBjTA2BggrBgEFBQcwAYYqaHR0cDovL2NlcnR1bXNtaW1lZzFyMzZjYTIub2NzcC1jZXJ0
dW0uY29tMFMGCCsGAQUFBzAChkdodHRwOi8vY2VydHVtc21pbWVnMXIzNmNhMi5yZXBvc2l0b3J5
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


--=-BzQpblKQWlcqPu3ZCd50--


--===============6961519653248067931==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRHVwbGljaXR5
LXRhbGsgbWFpbGluZyBsaXN0CkR1cGxpY2l0eS10YWxrQG5vbmdudS5vcmcKaHR0cHM6Ly9saXN0
cy5ub25nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZHVwbGljaXR5LXRhbGsK

--===============6961519653248067931==--