linux: precisão de data de toque

3

No meu sistema linux, se eu exibir a data atual "t1", toque em um arquivo "f" e exiba a hora da modificação "t2" daquele "f" Eu esperaria que t1 < t2.

Mas não é isso que sempre consigo quando executo isso no meu sistema:

date +'%Y-%m-%d %H:%M:%S.%N'; \
touch f; \
stat -c %y f

Exemplo de saída:

2017-09-18 21:47:48.855229801
2017-09-18 21:47:48.853831698 +0200

Observe que o segundo registro de data e hora (stat) é anterior ao primeiro (data): 855229801 > 853831698

Meu fs é ext4, mas eu também tentei com um arquivo em tmpfs, mesmo efeito. Por que isso acontece?

Obrigado

Algumas informações sobre a configuração

% which date
/usr/bin/date

% which touch
/usr/bin/touch

% pacman -Qo /usr/bin/date /usr/bin/touch
/usr/bin/date is owned by coreutils 8.28-1
/usr/bin/touch is owned by coreutils 8.28-1

% uname -a
Linux machine 4.12.12-1-ARCH #1 SMP PREEMPT Sun Sep 10 09:41:14 CEST 2017 x86_64 GNU/Linux

% findmnt
TARGET                                SOURCE     FSTYPE    OPTIONS
/                                     /dev/sda1  ext4      rw,relatime,data=ordered
└─/tmp                                tmpfs      tmpfs     rw,nosuid,nodev
    
por piec 18.09.2017 / 22:30

1 resposta

4

Por link :

ext4 filesystem code calls current_fs_time() which is the current cached kernel time truncated to the time granularity specified in the file system's superblock which for ext4 is 1ns.

The current time within the Linux kernel is cached, and generally only updated on a timer interrupt. So if your timer interrupt is running at 10 milliseconds, the cached time will only be updated once every 10 milliseconds. When an update does occur, the accuracy of the resulting time will depend on the clock source available on your hardware.

    
por 18.09.2017 / 23:37