मेरे सिस्टम पर डिस्क पर परमाणु लिखने का आकार क्या है?


10

के लिए दस्तावेज में निर्देश , nginx प्रलेखन कहते हैंaccess_log

बफ़र का आकार एक परमाणु फ़ाइल के आकार से डिस्क फ़ाइल से अधिक नहीं होना चाहिए।

मैं यह कैसे निर्धारित कर सकता हूं कि यह आकार मेरे सिस्टम पर क्या है?


@mdpc लिंक किए गए दस्तावेज़ से यह बहुत स्पष्ट है, कि यह सेक्टर आकार के बारे में नहीं है, जो कि btw। 80 के दशक के बाद से अब तक अधिकांश मीडिया पर 512 बाइट्स किए गए हैं। नई ड्राइव पर 4K सेक्टर आकार की ओर एक कदम है।
कैस्परर्ड

यह विनिर्देश प्रासंगिक हो सकता है। हालांकि यह प्रश्न का कोई सटीक उत्तर नहीं देता है: pubs.opengroup.org/onlinepubs/7908799/xsh/write.html
kasperd

जवाबों:


3

देर आए दुरुस्त आए :)

त्वरित उत्तर है: "2,147,479,552 बाइट्स, यदि कर्नेल संस्करण 3.14 या नया है"

विस्तृत जवाब:

जहाँ तक मैं समझता हूँ, यह लिखने के बारे में है:

http://man7.org/linux/man-pages/man2/write.2.html

1) कोई भी POSIX सिस्टम (linux, bsd, सभी यूनिक्स) MAX_SSIZE बाइट्स तक लिखने में सक्षम होने की गारंटी है

POSIX.1 के अनुसार, यदि गणना SSIZE_MAX से अधिक है, तो परिणाम कार्यान्वयन-परिभाषित है; लिनक्स पर ऊपरी सीमा के लिए NOTES देखें।

# getconf SSIZE_MAX
32767

2) linux 1.99 GiB तक लिखने में सक्षम होने की गारंटी देता है (और यह linux k गिने वर्जन 3.12 वाँ मोबाइल के लिए परमाणु ऑपरेशन है)

लिनक्स पर, लिखना () और इसी तरह की प्रणाली कॉल) अधिकांश 0x7ffff000 (2,147,479,552) बाइट्स में स्थानांतरित हो जाएंगे, बाइट्स की संख्या वास्तव में स्थानांतरित हो जाएगी। (यह 32-बिट और 64-बिट सिस्टम दोनों पर सच है।)

लेकिन यह लाइनऑन कर्नेल 3.14 से ही उचित परमाणु संचालन है

POSIX.1-2008 / SUSv4 धारा XSI 2.9.7 के अनुसार ("नियमित रूप से फ़ाइल संचालन के साथ थ्रेड इंटरैक्शन"):

जब वे नियमित फाइल या प्रतीकात्मक लिंक पर काम करते हैं, तो POSIX.1-2008 में निर्दिष्ट प्रभावों में निम्नलिखित सभी कार्य एक-दूसरे के संबंध में परमाणु होंगे।

बाद में सूचीबद्ध एपीआई में राइट () और राइटव (2) हैं। और उन प्रभावों के बीच जो थ्रेड्स (और प्रक्रियाओं) में परमाणु होने चाहिए, फाइल ऑफ़सेट के अपडेट हैं। हालांकि, संस्करण 3.14 से पहले लिनक्स पर, यह मामला नहीं था: यदि दो प्रक्रियाएं जो एक खुली फ़ाइल विवरण साझा करती हैं (खुला देखें (2)) एक ही समय में एक लेखन () (या राइटव (2)) करती हैं, तो मैं / ओ ऑपरेशंस फाइल ऑफसेट को अद्यतन करने के संबंध में परमाणु नहीं थे, जिसके परिणामस्वरूप दो प्रक्रियाओं द्वारा डेटा आउटपुट के ब्लॉक ओवरलैप हो सकते हैं। यह समस्या लिनक्स 3.14 में तय की गई थी।


1

इस सुपरसुअर उत्तर की एक अच्छी परिभाषा थी कि परमाणु लेखन का आकार क्या है।

यह कम से कम हार्डवेयर क्षेत्र के आकार जितना बड़ा है, जो परमाणु रीड / राइट का आकार है।


1
ठीक है, तो मैं यह कैसे निर्धारित करूं कि डिस्क सेक्टर कितना बड़ा है?
ब्रेडशाम

9
नगनेक्स डॉक्यूमेंटेशन और सुपरयूज़र उत्तर स्टोरेज स्टैक में समान परत के बारे में बात नहीं कर रहे हैं। नेगनेक्स प्रलेखन फाइल सिस्टम परत पर सबसे बड़े परमाणु लेखन के बारे में बात करता है, जो कि ओएस और एफएस निर्भर है। सुपरसर उत्तर ब्लॉक स्तर पर सबसे बड़े परमाणु लेखन के बारे में बात कर रहा है, जो हार्डवेयर पर निर्भर है।
कैस्परर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.