2012-04-09 14 views
6

में निरंतर डिस्क ब्लॉक में फ़ाइल को कैसे स्टोर करें मैं डिस्क पर कुछ डेटा लिनक्स में स्टोर करना चाहता हूं। मैं चाहता हूं कि यह डेटा भौतिक डिस्क में निरंतर डिस्क ब्लॉक में संग्रहीत हो। यदि मैं इस डेटा को एक सामान्य फ़ाइल में लिखता हूं, तो हो सकता है कि फ़ाइल पर कब्जा कर लिया गया ब्लॉक भौतिक डिस्क में निरंतर नहीं है। क्या यह काम करने का कोई तरीका है?लिनक्स

+2

क्यों? क्या आप हासिल करने की कोशिश कर रहे हैं? – Hasturkun

उत्तर

7

डिस्क विभाजन डिस्क के निरंतर क्षेत्र हैं। अपनी फ़ाइल के लिए एक उचित आकार की -

तो एक ही रास्ता है कि आप क्या करना चाहते करने के लिए अपने डिस्क विभाजन का आकार बदलने और gparted (GNOME) या partitionmanager (केडीई) या समान के साथ एक नया बनाने के लिए है।

तब आप अपने नए विभाजन के लिए सीधे लिख सकते हैं (का उपयोग करते हुए और एक फाइल सिस्टम को दरकिनार नहीं) फ़ाइल का उपयोग करके:

/dev/sdxn 

कहाँ sdxn = {sda1, sda2, ..., sdb1, ... ...} आदि विभाजन का अक्षर/संख्या है।

वैकल्पिक रूप से

आप इसे करने के लिए सीधे लेखन (विभाजन तालिका alltogether को छोड़कर) फ़ाइल का उपयोग करके एक पूरे डिस्क अलग सेट कर सकते हैं:

/dev/sdx 

कहाँ SDX = {sda, SDB, एसडीसी, ...} आदि डिस्क का पत्र है।

चेतावनी: एक टाइपो न बनाएं और गलत को लिखें (जिसमें उस पर एक फाइल सिस्टम है) या आप इसे दूषित करेंगे। एक प्रतीकात्मक लिंक ln -s/dev/sdxn/home/fred/mydata बनाने के लिए सर्वश्रेष्ठ, और फिर हमेशा mydata फ़ाइल को लिखें।

3

फाइल सिस्टम कोड (कर्नेल के अंदर, उदाहरण के लिए लिनक्स-3.1.6 कर्नेल स्रोत के अंदर ext4 फाइल सिस्टम के लिए linux-3.1.6/fs/ext4/ में) किसी दिए गए फ़ाइल के लिए उपयोग किए गए डिस्क ब्लॉक का प्रबंधन कर रहा है। तो आप अपने कुछ फाइलों के डिस्क ब्लॉक को अपने आप से व्यवस्थित नहीं कर सकते हैं। हालांकि, आप कुछ अजीब सिस्टम कॉल का उपयोग कर कर्नेल को कुछ संकेत दे सकते हैं।

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

कर्नेल फाइल सिस्टम कोड काफी अच्छा है, और गिरी फाइल सिस्टम कैश बहुत ही कुशल है।

यदि आप अपने पढ़ने को तेज़ करना चाहते हैं, तो शायद readahead(2) या fadvise(2) या madvise(2) सिस्टम कॉल का उपयोग करने पर विचार करें।

तुम भी कर सकते थे, अपने फाइल सिस्टम, अपने विशेष प्रयोजनों के लिए धुन बनाते समय। उदाहरण के लिए, यदि आप जानते हैं कि इसमें अधिकतर बड़ी फाइलें होंगी, तो आप मानक ब्लॉक आकार (उदाहरण के लिए mke2fs -b 8192), आदि से अधिक का उपयोग कर सकते हैं ...

लेकिन ऐसा नहीं लगता कि सॉफ़्टवेयर की गति तेज होगी- आपका आवेदन काफी महत्वपूर्ण है; अगर आप डिस्क आईओ का एक बहुत करते हैं, असली टोंटी (ताकि हार्ड डिस्क के बजाय एसएसडी का उपयोग कर आसान हो सकता है) हार्डवेयर है।

+0

यह पता चला है कि EXT4 का अधिकतम सीमा 128 एमआईबीबी है, इसलिए इससे बड़ी फ़ाइलें EXT4 पर संगत नहीं हो सकती हैं। इन संकेतों का आप उल्लेख करते हैं - क्या कर्नेल को लिखने के लिए संकेत देने के लिए ऐसी कोई "अजीब" प्रणाली कॉल है? या शायद शून्य की एक संगत फ़ाइल आवंटित करने के लिए जिसे बाद में लिखा जा सकता है। मैं [ऐसा करने के लिए देख रहा हूं] (http://unix.stackexchange.com/questions/80072/contiguous-copy-how-do-i-copy-files-contiguously) लाइव सीडीएस आईएसओ फाइलों के लिए FAT32 पर (आमतौर पर ~ 700 एमआईबी), और अधिमानतः '* निक्स' फाइल सिस्टम पर भी। –

3

आप एक नियमित फाइल सिस्टम है कि नहीं पूछ सकते हैं।

यदि किसी कारण से, आप वास्तव में डिस्क पर संगत डेटा स्टोर करना चाहते हैं, तो आपको एक (फ्री) कच्चे डिवाइस का उपयोग करने और अपने डेटा लेआउट को प्रबंधित करने की आवश्यकता है। यह कुछ डेटाबेस कर रहे हैं। ध्यान दें कि उस मामले में भी, ब्लॉक के लिए संगत होने की कोई गारंटी नहीं है। डिवाइस हार्डवेयर या सॉफ्टवेयर RAID परत द्वारा प्रदान किया जा सकता है या एक ZFS पूल से zvol हो सकता है।