บันทึกเวลาของไฟล์ที่คัดลอกไปยังไดรฟ์ USB


13

ฉันมีปัญหากับการประทับเวลาของไฟล์ที่คัดลอกจากพีซีหรือแล็ปท็อปไปยังไดรฟ์ USB: เวลาแก้ไขครั้งล่าสุดของไฟล์ต้นฉบับและของไฟล์ที่คัดลอกมานั้นแตกต่างกัน ดังนั้นการซิงโครไนซ์ไฟล์ระหว่างพีซีของฉันและไดรฟ์ USB ค่อนข้างยุ่งยาก

คำอธิบายทีละขั้นตอน

  1. ฉันคัดลอกไฟล์โดยพลการจากพีซี / แล็ปท็อปไปยังไดรฟ์ USB โดยใช้ GUI หรือด้วยคำสั่ง

    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. อย่างที่คุณเห็นวินาทีในช่วงเวลาการแก้ไขครั้งล่าสุดของไฟล์ที่คัดลอกจะถูกตัดให้เหลือศูนย์ทศนิยม อย่างไรก็ตามถ้าฉันป้อนคำสั่ง

    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. ดังนั้นหลังจากที่ติดตั้งใหม่เวลาแก้ไขล่าสุดของไฟล์ที่คัดลอกจะลดลงอีกหนึ่งวินาที อย่างไรก็ตามการยกเลิกการเมานท์และทำเมาท์ต่อไปจะไม่ส่งผลต่อเวลาการปรับเปลี่ยนครั้งล่าสุดอีกต่อไป นอกจากนี้การทดสอบไฟล์ต่าง ๆ ในตอนนี้แสดงให้เห็นว่าไฟล์บนพีซีนั้นใหม่กว่า (แม้ว่าจะไม่ใช่)

สถานการณ์มีความซับซ้อนมากขึ้นโดยความจริงที่ว่าเวลาในการแก้ไขไฟล์ครั้งล่าสุดนั้นแสดงแตกต่างกันไปในพีซีและแล็ปท็อปของฉันความแตกต่างอยู่ที่ 2 ชั่วโมงแม้ว่าการตั้งค่าวันที่และเวลาจะเหมือนกันบนพีซีและแล็ปท็อปของฉัน!

ข้อมูลเพิ่มเติม

ทั้งพีซีและแล็ปท็อปของฉันแสดงพฤติกรรมดังที่อธิบายไว้ข้างต้น ฉันมี Ubuntu 14.04.5 (เชื่อถือได้) บนพีซีของฉันและ 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 อื่นของฉันแสดงพฤติกรรมแบบเดียวกัน

คำถาม

ความแตกต่างในการปรับเปลี่ยนครั้งล่าสุดจะถูกกำจัดอย่างใด? ตัวอย่างเช่นการใช้พารามิเตอร์อื่น ๆ ในการติดตั้ง / ถอนติดตั้ง หรือเป็นข้อบกพร่องใน Ubuntu

ฉันต้องการบรรลุว่าการประทับเวลาของไฟล์ต้นฉบับและไฟล์ที่คัดลอกนั้นเหมือนกันทุกประการเพื่อให้การซิงค์สามารถทำได้อย่างมีประสิทธิภาพยิ่งขึ้น นอกจากนี้ฉันต้องการเก็บระบบไฟล์ vfat ในไดรฟ์ USB ของฉันเพื่อให้สามารถใช้ใน Windows ได้เช่นกัน


คุณยินดีที่จะสร้างระบบไฟล์อื่นในไดรฟ์ USB ตัวอย่างเช่นext4ระบบไฟล์linux หรือไม่? (การสนับสนุนใน linux สำหรับระบบไฟล์ที่เป็นกรรมสิทธิ์ของ Microsoft, FAT32, exFAT, NTFS มีข้อ จำกัด บางประการ) ดูลิงค์นี้ซึ่งแนะนำไม่เพียงext4แต่ยังudfเป็นทางเลือกสำหรับระบบไฟล์ที่เป็นกรรมสิทธิ์ของ Microsoft
sudodus

คำตอบ:


17

ปัญหาเกี่ยวกับการเปลี่ยนเวลาประทับเวลามาจากข้อเท็จจริงที่ว่าระบบไฟล์ VFAT (ใช่แม้กระทั่ง FAT32) จะเก็บเวลาการแก้ไขด้วยความละเอียดเพียง 2 วินาทีเท่านั้น

