dd
एक आश्चर्य है । यह आपको हार्ड ड्राइव को दूसरे में डुप्लिकेट करने देता है, हार्ड ड्राइव को पूरी तरह से शून्य करता है, आदि । लेकिन एक बार जब आप एक लॉन्च करते हैं dd
कमांड, आपको इसकी प्रगति के बारे में बताने के लिए कुछ भी नहीं है । यह तब तक कर्सर पर बैठता है जब तक कि कमांड अंत में समाप्त नहीं हो जाता । तो डीडी की प्रगति की निगरानी कैसे करता है?
अद्यतन 2016>: यदि आप जीएनयू कोरुटिल्स = 8.24 (उबंटू ज़ेनियल 16.04 ऊपर की ओर डिफ़ॉल्ट) का उपयोग करते हैं, तो प्रगति प्रदर्शित करने के वैकल्पिक तरीके के लिए नीचे विधि 2 देखें ।
विधि 1: उपयोग करके pv
स्थापित करें pv
और इसे केवल इनपुट / आउटपुट के बीच रखें dd
आदेश।
नोट: जब आप पहले ही शुरू कर चुके हों तो आप इसका उपयोग नहीं कर सकते dd
.
से पैकेज विवरण:
pv
- पाइप व्यूअर-एक पाइपलाइन के माध्यम से डेटा की प्रगति की निगरानी के लिए एक टर्मिनल-आधारित उपकरण है । इसे दो प्रक्रियाओं के बीच किसी भी सामान्य पाइपलाइन में डाला जा सकता है ताकि यह संकेत दिया जा सके कि डेटा कितनी जल्दी से गुजर रहा है, इसे कितना समय लगा है, इसे पूरा करने के करीब कैसे है, और यह अनुमान है कि यह पूरा होने तक कितना समय होगा ।
स्थापना
sudo apt-get install pv
उदाहरण
dd if=/dev/urandom | pv | dd of=/dev/null
आउटपुट
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
आप के साथ अनुमानित आकार निर्दिष्ट कर सकते हैं --size
यदि आप एक समय अनुमान चाहते हैं ।
उदाहरण 2 जीबी डिस्क को /देव/एसडीबी से कॉपी किया जा रहा है
बिना आदेश pv
होगा:
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
के साथ आदेश pv
:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
आउटपुट:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
अन्य उपयोग
आप बेशक उपयोग कर सकते हैं pv
सीधे आउटपुट को स्टडआउट करने के लिए पाइप करने के लिए:
pv /home/user/bigfile.iso | md5sum
आउटपुट
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
ध्यान दें कि इस मामले में, pv
आकार को स्वचालित रूप से पहचानता है ।
विधि 2: नया status
विकल्प में जोड़ा गया dd
(जीएनयू Coreutils 8.24+)
dd
जीएनयू कोरुटिल्स 8.24+ (उबंटू 16.04 और नए) में एक नया मिला status
प्रगति प्रदर्शित करने का विकल्प:
उदाहरण
dd if=/dev/urandom of=/dev/null status=progress
आउटपुट
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
से कैसे करें: डीडी की प्रगति की निगरानी करें
आप की प्रगति की निगरानी कर सकते हैं dd
एक बार जब यह उपयोग करके इसे रोकने के बिना चल रहा है kill
आदेश प्रक्रिया के लिए एक संकेत भेजने के लिए ।
शुरू करने के बाद dd
, एक और टर्मिनल खोलें और दर्ज करें या तो:
sudo kill -USR1 $(pgrep ^dd$)
या, यदि आप बीएसडी या ओएस एक्स पर हैं:
sudo kill -INFO $(pgrep ^dd$)
यह प्रगति को प्रदर्शित करेगा dd
प्रक्रिया को रोकने के बिना टर्मिनल विंडो (इसकी एसटीडीईआरआर स्ट्रीम पर प्रिंट करके) । उदाहरण के लिए:
# dd if=/dev/urandom of=rando bs=1024 count=1048576335822+0 records in335821+0 records out343880704 bytes (344 MB, 328 MiB) copied, 6.85661 s, 50.2 MB/s
यदि आप के नियमित अपडेट प्राप्त करना चाहेंगे dd
प्रगति, फिर दर्ज करें:
watch -n5 'sudo kill -USR1 $(pgrep ^dd$)'
watch
जांच करेंगे dd
प्रक्रिया हर n सेकंड (-n5
= 5 सेकंड) और इसे रोकने के बिना रिपोर्ट करें ।
ऊपर दिए गए आदेशों में उचित एकल उद्धरणों पर ध्यान दें ।
कुछ आसान नमूना उपयोग के साथ pv
और कम टाइपिंग या अधिक प्रगति तो अन्य उत्तर:
सबसे पहले आपको इंस्टॉल करना होगा pv
, आदेश के साथ:
sudo apt-get install pv
फिर कुछ उदाहरण हैं:
pv -n /dev/urandom | dd of=/dev/nullpv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror
नोट: पहला नमूना 5 अक्षर कम टाइपिंग है dd if=/dev/urandom | pv | dd of=/dev/null
.
और डिस्क ड्राइव को क्लोन करने के लिए मेरा पसंदीदा (एक्स को ड्राइव अक्षरों से बदलें):
(pv -n /dev/sdX | dd of=/dev/sdX bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0
स्रोत: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
खुद को संग्रह करने के लिए भी ।
पूर्णता के लिए:
संस्करण 8.24 की जीएनयू coreutils प्रगति को मुद्रित करने के लिए एक पैरामीटर पेश करने वाले डीडी के लिए एक पैच शामिल है ।
कमिट इस परिवर्तन का परिचय टिप्पणी है:
डीडी: नया स्थिति = प्रगति समय-समय पर आँकड़े मुद्रित करने के लिए स्तर
कई वितरण, सहित Ubuntu 16.04.2 लीटर इस संस्करण का उपयोग करें ।
उपयोग करें Ctrl+Shift+T जबकि dd
चल रहा है, और यह प्रगति को आउटपुट करेगा (बाइट्स में):
load: 1.51 cmd: dd 31215 uninterruptible 0.28u 3.67s321121+0 records in321120+0 records out164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)
सबसे अच्छा उपयोग कर रहा है http://dcfldd.sourceforge.net/ एपीटी-गेट के माध्यम से स्थापित करना आसान है
मूल प्रगति की स्थिति डीडी में जोड़ा गया था!!!
कोरयूटिल्स (8.24) का नया संस्करण प्रगति की स्थिति जोड़ता है dd
उपकरण:
जुबंटू पर उपयोग 15.10:
एक टर्मिनल खोलें और इन आदेशों को टाइप करें:
wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xztar -xf coreutils-8.24.tar.xzcd coreutils-8.24./configure && make -j $(nproc)
भागो dd
जड़ के रूप में:
sudo sucd src./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress
आप देखेंगे: बाइट्स, सेकंड और स्पीड (बाइट्स/सेकंड) ।
के संस्करणों की जांच करने के लिए dd
:
मूल निवासी:
dd --version
नया:
cd coreutils-8.24/src./dd --version
यदि आपने पहले ही डीडी शुरू कर दिया है, और यदि आप एक फ़ाइल लिख रहे हैं जैसे कि डिस्क पर पेनड्राइव की एक प्रति बनाते समय, आप परिवर्तन देखने और पूर्णता का अनुमान लगाने के लिए आउटपुट फ़ाइल के आकार का लगातार निरीक्षण करने के लिए वॉच कमांड का उपयोग कर सकते हैं ।
watch ls -l /pathtofile/filename
केवल फ़ाइल आकार देखने के लिए (एच-मानव दृश्य):
watch ls -sh /pathtofile/filename
द dd | pv | dd
ट्रायड ने मेरी 50 जीबी वीएम कॉपी को 800 सेकंड का समय दिया, जैसा कि केवल डीडी का उपयोग करके 260 सेकंड के विपरीत था । इस पाइपलाइन के साथ, कम से कम, पीवी को पता नहीं है कि इनपुट फ़ाइल कितनी बड़ी है, इसलिए यह आपको यह नहीं बता पाएगी कि आप कितनी दूर हैं, इसलिए इसे निम्नानुसार करने का कोई नुकसान नहीं है - और आपको एक अच्छा गति लाभ मिलता है:
मैं पीवी से किसी भी बड़ी चीज से बचूंगा, और (यदि बैश का उपयोग कर रहा हूं):
नियंत्रण-Z डीडी प्रक्रिया
bg
इसे पृष्ठभूमि में रखने के लिए । निरीक्षण करें कि bg
आपको आउटपुट देगा जैसे [1] 6011
जहां बाद की संख्या एक प्रक्रिया आईडी है । तो, करो:
while true; do kill -USR1 process_id ; sleep 5; done
जहां प्रोसेस_आईडी आपके द्वारा देखी गई प्रक्रिया आईडी है । हिट Control-C और जब आप कुछ देखते हैं, की तरह:
[1]+ Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse-bash: kill: (60111) - No such process
आप कर रहे हैं ।
संपादित करें: मूर्ख सिस्टम प्रशासक! अपने जीवन को स्वचालित करें, काम न करें! अगर मेरे पास एक लंबी डीडी प्रक्रिया है जिसे मैं मॉनिटर करना चाहता हूं, तो यहां एक-लाइनर है जो आपके लिए पूरे एनचिलाडा का ख्याल रखेगा; यह सब एक लाइन पर रखो:
dd if=/path/to/bigimage of=/path/to/newimage conv=sparse bs=262144 & bgid=$!; while true; do sleep 1; kill -USR1 $bgid || break; sleep 4; done
आप निश्चित रूप से, इसे स्क्रिप्ट कर सकते हैं, शायद $1 को अपनी इनपुट फ़ाइल और $2 को अपनी आउटपुट फ़ाइल बना सकते हैं । यह पाठक के लिए एक अभ्यास के रूप में छोड़ा गया है । ध्यान दें कि आपको मारने से पहले उस छोटी नींद की आवश्यकता है या मार डीडी को संकेत भेजने की कोशिश कर सकती है जब यह अभी तक तैयार नहीं है । अपनी नींद को इच्छानुसार समायोजित करें (शायद दूसरी नींद को भी पूरी तरह से हटा दें) ।
मार - FTW! :-)
http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
मूल रूप से:
kill -USR1 < dd pid >