Dấu thời gian của các tệp được sao chép vào ổ USB


13

Tôi gặp vấn đề với dấu thời gian của các tệp được sao chép từ PC hoặc máy tính xách tay sang ổ USB: thời gian sửa đổi cuối cùng của tệp gốc và của tệp được sao chép là khác nhau. Do đó, việc đồng bộ hóa các tệp giữa PC và ổ USB của tôi khá cồng kềnh.

Mô tả từng bước

  1. Tôi sao chép một tệp tùy ý từ PC / máy tính xách tay của mình vào ổ USB bằng GUI hoặc bằng lệnh

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. Tôi kiểm tra thời gian sửa đổi cuối cùng của tệp gốc:

    $ 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. Tôi kiểm tra thời gian sửa đổi cuối cùng của tệp được sao chép:

    $ 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. Như bạn có thể thấy, các giây trong thời gian sửa đổi cuối cùng của tệp được sao chép được rút ngắn thành 0 chữ số thập phân. Tuy nhiên, nếu tôi nhập lệnh

    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
    

Tôi nhận được đầu ra The last modification times are equal.

  1. Tình huống thay đổi nếu tôi ngắt kết nối và nối lại ổ USB và tôi thực hiện lại hai lệnh cuối cùng:

    $ 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. Vì vậy, sau khi kết thúc, thời gian sửa đổi cuối cùng của tệp được sao chép sẽ giảm thêm một giây. Tuy nhiên, việc tiếp tục và kết nối lại không ảnh hưởng đến lần sửa đổi cuối cùng nữa. Ngoài ra, thử nghiệm trên các tệp hiện cho thấy tệp trên PC mới hơn (mặc dù không phải vậy).

Tình hình còn phức tạp hơn bởi thực tế là thời gian sửa đổi lần cuối của các tệp được hiển thị khác nhau trên PC và trên máy tính xách tay của tôi , sự khác biệt chính xác là 2 giờ, mặc dù cài đặt ngày và giờ giống nhau trên PC và trên máy tính xách tay của tôi!

Thêm thông tin

Cả PC và máy tính xách tay của tôi đều thể hiện hành vi, được mô tả ở trên. Tôi có Ubuntu 14.04.5 (đáng tin cậy) trên PC và Ubuntu 16.04.2 (xenial) trên máy tính xách tay của tôi.

Ổ USB của tôi có hệ thống tập tin vfat. Đầu ra của mount | grep CORSAIR PC của tôi

/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)

Đầu ra của mount | grep CORSAIR máy tính xách tay của tôi

/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)

Các ổ USB khác của tôi cho thấy hành vi tương tự.

Câu hỏi

Sự khác biệt trong lần sửa đổi cuối cùng có thể được loại bỏ bằng cách nào đó? Ví dụ, sử dụng các tham số khác khi gắn / ngắt kết nối? Hay là một lỗi trong Ubuntu?

Tôi muốn đạt được rằng dấu thời gian của các tệp gốc và tệp được sao chép hoàn toàn giống nhau, để việc đồng bộ hóa có thể được thực hiện hiệu quả hơn. Ngoài ra, tôi cũng muốn giữ hệ thống tệp vfat trên các ổ USB của mình để tôi cũng có thể sử dụng chúng trong Windows.


Bạn có sẵn sàng tạo một hệ thống tệp khác trong ổ USB không, ví dụ như ext4hệ thống tệp linux ? (Sự hỗ trợ trong linux cho các hệ thống tệp độc quyền của Microsoft, FAT32, exFAT, NTFS, có một số giới hạn.) Xem liên kết này gợi ý không chỉ ext4mà còn udflà lựa chọn thay thế cho các hệ thống tệp độc quyền của Microsoft.
sudodus

Câu trả lời:


17

Vấn đề với việc thay đổi dấu thời gian giây xuất phát từ thực tế là hệ thống tệp VFAT (có, thậm chí là FAT32) lưu trữ thời gian sửa đổi chỉ với độ phân giải 2 giây.

