USB 드라이브에 복사된 파일의 타임스탬프

USB 드라이브에 복사된 파일의 타임스탬프

PC나 노트북에서 USB 드라이브로 복사한 파일의 타임스탬프에 문제가 있습니다. 원본 파일의 마지막 수정 시간과 복사된 파일의 마지막 수정 시간이 다릅니다. 따라서 내 컴퓨터와 USB 드라이브 간의 파일을 동기화하는 것은 매우 번거롭습니다.

단계별 설명

  1. GUI 또는 명령을 사용하여 PC/노트북에서 USB 드라이브로 임의의 파일을 복사합니다.

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. 원본 파일의 마지막 수정 시간을 확인합니다.

    $ ls -l --time-style=full-iso file.txt
    -rw-rw-r-- 1 gabor gabor 0 2018-09-22 15:09:23.317098281 +0200 file.txt
    
  3. 복사된 파일의 마지막 수정 시간을 확인합니다.

    $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt
    -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:23.000000000 +0200 /media/gabor/CORSAIR/file.txt
    
  4. 보시다시피, 복사된 파일의 마지막 수정 시간의 초는 소수 자릿수 0으로 잘립니다. 그러나 명령을 입력하면

    if ! [ file.txt -nt /media/gabor/CORSAIR/file.txt ] && ! [ file.txt -ot /media/gabor/CORSAIR/file.txt ]; then echo "The last modification times are equal."; fi
    

나는 출력을 얻는다The last modification times are equal.

  1. USB 드라이브를 마운트 해제했다가 다시 마운트하고 마지막 두 명령을 다시 실행하면 상황이 변경됩니다.

    $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt
    -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:22.000000000 +0200 /media/gabor/CORSAIR/file.txt
    $ if [ file.txt -nt /media/gabor/CORSAIR/file.txt ]; then echo "The file is newer on the PC."; fi
    The file is newer on the PC.
    
  2. 따라서 다시 마운트한 후에는 복사된 파일의 마지막 수정 시간이 1초 더 단축됩니다. 그러나 추가 마운트 해제 및 다시 마운트는 더 이상 마지막 수정 시간에 영향을 미치지 않습니다. 또한 이제 파일 테스트를 통해 PC에 있는 파일이 최신 파일인 것으로 나타났습니다(그렇지 않더라도).

파일이 마지막으로 수정된 시간이 표시되므로 상황은 더욱 복잡해집니다.내 컴퓨터와 노트북이 다릅니다., PC와 노트북의 날짜와 시간 설정이 동일하더라도 정확히 2시간 정도의 차이가 있습니다!

추가 정보

내 컴퓨터와 노트북 모두 위의 동작을 표시합니다. 내 PC에는 Ubuntu 14.04.5(trusty)가 있고 내 노트북에는 Ubuntu 16.04.2(xenial)가 있습니다.

내 USB 드라이브에는 vfat 파일 시스템이 있습니다. 산출mount | grep CORSAIR 내 컴퓨터에

/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

산출mount | grep CORSAIR 내 노트북에

/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

다른 USB 드라이브도 동일한 동작을 보입니다.

질문

최종 수정 시간의 차이를 어떻게든 없앨 수 있나요? 예를 들어 설치/제거 시 다른 매개변수를 사용하시겠습니까? 아니면 우분투의 버그인가요?

동기화가 보다 효율적으로 수행될 수 있도록 원본 파일과 복사된 파일의 타임스탬프가 정확히 동일하도록 하고 싶습니다. 또한 Windows에서도 사용할 수 있도록 USB 드라이브에 vfat 파일 시스템을 보관하고 싶습니다.

답변1

타임스탬프 초 변화의 문제는 VFAT(예, FAT32라도) 파일 ​​시스템이 수정 시간을 2초 해상도로만 저장한다는 사실에서 비롯됩니다.

분명히 파일 시스템 드라이버는 파일 시스템이 마운트되어 있는 동안(아마도 POSIX 요구 사항을 충족하기 위해) 정확한 1초 해상도로 타임스탬프를 캐시하지만, 파일 시스템이 마운트 해제되면 캐시가 지워지고 파일 시스템에 실제 기록된 내용을 볼 수 있습니다. 예배 규칙서.

PC와 노트북 사이의 2시간 차이는 시간대 설정 및/또는 VFAT 파일 시스템의 기본 설치 옵션이 다르기 때문에 발생할 수 있습니다. (귀하의 시간대의 현재 UTC 오프셋은 양수이든 음수이든 2시간인 것 같습니다.)

내부적으로 Linux는 Unix 스타일 파일 시스템에서 UTC 타임스탬프를 사용하지만 VFAT 파일 시스템에서는 (현재) 기본값은 VFAT 파일 시스템 타임스탬프에서 로컬 시간을 사용하는 것입니다. 왜냐하면 이것이 MS-DOS 방식이고 Windows에서는 여전히 그렇게 하기 때문입니다. 그러나 이에 영향을 미칠 수 있는 두 가지 마운트 옵션이 있습니다. tz=UTCVFAT 파일 시스템에서 UTC 기반 타임스탬프를 사용하도록 마운트 옵션을 지정하거나 이를 사용하여 time_offset=<minutes>이 특정 파일 시스템 수량에 사용할 시간대 오프셋을 명시적으로 지정할 수 있습니다.

Ubuntu 14.04와 16.04 사이의 VFAT 기본 마운트 옵션이 udisks커널 또는 이동식 미디어 도우미 서비스에서 변경되어 2시간의 차이가 발생할 수 있습니다.

답변2

vfat" USB 드라이브에 파일 시스템을 유지하고 싶습니다"라는 질문에 작성했지만 결국 ntfs파일 시스템으로 다시 포맷하게 되었습니다. Linux와 Windows 모두 이 문제를 처리하며 ntfs위에서 설명한 타임스탬프와 함께 이상한 동작을 나타내지 않는 것 같습니다.

관련 정보