गणना करें कि डिस्क-स्पेस का कितना उपयोग किया गया होगा


25

क्या लिनक्स पर एक प्रोग्राम है जो यह गणना कर सकता है कि एक प्रोग्राम कितने डेटा का उत्पादन करेगा?

उदाहरण के लिए, अगर मैं अपने MySQL डेटाबेस का बैकअप लेना चाहूंगा जो मैं आमतौर पर करूंगा

mysqldump > dumpfile.sql

इसके बजाय मैं पुनर्निर्देशित करना चाहूंगा, /dev/nullलेकिन गणना करेगा कि डिस्क-स्पेस का कितना उपयोग किया गया होगा, जैसे

mysqldump | fancy_space_calc_program

आउटपुट:

123456789 Bytes would have been used

ध्यान दें, MySQL बैकअप केवल एक उदाहरण है। मैं बहुत अच्छी तरह से वाकिफ हूं कि मैं पहले हाथ के आकार का अनुमान कैसे लगा सकता हूं, इसलिए कृपया इसके बारे में कोई टिप्पणी नहीं करें।


1
मुझे नहीं लगता कि आप वास्तव में एक बना सकते हैं; विशिष्ट मामलों के लिए हां, लेकिन सामान्य उपयोग नहीं, क्योंकि आप अनुमान लगा सकते हैं कि यदि कोई ऐप कुछ सर्वर को कॉल करता है और वहां से डेटा डाउनलोड करता है - तो कोई मौका नहीं है कि आप विदेशी ऐप्स में ऐसी चीजों का अनुमान लगा सकें। तो यह प्रति ऐप होगा - जैसा कि आप लिखते हैं कि आप पहले से ही MYSQL के लिए जानते हैं - कोई स्पष्टीकरण नहीं है, लेकिन अन्य ऐप - प्रति ऐप, कोई भी सामान्य टूल इस तरह की भविष्यवाणी को सही ढंग से नहीं कर सकता है।
ड्रेको

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

1
हां, मैं इससे अच्छी तरह वाकिफ हूं। यह अभी भी मेरे लिए काफी अच्छा है।
फैंसीपैंट

@Drako आपके पास किसी प्रोग्राम के टेक्स्ट आउटपुट को मापने का एक सामान्य तरीका हो सकता है। इसे ऐप के अनुसार होने की आवश्यकता नहीं है (उदाहरण के लिए स्वीकृत उत्तर देखें)। बाद के रन पर टेक्स्ट आउटपुट निश्चित रूप से समान होगा या नहीं, यह विशिष्ट है, लेकिन यह आपको सामान्य तरीके से आउटपुट को मापने से नहीं रोकता है। संभवतः ओपी और आउटपुट को मापने की कोशिश करने वाला कोई अन्य व्यक्ति केवल तभी ऐसा करेगा जब डेटा किसी भी दिए गए एप्लिकेशन के लिए सार्थक हो।
जॉन बेंटले

@JonBentley मैंने कभी नहीं कहा कि आपके पास यह नहीं हो सकता है, और अधिक ध्यान से पढ़ें: "जैसा कि मैंने लिखा है कि सामान्य भविष्यवाणी सटीक या बहुत करीब नहीं होने जा रही है :)" और अब कल्पना करें कि रनिंग के बाद मेरा ऐप खुद के अपडेट की जांच करेगा, प्लगइन्स की , आदि i-net से x राशि का डेटा डाउनलोड करेगा और आपके hdd पर संग्रहीत करेगा; आप मेरे ऐप के बारे में कुछ भी नहीं जानने वाले सामान्य उपकरण के साथ अग्रिम रूप से कैसे मापेंगे, इसे चलाने के बाद कितने संग्रहण की आवश्यकता होगी? फिर भी आप स्वीकृत उत्तर के साथ अपना सर्वश्रेष्ठ अनुमान लगा सकते हैं और कई मामलों में बहुत सटीक भी हो सकते हैं।
ड्रेको

जवाबों:


37

Https://stackoverflow.com/questions/13418688/use-pipe-with-du-to-compute-size-of-stdin से लिया गया

आप पाइप wc -cलाइन से गुजरने वाले बाइट्स की संख्या की गणना करने के लिए इसे पाइप कर सकते हैं ।

बेशक, यह सिर्फ कच्ची बाइट्स है, और सेक्टर आकार आदि के साथ इसका कोई लेना-देना नहीं है, इसलिए इसे नमक के दाने के साथ लें ...


जैसा कि मैंने लिखा है कि सामान्य भविष्यवाणी सटीक या करीबी नहीं होने जा रही है :)
ड्रेको

6
@cat का एक अच्छा कार्यान्वयन wcडेटा को छोड़ देगा जो अब व्यावहारिक रूप में जल्द ही आवश्यक नहीं है।
रुस्लान

