अगर mvमेरे fs (ext4) पर परमाणु है तो मैं कैसे जांच सकता हूं ?
OS Red Hat Enterprise Linux सर्वर रिलीज़ 6.8 है।
सामान्य तौर पर, मैं इसे कैसे जांच सकता हूं? मैंने चारों ओर देखा है, और यह नहीं पाया कि मेरा ओएस मानक POSIX है या नहीं।
अगर mvमेरे fs (ext4) पर परमाणु है तो मैं कैसे जांच सकता हूं ?
OS Red Hat Enterprise Linux सर्वर रिलीज़ 6.8 है।
सामान्य तौर पर, मैं इसे कैसे जांच सकता हूं? मैंने चारों ओर देखा है, और यह नहीं पाया कि मेरा ओएस मानक POSIX है या नहीं।
जवाबों:
दिलचस्प रूप से पर्याप्त है, ऐसा लगता है कि उत्तर हो सकता है, "यह निर्भर करता है"।
स्पष्ट होने के लिए, mvनिर्दिष्ट किया गया है
mvउपयोगिता के बराबर कार्रवाई करने होंगेrename()समारोह
नाम बदलने समारोह विनिर्देश कहता है:
यह
rename()फ़ंक्शन आईएसओ सी मानक द्वारा परिभाषित नियमित फ़ाइलों के बराबर है। इसका समावेश यहां उस परिभाषा को विस्तारित करता है जिसमें निर्देशिकाओं पर कार्रवाई शामिल है और व्यवहार को निर्दिष्ट करता है जब नया पैरामीटर पहले से मौजूद फ़ाइल का नाम देता है। उस विनिर्देश के लिए आवश्यक है कि फ़ंक्शन की क्रिया परमाणु हो।
लेकिन राज्यों के लिए नवीनतम आईएसओ सी विनिर्देशrename() :
7.21.4.2
renameफ़ंक्शनसार
#include <stdio.h> int rename(const char *old, const char *new);विवरण
renameसमारोह फ़ाइल जिसका नाम स्ट्रिंग के लिए से बताया है का कारण बनता हैoldआगे से नाम स्ट्रिंग द्वारा की ओर इशारा द्वारा दिए गए से जाना जाताnew। नाम वाली फ़ाइलoldअब उस नाम से सुलभ नहीं है। यदि फ़ंक्शन द्वाराnewकॉल करने से पहले बताई गई स्ट्रिंग द्वारा नामित फ़ाइल मौजूद हैrename, तो व्यवहार कार्यान्वयन-परिभाषित है।रिटर्न
renameसमारोह रिटर्न शून्य अगर आपरेशन सफल होता है, अशून्य अगर यह विफल, जिस स्थिति में फ़ाइल अस्तित्व में है, तो पहले से यह अभी भी अपने मूल नाम से जाना जाता है।
आश्चर्यजनक रूप से, ध्यान दें कि परमाणुता के लिए कोई स्पष्ट आवश्यकता नहीं है। यह नवीनतम सार्वजनिक रूप से उपलब्ध C मानक में कहीं और आवश्यक हो सकता है, लेकिन मैं इसे ढूंढ नहीं पाया। यदि कोई ऐसी आवश्यकता पा सकता है, तो संपादन और टिप्पणियाँ स्वागत से अधिक हैं।
नाम भी देखें () परमाणु है?
प्रति लिनक्स आदमी पेज :
यदि
newpathपहले से मौजूद है, तो इसे परमाणु रूप से बदल दिया जाएगा, ताकि ऐसा कोई बिंदु न हो जिस पर किसी अन्य प्रक्रिया का उपयोग करने का प्रयास करने सेnewpathयह गायब हो जाएगा। हालांकि, वहाँ शायद एक खिड़की है जिसमें दोनों हो जाएगाoldpathऔरnewpathफ़ाइल को संदर्भित नाम दिया जा रहा है।
लिनक्स मैन पेज का दावा है कि फ़ाइल के प्रतिस्थापन परमाणु होगा।
परीक्षण और पुष्टि करना कि परमाणुता बहुत मुश्किल हो सकती है, हालांकि, अगर यह है कि आपको कितनी दूर जाने की आवश्यकता है। आप स्पष्ट नहीं हैं कि आपके "एमडब्ल्यू परमाणु है तो मैं कैसे जांच सकता हूं" के आपके उपयोग के रूप में आपका क्या मतलब है। क्या आप आवश्यकताओं / विनिर्देश / प्रलेखन चाहते हैं कि यह परमाणु है, या क्या आपको वास्तव में इसका परीक्षण करने की आवश्यकता है?
यह भी ध्यान रखें, ऊपर मान लिया गया दो संकार्य फ़ाइल नाम एक ही फाइल सिस्टम में कर रहे हैं। मुझे लगता है mvकि लागू करने के लिए उपयोगिता पर कोई मानक प्रतिबंध नहीं मिल सकता है।
renameपरमाणु क्षमता के बारे में कुछ भी कहना अजीब होगा ।
/एक ext4 fs और /tmpएक अलग ext4 fs के रूप में है तो आप एटोमिक रूप से एक से दूसरे में mv नहीं कर सकते ।
mvrenameसिस्टम कॉल पर आधारित है और rename()परमाणु है। आप मैनपेज देख सकते हैं rename(2)।
आप नाम बदलकर () परमाणु पर जवाब पा सकते हैं ? स्टैकओवरफ्लो पर।
किस तरह की एफएस, आपने इस्तेमाल की?
सिस्टमकॉल और उनकी परमाणुता की जांच के अलावा, शायद inotify-toolsएक परीक्षण के रूप में काम कर सकता है , हालांकि मुझे यकीन नहीं है कि यह परमाणुता का एक गारंटीकृत प्रमाण है।
2 गोले खोलें। उनमें से एक में कदम की लक्ष्य निर्देशिका देखें:
inotifywait -m target/
एक फ़ाइल को दूसरे में निर्देशिका में ले जाएँ:
mv foobar target/
inotifywaitकेवल एक ही लाइन दिखाना चाहिए:
target/ MOVED_TO foobar
इसकी प्रतिक्रिया की तुलना में यह परमाणु लगता है ls target/और touch target/a, जो बहुस्तरीय संदेश उत्पन्न करता है जैसे:
# the response to ls target/
target/ OPEN,ISDIR
target/ ACCESS,ISDIR
target/ CLOSE_NOWRITE,CLOSE,ISDIR
पुनश्च
मुझे लगता है, कम से कम यह दिखाता है कि फाइलों पर अतुल्यकालिक बहुप्रक्रिया सहयोग inotify(व्यावहारिक रूप से परमाणु) के साथ सुरक्षित है : किसी भी मामले में आप inotifyऑपरेशन के बाद अंतिम संकेत दिए जाने के बाद ही जवाब देंगे । उदाहरण के लिए, एक निर्माता-उपभोक्ता सेटअप आसानी से और सुरक्षित रूप से लागू किया जा सकता है inotify।
strace?