Bug 242645

Summary: sysutils/fusefs-exfat: cannot set modification timestamp (utimes(2))
Product: Ports & Packages Reporter: Martin Birgmeier <d8zNeCFG>
Component: Individual Port(s)Assignee: Oleksii Samorukov <samm>
Status: New ---    
Severity: Affects Only Me CC: d8zNeCFG
Priority: --- Flags: bugzilla: maintainer-feedback? (samm)
Version: Latest   
Hardware: Any   
OS: Any   

Description Martin Birgmeier 2019-12-15 09:03:11 UTC
- FreeBSD 12.1
- All ports recompiled for 12.1
- Using a combination of tar cf - ... | ( cd <exfat-fs> ; tar xfp - ) to copy files to an exfat-formatted SD card

- Since a few weeks, the receiving tar gives messages like

x <filename>: Can't restore time

- I believe this started to happen when I installed FreeBSD 12.1 and recompiled all ports
- The file contents are otherwise o.k. (verified using diff -r)

Scenario (continued):
- I have written a small utility "cptimes" which copies the atime and mtime from one file to another

- Trying to use this utility to correct these times manually results in

[1]% cptimes <sourcefile> <destinationfile>
<destinationfile>: Operation not permitted

-- Martin
Comment 1 Martin Birgmeier 2019-12-15 09:06:47 UTC
One more note: The same commands on another SD-card which is formatted as NTFS and uses sysutils/fusefs-ntfs work fine.
Comment 2 Oleksii Samorukov freebsd_committer 2020-05-03 20:51:16 UTC
Unable to reproduce and issue is most likely related to the damaged fs on the target sd card.

# mdconfig -a -s 1g

# mkfs.exfat /dev/md0
mkexfatfs 1.3.0
Creating... done.
Flushing... done.
File system created successfully.

# fsck.exfat /dev/md0
exfatfsck 1.3.0
Checking file system on /dev/md0.
File system version           1.0
Sector size                 512 bytes
Cluster size                 32 KB
Volume size                   1 GB
Used space                  288 KB
Available space               1 GB
Totally 0 directories and 0 files.
File system checking finished. No errors found.

Below is a test provided by me:

# mount.exfat /dev/md0 /mnt/
FUSE exfat 1.3.0

[root@bunny /mnt]# echo test > test
[root@bunny /mnt]# ls -l
total 32
-rwxrwxrwx  1 root  wheel  5 May  3 22:43 test

# rsync -a /etc/hosts /mnt/hosts

# ls -l /mnt/hosts
-rwxrwxrwx  1 root  wheel  1116 Nov 28 14:36 /mnt/hosts

# touch -d "2018-01-02T22:13:14" /mnt/hosts

# stat /mnt/hosts
18446744073391374205 4 -rwxrwxrwx 1 root wheel 0 1116 "Jan  2 22:13:14 2018" "Jan  2 22:13:14 2018" "Jan  2 22:13:14 2018" "Jan  1 00:59:59 1970" 4096 64 0 /mnt/hosts

Also i tested that timestamp persist after remount. My recommendation would be to reformat the card and start from scratch. Feel free to reopen if needed.
Comment 3 Martin Birgmeier 2020-05-04 11:42:50 UTC
O.k. thank you for checking.

-- Martin
Comment 4 Martin Birgmeier 2021-08-01 06:44:11 UTC
Setting file times on exfat is still not working - and now I have also found out why it could not be reproduced: It is working only for the root user but not for a regular user.

This is the fstab line used for mounting:

/dev/diskid/DISK-12345678s1     /d/69s1 exfat   rw,noauto,mountprog=/usr/local/sbin/mount.exfat 0 0

-- Martin
Comment 5 Martin Birgmeier 2021-08-01 06:47:55 UTC
... and the problem probably is that even though the manpage states

       uid=n  Set the owner for all files and directories.  The default is the
              owner of the current process.

       gid=n  Set the group for all files and directories.  The default is the
              group of the current process.

all files are instead owned by root, even though they are being written by another user.

This can be seen by writing some files to the exfat filesystem as another user and then listing them - they are all owned by root.

-- Martin
Comment 6 Martin Birgmeier 2021-08-01 09:24:43 UTC
Furthermore, calls to chown and chgrp should silently succeed instead of returning with an error code. Exfat does not support the concept of an owner, so changing to any owner should just be fine.

-- Martin