VFAT, Linux: Invalid file timestamps shown after a reboot
2
votes
1
answer
688
views
Just encountered a problem: when rebooting a Linux system, timestamps of all files in the mounted VFAT filesystem are shown in the incorrect timezone. It seems like a device starts thinking that its local time is in UTC, so it displays all timestamps with the shift.
Steps to reproduce:
- Create some small FAT-formatted image:
dd if=/dev/zero of=small.img bs=1M seek=1 count=0
mkfs.vfat small.img
- Mount this image locally:
mount -t vfat -o umask=0022,gid=1001,uid=1001 small.img mnt
- Set the timezone to some non-UTC one;
- Create a file in the mounted filesystem (ie. touch mnt/newfile
)
- Observe the file modification/change timestamps: they are correct, concerning the currently set one:
stat mnt/newfile
File: mnt/newfile
Size: 0 Blocks: 0 IO Block: 16384 regular empty file
Device: 700h/1792d Inode: 40 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-22 12:19:56.000000000 +0100
Modify: 2021-03-22 12:19:56.000000000 +0100
Change: 2021-03-22 12:19:56.000000000 +0100
Birth: -
timedatectl
Local time: Mon 2021-03-22 12:19:07 CET
Universal time: Mon 2021-03-22 11:19:07 UTC
RTC time: Mon 2021-03-22 11:19:07
Time zone: Europe/Vienna (CET, +0100)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
- Unmount the filesystem, to check if anything has been changed with the remount:
umount mnt; mount -t vfat -o umask=0022,gid=1001,uid=1001 small.img mnt; stat mnt/newfile
File: mnt/newfile
Size: 0 Blocks: 0 IO Block: 16384 regular empty file
Device: 700h/1792d Inode: 64 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-22 00:00:00.000000000 +0100
Modify: 2021-03-22 12:19:56.000000000 +0100
Change: 2021-03-22 12:19:56.000000000 +0100
Birth: -
- Reboot the system;
- Mount the image once more, have a look at the created file's timestamps:
File: mnt/newfile
Size: 0 Blocks: 0 IO Block: 16384 regular empty file
Device: 700h/1792d Inode: 26 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-22 01:00:00.000000000 +0100
Modify: 2021-03-22 13:19:56.000000000 +0100
Change: 2021-03-22 13:19:56.000000000 +0100
Birth: -
It can be clearly observable, that the time is shifted forward by 1 hour (12:10 to 13:19), while the timezone is shown the same - +0100. Looks like mount
now thinks that the file timestamps were recorded in UTC, so it tries to display them with the "correct" shift.
To check the validity of the previous statement, let's remount the same filesystem with the tz=UTC
option explicitly:
mount -t vfat -o umask=0022,gid=1001,uid=1001,tz=UTC small.img mnt; stat mnt/newfile
File: mnt/newfile
Size: 0 Blocks: 0 IO Block: 16384 regular empty file
Device: 700h/1792d Inode: 50 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-22 01:00:00.000000000 +0100
Modify: 2021-03-22 13:19:56.000000000 +0100
Change: 2021-03-22 13:19:56.000000000 +0100
Birth: -
Even though the system's timezone is CET indeed:
date
Mon Mar 22 12:26:42 CET 2021
P.S. https://stackoverflow.com/questions/10068855/how-do-i-get-the-correct-modified-datetime-of-a-fat32-file-regardless-of-timezo is not an answer to this question, since I can't get from it, why is this change seen right after reboot of the machine and not after a remount? If vfat stores timestamps in local time, why does mount after rebooting assumes that the timestamps are in UTC rather than local time?
Asked by vmlinuz
(41 rep)
Mar 22, 2021, 06:33 PM
Last activity: Mar 24, 2021, 05:18 PM
Last activity: Mar 24, 2021, 05:18 PM