เห็นได้ชัดว่าตราบใดที่ระบบไฟล์ติดตั้งไดรเวอร์ระบบไฟล์จะสแกนเวลาที่ถูกต้องสำหรับความละเอียด 1 วินาที (อาจเป็นไปตามข้อกำหนด POSIX) แต่เมื่อระบบไฟล์ถูกถอดออกแคชจะถูกล้างและคุณจะเห็นสิ่งที่ถูกบันทึกไว้ ไดเร็กทอรีระบบไฟล์

ความแตกต่างสองชั่วโมงระหว่างพีซีและแล็ปท็อปอาจเกิดจากการตั้งค่าเขตเวลาที่แตกต่างกันและ / หรือตัวเลือกการเมานต์เริ่มต้นที่แตกต่างกันสำหรับระบบไฟล์ VFAT (ฉันเดาว่าคุณอยู่ในเขตเวลาที่ UTC ออฟเซ็ตอยู่ 2 ชั่วโมงไม่ว่าจะเป็นค่าบวกหรือค่าลบ)

ภายใน Linux ใช้เวลาประทับ UTC บนระบบไฟล์แบบ Unix แต่สำหรับระบบไฟล์ VFAT ค่าเริ่มต้น (ปัจจุบัน) คือการใช้เวลาท้องถิ่นกับเวลาของระบบไฟล์ VFAT เพราะนั่นคือสิ่งที่ MS-DOS ทำและ Windows ยังคงทำ แต่มีตัวเลือกการเมาท์สองตัวที่อาจส่งผลกระทบต่อสิ่งนี้: คุณสามารถระบุตัวเลือกการเมาท์tz=UTCเพื่อใช้การประทับเวลาบน UTC บนระบบไฟล์ VFAT หรือคุณสามารถใช้time_offset=<minutes>เพื่อระบุการชดเชยเขตเวลาที่จะใช้กับระบบไฟล์นี้โดยเฉพาะ

อาจเป็นได้ว่าตัวเลือกการเมานต์เริ่มต้นสำหรับ VFAT นั้นมีการเปลี่ยนแปลงระหว่าง Ubuntu 14.04 และ 16.04 ไม่ว่าจะเป็นเคอร์เนลหรือudisksบริการผู้ช่วยสื่อที่ถอดเข้าออกได้ทำให้เกิดความแตกต่างสองชั่วโมงที่คุณเห็น


ขอบคุณสำหรับคำตอบ. ฉันตอบคำถามด้วยผลลัพธ์ของmount | grep CORSAIRแล็ปท็อปซึ่งแตกต่างจากผลลัพธ์ในพีซีของฉัน นอกจากนี้คุณพูดถูกฉันอยู่ในยุโรปกลางในเขตเวลา CEST (= UTC + 2)
K. Gabor

ดูเหมือนว่าจะไม่มีตัวเลือกการเมานท์ใด ๆ ที่จะส่งผลกระทบต่อการประทับเวลาดังนั้นฉันคิดว่าการจัดการค่าเริ่มต้นสำหรับการประทับเวลา VFAT ต้องมีการเปลี่ยนแปลงในระดับเคอร์เนลที่อยู่ระหว่าง Ubuntu รุ่นเหล่านั้น เห็นได้ชัดว่าทันสมัยudisksควรเคารพตัวเลือกการติดตั้งที่ระบุใน/etc/fstabหากคุณเขียนรายการสำหรับไดรฟ์ USB ของคุณลงไป
telcoM

0

แม้ว่าฉันจะเขียนในคำถามของฉันว่า "ฉันต้องการเก็บvfatระบบไฟล์ไว้ในไดรฟ์ USB" ในที่สุดฉันก็ฟอร์แมตntfsระบบไฟล์อีกครั้ง ทั้ง Linux และ Windows สามารถจัดการได้ntfsและดูเหมือนจะไม่แสดงปรากฏการณ์แปลก ๆ ด้วยการประทับเวลาซึ่งปรากฎด้านบน


ใช่ NTFS จัดเก็บการประทับเวลาของไฟล์ทั้งหมดเป็นตัวเลข 64- บิตตามเวลา UTC ดังนั้นพวกเขาจึงมีความละเอียด 100 นาโนวินาทีและช่วงวันที่อยู่ระหว่าง 1 มกราคม 1601 ถึง 28 พฤษภาคม 60056 นั่นควรเกินพอ ที่สำคัญไม่มีสถานที่สำหรับความคลุมเครือของเขตเวลาที่ระบบไฟล์ VFAT มี
telcoM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.