लिनक्स में हार्ड ड्राइव कैसे भरें


23

मैं कोड के टुकड़े का कुछ परीक्षण कर रहा हूं और मैं डेटा के साथ हार्ड ड्राइव भरना चाहता हूं। मैने पाया कि dd एक पल में बड़ी फ़ाइलें बना सकते हैं, लेकिन df सहमत नहीं हैं। यहाँ मैंने क्या कोशिश की है:

dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))

ls -lh एक 10G फ़ाइल दिखाता है। हालाँकि, df -h यह दर्शाता है कि विभाजन सिकुड़ा नहीं था। तो बनाने के लिए मुझे क्या करना होगा df क्या अब डेटा लिया गया है? मैं कुछ तेजी से उम्मीद कर रहा हूं कि मैं एक यूनिट टेस्ट में कोड करूं


यदि आप serverfault.com पर पूछेंगे तो आप अधिक भाग्यशाली होंगे

BTW, 10 * 1024 * 1024 * 1024 10 * 2 ** 30 के समान है, थोड़ा सरल है।
deltaray

जवाबों:


25

के साथ मुसीबत seek=<big number> ट्रिक यह है कि फाइलसिस्टम (आमतौर पर) चालाक है: यदि किसी फाइल का हिस्सा कभी नहीं लिखा गया है (और इसलिए सभी शून्य है), तो वह इसके लिए कोई स्थान आवंटित करने की जहमत नहीं उठाता है - इसलिए, जैसा कि आपने देखा है, आप एक 10GB फ़ाइल हो सकती है जो कोई स्थान नहीं लेती है (इसे एक "विरल फ़ाइल" के रूप में जाना जाता है, और कुछ उदाहरणों में बहुत उपयोगी हो सकता है, जैसे कुछ डेटाबेस कार्यान्वयन)।

आप स्थान को (उदाहरण के लिए) आवंटित करने के लिए बाध्य कर सकते हैं:

dd if=/dev/zero of=filename bs=$((1024*1024)) count=$((10*1024))

जो अधिक समय लेगा, लेकिन वास्तव में डिस्क को भर देगा। मैं ब्लॉक आकार को एक से अधिक बनाने की सलाह देता हूं, क्योंकि यह निर्धारित करेगा कि कितने सिस्टम कॉल करते हैं dd प्रक्रिया बनाता है - छोटे ब्लॉक, अधिक syscalls, और इसलिए यह धीमी गति से चलेगा। (हालांकि 1MB से आगे या तो शायद इससे बहुत फर्क नहीं पड़ेगा और इससे चीजें धीमी भी हो सकती हैं ...)


मैं आमतौर पर bs = (जो भी आधे कैश का आकार मैं लिख रहा हूं उस ड्राइव पर) का उपयोग करता हूं। यह बाद में आकार बदलने के लिए बड़े हार्ड ड्राइव पर विभाजन विभाजन की तारीख में अच्छी तरह से काम किया है। ईटीए: महत्वपूर्ण शब्द एचएएलएफ।
atroon

18

इसके लिए एक अन्य विकल्प के रूप में, आप एक एकल स्ट्रिंग के साथ हाँ का उपयोग कर सकते हैं और इसके बारे में 10 गुना तेजी से चल रहा है यदि dd = = bigfile का dev / urdirectory ऐशे ही

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

यह, आश्चर्यजनक रूप से, के बारे में उपवास के रूप में dd का उपयोग करते हुए अगर = / dev / शून्य = = फ़ाइल नाम bs = 1M है।
bhinesley

वाक्यविन्यास भी याद रखना आसान है।
AWT

7

आपने वह बनाया है जिसे "विरल फ़ाइल" के रूप में जाना जाता है - एक फ़ाइल जो, क्योंकि इसका अधिकांश भाग खाली है (यानी वापस 0 के रूप में पढ़ता है), डिस्क पर जगह नहीं लेता इसके अलावा वास्तव में क्या लिखा है (1 बी, 10 जीबी के बाद की खाई)।

