On Fri, Jan 17, 2020 at 12:49:09PM -0500, gwes wrote:
> On 1/17/20 4:20 AM, Otto Moerbeek wrote:
> > On Thu, Jan 16, 2020 at 09:20:58PM -0800, William Ahern wrote:
> >
> > > On Thu, Jan 16, 2020 at 01:16:47PM +0100, Otto Moerbeek wrote:
> > > > On Thu, Jan 16, 2020 at 11:20:10AM +0000, gritzmann wrote:
> > > >
> > > > > Hi,
> > > > >
> > > > > How do I change the birth time of a file? `touch -acm -d "1980-01-01
> > > > > 00:00:00" myfile` changes only the access, modify and change times.
> > > > >
> > > > > `stat myfile` returns `10 215746 -rw-r--r-- 1 me me 0 0 "JanĀ 1
> > > > > 00:00:00 1980" "JanĀ 1 00:00:00 1980" "Jan 16 13:00:33 2020" 16384 0
> > > > > 0 myfile`
> > > > >
> > > > > Thanks!
> > > > >
> > > > > Sent with ProtonMail Secure Email.
> > > > >
> > > > Change time != creation time. There is no such thing as creation time
> > > > in unix.
> > > Not in Unix, but with UFS2 FreeBSD added birth time, which is documented
> > > everywhere--including in source code--as being synonymous with "creation
> > > time". OpenBSD added the st_birthtime field to struct stat in 2004,
> > >
> > >
> > > https://cvsweb.openbsd.org/src/sys/sys/stat.h?rev=1.14&content-type=text/x-cvsweb-markup
> > >
> > > https://github.com/openbsd/src/commit/cc2fc615c6e2dee87e5a3cd5a655a2ee5ef778c8
> > >
> > > but as far as I can tell it's not set anywhere in the kernel.
> > >
> > > FWIW, birth time has been adopted by ext4, ZFS, AFS, HAMMER2, and possibly
> > > other file systems, but only the *BSDs seem to have added st_birthtime in
> > > struct stat. On Linux it's stx_btime in struct statx, and as best I can
> > > tell
> > > Solaris requires querying the A_CRTIME (creation time?) attribute using
> > > getattrat. None of this is particularly relevant to OpenBSD, and I don't
> > > mean to advocate, but after having done the leg work I feel like I should
> > > commit this to an archive for posterity...
> > >
> > > > The change time (c_time in struct stat) cannot be explicitly set by
> > > > any API and is maintained by the kernel.
> > > As far as I can tell from the FreeBSD man page for utimes and friends,
> > > this
> > > is likewise true for birth time.
> > >
> > Thanks for this detailed extra info. I was vaguely aware that some
> > filesystem implementations have a creation time, but
> >
> > - it is not in Posix and, even if *some* filesystems have it,
> > - there is no API to set it and no generally accepted API to get it.
> >
> > -Otto
> >
> If these times were intended to help backup programs determine whether
> a particular inode's content and attributes have changed since the last
> backup (as I added and used them for backup purposes under TOPS-10)
> then there must not be any way for any program to modify them. The kernel
> must only change them if it changes the file in such a way that a backup
> is out of date.
>
> I suspect this is the reason for these fields. If not, they should be
> used for that purpose.
>
m_time and c_time are enough for backup purposes. If any of them is
more recent than the latest backup time, the file (or its attributes)
have changed and should be included in the current backup.
-Otto