Rõ ràng, miễn là hệ thống tập tin được gắn kết, trình điều khiển hệ thống tập tin lưu trữ dấu thời gian chính xác đến độ phân giải 1 giây (có thể để đáp ứng các yêu cầu POSIX), nhưng khi hệ thống tập tin không được kết nối, bộ nhớ cache sẽ bị xóa và bạn sẽ thấy những gì thực sự được ghi lại trên đó thư mục hệ thống tập tin.

Sự khác biệt hai giờ giữa PC và máy tính xách tay có thể do các cài đặt múi giờ khác nhau và / hoặc các tùy chọn gắn mặc định khác nhau cho hệ thống tệp VFAT. (Tôi đoán rằng bạn đang ở trong múi giờ có độ lệch UTC hiện tại là 2 giờ, dương hoặc âm.)

Trong nội bộ, Linux sử dụng dấu thời gian UTC trên các hệ thống tệp kiểu Unix; nhưng trên các hệ thống tệp VFAT, mặc định (hiện tại) là sử dụng thời gian cục bộ trên các dấu thời gian của hệ thống tệp VFAT, vì đó là những gì MS-DOS đã làm và Windows vẫn làm. Nhưng có hai tùy chọn gắn kết có thể ảnh hưởng đến điều này: bạn có thể chỉ định tùy chọn gắn kết tz=UTCđể sử dụng dấu thời gian dựa trên UTC trên hệ thống tệp VFAT hoặc bạn có thể sử dụng time_offset=<minutes>để chỉ định rõ ràng độ lệch múi giờ được sử dụng với hệ thống tệp cụ thể này.

Có thể các tùy chọn gắn kết mặc định cho VFAT đã thay đổi giữa Ubuntu 14.04 và 16.04, trong hạt nhân hoặc udisksdịch vụ trợ giúp phương tiện di động, dẫn đến sự khác biệt hai giờ bạn thấy.


Cảm ơn về câu trả lời của bạn. Tôi đã hoàn thành câu hỏi của mình với đầu ra mount | grep CORSAIRtrên máy tính xách tay của tôi, điều này thực sự khác với đầu ra trên PC của tôi. Ngoài ra, bạn đã đúng, tôi nằm ở trung tâm châu Âu theo múi giờ CEST (= UTC + 2).
K. Gabor

Cả hai đầu ra gắn kết này dường như không bao gồm bất kỳ tùy chọn gắn kết nào sẽ ảnh hưởng đến dấu thời gian, vì vậy tôi nghĩ rằng việc xử lý mặc định cho dấu thời gian VFAT phải được thay đổi ở cấp hạt nhân ở đâu đó giữa các phiên bản Ubuntu đó. Rõ ràng là hiện đại udisksnên tôn trọng các tùy chọn gắn kết được chỉ định trong /etc/fstab, nếu bạn viết một mục nhập cho ổ USB của mình cho nó.
telcoM

0

Mặc dù tôi đã viết trong câu hỏi của mình rằng "Tôi muốn giữ vfathệ thống tệp trên các ổ USB của mình", cuối cùng tôi đã định dạng lại chúng thành ntfshệ thống tệp. Cả Linux và Windows đều có thể xử lý ntfsvà dường như nó không hiển thị hiện tượng lạ với dấu thời gian, được mô tả ở trên.


Có, NTFS lưu trữ tất cả các dấu thời gian của tệp dưới dạng số 64 bit dựa trên thời gian UTC, vì vậy chúng có độ phân giải 100 nano giây và phạm vi ngày là từ ngày 1 tháng 1 năm 1601 đến ngày 28 tháng 5 năm 60056. Điều đó là quá đủ. Quan trọng hơn, không có chỗ cho loại mơ hồ múi giờ mà các hệ thống tập tin VFAT có.
telcoM
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.