मुझे विश्वास नहीं है कि आप बड़ी फाइलें बना सकते हैं, वास्तविक डिस्क स्थान को एक पल में ले जा सकते हैं - भौतिक स्थान लेने का मतलब है कि फाइल सिस्टम को आपकी फाइल में डिस्क ब्लॉक आवंटित करने की आवश्यकता है।

मुझे लगता है कि आप पुराने के साथ फंस गए हैं "dd if = / dev / zero of = filename bs = 100M count = 100" जो आपके ड्राइव अनुक्रमिक लिखने की गति द्वारा सीमित है।


6

यदि आप केवल भरे हुए फ़ाइल सिस्टम के मामलों का परीक्षण कर रहे हैं, तो शायद फैलोकेट पर्याप्त है और तेज भी! जैसे

fallocate -l 150G


2
इसे निर्दिष्ट करने के लिए फ़ाइल नाम की आवश्यकता है: fallocate -l 150G foo। फिर भी उपकरण का उल्लेख करने के लिए +1।
Kamil Maciorowski

3

प्रयोग करना बन्द करें seek और एक बहुत बड़े का उपयोग करें bs और / या count। जैसा कि आप बना रहे हैं एक विरल फ़ाइल , और जाहिर है आपको ऐसा करने की आवश्यकता नहीं है।


3

यदि आप हार्ड ड्राइव को सचमुच भरना चाहते हैं, तो यह करें:

dd if=/dev/zero of=zeros bs=1M

यदि आप आकार को सीमित करना चाहते हैं, तो आप वैकल्पिक रूप से गिनती निर्दिष्ट कर सकते हैं, लेकिन यदि आप गणना को छोड़ देते हैं, तो यह तब तक चलेगा जब तक आप डिस्क स्थान से बाहर नहीं निकल जाते।

dd if=/dev/zero of=zeros bs=1M count=10240

जैसा कि उल्लेख किया गया है, यदि आप 1 एमबी (bs = 1) के बजाय ब्लॉक आकार को 1 MB (bs = 1M) पर सेट करते हैं, तो आपको बेहतर प्रदर्शन मिलेगा। इसमें अभी भी कुछ समय लगेगा, लेकिन यदि आप अपने कमांड की प्रगति की जांच करना चाहते हैं, तो एक अलग कंसोल खोलें और इन कमांड को चलाएं:

ps aux | grep dd

इस कमांड में dd के PID का उपयोग करें (dd के PID के साथ PID को बदलें):

kill -USR1 PID

फिर अपने dd टर्मिनल पर जाएं। बेशक, यह सीमित उपयोग का है जब आप केवल ड्राइव को भरने की कोशिश कर रहे हैं (आप मुफ्त डिस्क स्थान या फ़ाइल आकार की जांच के लिए क्रमशः df या du का उपयोग कर सकते हैं)। हालाँकि, ऐसे अन्य समय होते हैं जब dd आउटपुट को अपनी प्रगति बनाना आसान होता है।

अतिरिक्त क्रेडिट: खाली स्थान को शून्य करने के लिए एक व्यावहारिक उपयोग यह है कि बाद में, आप "शून्य" फ़ाइलों को हटा सकते हैं और संपूर्ण विभाजन (या डिस्क, यदि आपने सभी विभाजनों को शून्य कर दिया है) को डिस्क छवि फ़ाइल (कहते हैं , डिस्क- backup.dd), फिर फ़ाइल को संपीड़ित करें। मुक्त स्थान अब अत्यधिक संकुचित है, इसलिए आपकी संकुचित dd छवि मूल ब्लॉक डिवाइस की तुलना में बहुत छोटी होगी, जिसकी सामग्री इसमें शामिल है।

शेनानीगन्स: एक बड़ी शून्य फ़ाइल को ज़िप करें और इसे अपने सभी दोस्तों को ई-मेल करें। उन्हें बताएं कि यह वास्तव में कुछ अच्छा है।


2

आप निम्न आदेश के साथ एक गैर-विरल 1 TB फ़ाइल बनाएँ:

dd if=/dev/zero of=bigfile1 bs=10000000000 count=512

यह परीक्षण में उपयोगी था कि जब कोटा अधिक हो जाता है, या एक फाइल सिस्टम भर जाता है तो क्या होता है।

df -h उपलब्ध स्थान को छोटा दिखाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.