linux: 터치 날짜 정밀도

linux: 터치 날짜 정밀도

내 Linux 시스템에서 현재 날짜 "t1"을 표시하고 "f" 파일을 터치한 다음 해당 "f"의 수정 시간 "t2"를 표시하면 t1 < t2가 될 것으로 예상됩니다.

하지만 내 시스템에서 이 작업을 수행할 때 항상 그런 결과를 얻는 것은 아닙니다.

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

출력 예:

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

두 번째 타임스탬프(통계)는 첫 번째 타임스탬프(날짜) 이전입니다: 855229801 > 853831698

내 파일 시스템은 ext4이지만 동일한 효과로 tmpfs의 파일을 사용해 보았습니다. 왜 그럴까요?

감사해요


설정에 대한 일부 정보

% 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

답변1

모든https://stackoverflow.com/questions/14392975/timestamp-accuracy-on-ext4-sub-millsecond:

ext4 파일 시스템 코드는 current_fs_time()현재 캐시된 커널 시간을 호출하며 파일 시스템 수퍼 블록에 지정된 시간 단위(ext4의 경우 1ns)로 잘립니다.

Linux 커널의 현재 시간은 캐시되며 일반적으로 타이머가 중단될 때만 업데이트됩니다. 따라서 타이머 인터럽트가 10밀리초에 실행되면 캐시 시간은 10밀리초마다 업데이트됩니다. 업데이트가 발생하면 결과 시간의 정확성은 하드웨어에서 사용 가능한 클럭 소스에 따라 달라집니다.

관련 정보