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


13

PC 또는 랩톱에서 USB 드라이브로 복사 한 파일의 타임 스탬프에 문제가 있습니다. 원본 파일의 마지막 수정 시간과 복사 한 파일의 수정 시간이 다릅니다. 따라서 PC와 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. 보시다시피, 복사 된 파일의 마지막 수정 시간에서 초는 10 진수로 잘립니다. 그러나 명령을 입력하면

    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와 랩톱에서 동일하더라도 파일의 마지막 수정 시간이 내 PC와 랩톱 에서 다르게 표시되므로 상황이 더욱 복잡해 집니다.

추가 정보

내 PC와 노트북 모두 위에서 설명한 동작을 보여줍니다. 내 PC에는 Ubuntu 14.04.5 (trusty)가 있고 랩톱에는 Ubuntu 16.04.2 (xenial)가 있습니다.

내 USB 드라이브에는 vfat 파일 시스템이 있습니다. mount | grep CORSAIR 내 PC 의 출력 은

/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 드라이브도 동일한 동작을 보여줍니다.

질문

마지막 수정 시간의 차이를 어떻게 든 제거 할 수 있습니까? 예를 들어, 마운트 / 마운트 해제시 다른 파라미터를 사용합니까? 아니면 우분투의 버그입니까?

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


리눅스 ext4파일 시스템 과 같은 USB 드라이브에 다른 파일 시스템을 만드 시겠습니까? (Linux 독점 파일 시스템 인 FAT32, exFAT, NTFS에 대한 지원에는 약간의 제한이 있습니다.) 이 링크 는 Microsoft 독점 파일 시스템에 대한 대안 ext4뿐만 아니라 udf대안으로 제시됩니다.
sudodus

답변:


17

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

분명히 파일 시스템이 마운트되어 있으면 파일 시스템 드라이버는 타임 스탬프를 1 초 해상도로 정확하게 캐싱하지만 (POSIX 요구 사항을 충족시키기 위해) 파일 시스템이 마운트 해제되면 캐시가 지워지고 실제로 기록 된 내용을 볼 수 있습니다 파일 시스템 디렉토리

PC와 랩톱의 2 시간 차이는 아마도 시간대 설정 및 / 또는 VFAT 파일 시스템의 기본 마운트 옵션이 다르기 때문일 수 있습니다. (UTC 오프셋이 현재 2 시간 (양수 또는 음수) 인 시간대에 있다고 생각합니다.)

내부적으로 Linux는 Unix 스타일 파일 시스템에서 UTC 타임 스탬프를 사용합니다. 그러나 VFAT 파일 시스템에서 (현재) 기본값은 VFAT 파일 시스템 타임 스탬프에서 현지 시간을 사용하는 것입니다. MS-DOS가 수행 한 작업과 Windows가 여전히 그렇기 때문입니다. 그러나 이에 영향을 줄 수있는 두 가지 마운트 옵션이 있습니다 tz=UTC. VFAT 파일 시스템에서 UTC 기반 타임 스탬프를 사용 하도록 마운트 옵션 을 지정 하거나이 time_offset=<minutes>특정 파일 시스템과 함께 사용할 시간대 오프셋을 명시 적으로 지정할 수 있습니다 .

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


답변 주셔서 감사합니다. mount | grep CORSAIR랩톱 의 출력으로 내 질문을 완료 했는데 실제로 PC의 출력과 다릅니다. 또한, 당신 말이 맞아요, 나는 중부 유럽의 CEST (= UTC + 2) 시간대에 위치하고 있습니다.
K. Gabor

이러한 마운트 출력 중 어느 것도 타임 스탬프에 영향을 미치는 마운트 옵션을 포함하지 않는 것 같습니다. 따라서 VFAT 타임 스탬프에 대한 기본 처리는 해당 Ubuntu 버전 사이의 커널 수준에서 변경되어야한다고 생각합니다. USB 드라이브에 대한 항목을 쓰는 경우 udisks에는 현대식 이에 지정된 마운트 옵션을 존중해야 /etc/fstab합니다.
telcoM

0

내 질문에 " vfat파일 시스템을 USB 드라이브에 유지하고 싶다"고 썼지 만 결국 ntfs파일 시스템으로 다시 포맷했습니다 . Linux와 Windows 모두 처리 할 수 ntfs있으며 위에서 설명한 타임 스탬프에서 이상한 현상이 나타나지 않는 것 같습니다.


예, NTFS는 UTC 시간을 기준으로 모든 파일 타임 스탬프를 64 비트 숫자로 저장하므로 100 나노초의 해상도를 가지며 날짜 범위는 1601 년 1 월 1 일부터 60056 년 5 월 28 일까지입니다. 충분합니다. 더 중요한 것은 VFAT 파일 시스템이 가지고있는 표준 시간대 모호성을위한 장소가 없다는 것입니다.
telcoM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.