2
@ मुझे लगता है कि यह बफर होने की संभावना नहीं है, क्योंकि आपको लाइनों या वर्णों को गिनने के लिए बफरिंग की आवश्यकता नहीं है। wcमेरे कंप्यूटर पर GNU Coreutils केवल 8 जीबी मेमोरी के साथ आसानी से 40 जीबी स्टड डेटा को संभालता है।
Frxstrem

8
@Magnus। मुझे लगता है कि आप वर्डप्ले से चूक गए। डब्ल्यूसी एक ब्रिटिश शब्द है जिसे अमेरिकी बाथरूम कहते हैं। आप अप्रयुक्त डेटा को WC में पाइप कर रहे हैं।
निधि मोनिका का मुकदमा

3
@Frxstrem आप निश्चित रूप से कर के रूप में आप अब एक isomorphic एन्कोडिंग के साथ काम कर रहे हैं के रूप में जल्द - जरूरत बफरिंग लाइनों या वर्ण गिनती करने के लिए। POSIX.2 के बाद से, wc -cवर्णों की गणना नहीं करता है - यह बाइट्स को गिनता है। wc -mवर्ण गिनता है। सबसे स्पष्ट अंतर बहु-बाइट वर्णों में होता है जैसे UTF-16 या Windows \r\n(ASCII में दो बाइट्स, लेकिन अन्य वर्ण)। यह जरूरी नहीं कि अधिकांश समय बहुत सारे बफरिंग की आवश्यकता होती है, लेकिन यूनिकोड में एकल चरित्र का प्रतिनिधित्व करने के लिए बाइट्स की मनमानी मात्रा हो सकती है; ऐसा कुछ नहीं जो आप विश्वसनीय डेटा में देखेंगे, लेकिन एक संभावित बफर अतिप्रवाह वेक्टर।
लुआं

28

कमांड pv इसके लिए एकदम सही है।

mysqldump | pv -b > /dev/null

मुझे लगता है कि उपरोक्त आपको सही आदेश देगा जो आप चाहते हैं, इसे कुछ समायोजन की आवश्यकता हो सकती है जैसे pv -b | > /dev/nullकि मैं अभी परीक्षण नहीं कर सकता हूं

-b आपको बाइट्स में एक मूल्य देता है।


1
पवित्र, मैं pv के साथ-साथ wc के बारे में भी भूल गया। मुझ पर शर्म की बात है। मैं दोनों उत्तर स्वीकार करना चाहता हूं। तो, क्षमा करें, लेकिन मैग्नस थोड़ा तेज था और वह प्रतिष्ठा का उपयोग कर सकता है।
फैंसीपैंट

हाँ कोई चिंता नहीं है, wc ट्रिक असली अच्छी है, यकीन नहीं कि तुरंत मेरे लिए tbh क्यों नहीं हुई। मैं पहली बार 'बार' गया! तब एहसास हुआ कि मेरा मतलब क्या था! :)
djsmiley2k - CoW

और अब आप मुझे फ़ाइल हैंडल को हथियाने के बारे में सोच रहे हैं, और कहीं पर / खरीद के लिए एक आकार की जाँच कर रहे हैं ....
djsmiley2k - CoW

2
मैंने पहले कभी नहीं सुना pv.. आप हर दिन कुछ नया सीखते हैं :)
मैग्नस

2
@ मैग्नस: मुझे लगता है कि wc पुराना है (कुछ पुराने यूनिक्स सिस्टमों का हिस्सा), न कि ज्यादा डॉक्यूमेंटेशन में, और न ही (परिणामस्वरूप संभवतः) pv कम डिस्ट्रीब्यूशन में पहले से इंस्टॉल है। फिर भी, जानकर अच्छा लगा। इस वैचारिक रूप से सुंदर चित्र को देखें जो "pv" ("पाइप दर्शक") कार्यक्रम के होम पेज से आता है
TOOGAM

0

आप ddइसके लिए इस तरह का उपयोग कर सकते हैं cat /dev/zero | dd status=progress of=/dev/null bs=4M

यह आपको उस डेटा के निष्पादन के दौरान और उसके बाद दिए गए डेटा की मात्रा के बारे में कुछ जानकारी प्रदान करता है, जैसे:

$ cat /dev/zero | dd status=progress of=/dev/null                                                                                                                              
5371334656 bytes (5.4 GB, 5.0 GiB) copied, 4 s, 1.3 GB/s^C # this is progress data
12271136+0 records in #summary
12271135+0 records out #summary
6282821120 bytes (6.3 GB, 5.9 GiB) copied, 4.66683 s, 1.3 GB/s #summary
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.