USB ड्राइव पर कॉपी की गई फ़ाइलों की टाइमस्टैम्प्स


13

मुझे अपने पीसी या लैपटॉप से ​​यूएसबी ड्राइव में कॉपी की गई फ़ाइलों के टाइमस्टैम्प्स की समस्या है: मूल फ़ाइल का अंतिम संशोधन समय और कॉपी की गई फ़ाइल अलग-अलग हैं। इसलिए, मेरे पीसी और मेरे यूएसबी ड्राइव के बीच फ़ाइलों को सिंक्रनाइज़ करना काफी बोझिल है।

एक कदम से कदम विवरण

  1. मैं अपने पीसी / लैपटॉप से ​​एक मनमाना फ़ाइल को GUI या कमांड के साथ 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. जैसा कि आप देख सकते हैं, कॉपी किए गए फ़ाइल के अंतिम संशोधन समय में सेकंड शून्य दशमलव अंकों में काट दिए जाते हैं। हालांकि, अगर मैं कमांड दर्ज करता हूं

    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 ड्राइव समान व्यवहार दिखाते हैं।

सवाल

क्या अंतिम संशोधन समय में अंतर किसी तरह समाप्त किया जा सकता है? उदाहरण के लिए, बढ़ते / अनमाउंटिंग में अन्य मापदंडों का उपयोग करना? या यह उबंटू में एक बग है?

मैं यह हासिल करना चाहूंगा कि मूल और कॉपी की गई फ़ाइलों की टाइमस्टैम्प बिल्कुल समान हैं, ताकि सिंक्रोनाइज़ेशन को अधिक कुशलता से किया जा सके। इसके अलावा, मैं अपने यूएसबी ड्राइव पर vfat फाइल सिस्टम रखना चाहूंगा, ताकि मैं उन्हें विंडोज के तहत भी इस्तेमाल कर सकूं।


क्या आप USB ड्राइव में एक और फाइल सिस्टम बनाने के लिए तैयार हैं, उदाहरण के लिए एक लिनक्स ext4फाइल सिस्टम? (माइक्रोसॉफ्ट मालिकाना फाइल सिस्टम, FAT32, exFAT, NTFS के लिए लिनक्स में समर्थन, कुछ सीमा नहीं है।) देखें इस लिंक जिससे पता चलता है न केवल ext4लेकिन यह भी udfमाइक्रोसॉफ्ट मालिकाना फाइल सिस्टम के लिए विकल्प के रूप में।
सूडोडस

जवाबों:


17

टाइमस्टैम्प सेकंड बदलने के साथ समस्या इस तथ्य से आती है कि एक VFAT (हाँ, यहां तक ​​कि FAT32) फाइलसिस्टम केवल 2-सेकंड रिज़ॉल्यूशन के साथ संशोधन समय को संग्रहीत करता है।

जाहिरा तौर पर, जब तक फाइलसिस्टम आरोहित होता है, फाइलसिस्टम चालक 1-सेकंड रिज़ॉल्यूशन (संभवत: पोसिक्स आवश्यकताओं को पूरा करने के लिए) टाइमस्टैम्प को ठीक करता है, लेकिन एक बार जब फाइल सिस्टम अनमाउंट हो जाता है, तो कैश साफ़ हो जाता है और आप देखेंगे कि वास्तव में क्या रिकॉर्ड किया गया है। फ़ाइल सिस्टम निर्देशिका।

पीसी और लैपटॉप के बीच दो घंटे का अंतर संभवतः VFAT फाइल सिस्टम के लिए अलग-अलग टाइमज़ोन सेटिंग्स और / या अलग-अलग डिफ़ॉल्ट माउंट विकल्पों के कारण होता है। (मैं अनुमान लगा रहा हूं कि आप एक टाइमज़ोन में स्थित हैं, जिसका यूटीसी ऑफसेट वर्तमान में 2 घंटे है, या तो सकारात्मक या नकारात्मक है।)

आंतरिक रूप से, लिनक्स यूनिक्स-टाइम फाइल सिस्टम पर यूटीसी टाइमस्टैम्प का उपयोग करता है; लेकिन VFAT फाइल सिस्टम पर, वर्तमान (डिफ़ॉल्ट) डिफ़ॉल्ट का उपयोग VFAT फाइल सिस्टम टाइमस्टैम्प पर स्थानीय समय का उपयोग करने के लिए किया जाता है, क्योंकि यही एमएस-डॉस ने किया था और विंडोज अभी भी करता है। लेकिन दो माउंट विकल्प हैं जो इसे प्रभावित कर सकते हैं: आप tz=UTCवीएफएटी फाइल सिस्टम पर यूटीसी-आधारित टाइमस्टैम्प का उपयोग करने के लिए माउंट विकल्प निर्दिष्ट कर सकते हैं , या आप time_offset=<minutes>इस विशेष फाइल सिस्टम के साथ उपयोग किए जाने वाले टाइमज़ोन ऑफसेट को स्पष्ट रूप से निर्दिष्ट करने के लिए उपयोग कर सकते हैं ।

यह हो सकता है कि VFAT के लिए डिफ़ॉल्ट माउंट विकल्प उबंटू 14.04 और 16.04 के बीच बदल गया हो, या तो कर्नेल या udisksहटाने योग्य-मीडिया सहायक सेवा में, जिसके परिणामस्वरूप आपको दो घंटे का अंतर दिखाई देगा।


आपके उत्तर के लिए धन्यवाद। मैंने अपना प्रश्न mount | grep CORSAIRअपने लैपटॉप के आउटपुट के साथ पूरा किया , जो वास्तव में मेरे पीसी पर आउटपुट से अलग है। इसके अलावा, आप सही हैं, मैं CEST (= UTC + 2) समय क्षेत्र में मध्य यूरोप में स्थित हूं।

न तो उन माउंट आउटपुट में कोई माउंट विकल्प शामिल हैं जो टाइमस्टैम्प को प्रभावित करते हैं, इसलिए मुझे लगता है कि उबंटू के उन संस्करणों के बीच कहीं न कहीं कर्नेल स्तर पर VFAT टाइमस्टैम्प के लिए डिफ़ॉल्ट हैंडलिंग को बदल दिया जाना चाहिए। यदि आप अपने USB ड्राइव के लिए एक प्रविष्टि लिखते हैं, तो जाहिर तौर पर आधुनिक udisksमें निर्दिष्ट माउंट विकल्पों का सम्मान करना चाहिए /etc/fstab
टेल्कोएम

0

हालाँकि मैंने अपने प्रश्न में लिखा था कि "मैं vfatअपने USB ड्राइव पर फाइल सिस्टम रखना चाहूंगा ", आखिरकार मैंने उन्हें ntfsफाइल सिस्टम में फिर से फॉर्मेट किया । लिनक्स और विंडोज दोनों संभाल सकते हैं ntfsऔर यह ऊपर दिखाए गए टाइमस्टैम्प के साथ अजीब घटना नहीं दिखा सकता है।


हां, NTFS UTC समय के आधार पर सभी फ़ाइल टाइमस्टैम्प को 64-बिट संख्या के रूप में संग्रहीत करता है, इसलिए उनके पास 100-नैनोसेकंड रिज़ॉल्यूशन है और दिनांक सीमा 1 जनवरी 1601 से 28 मई 60056 तक है। यह पर्याप्त से अधिक होना चाहिए। इससे भी महत्वपूर्ण बात यह है कि वीएफएटी फाइलसिस्टम के पास समयक्षेत्र की अस्पष्टता के लिए कोई जगह नहीं है।
टेल्कोएम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.