आप dd की प्रगति की निगरानी कैसे करते हैं?


654

ddएक आश्चर्य है। यह आपको एक हार्ड ड्राइव को दूसरे की नकल करने देता है, हार्ड ड्राइव को पूरी तरह से शून्य करता है, लेकिन एक बार जब आप एक ddकमांड लॉन्च करते हैं , तो आपको इसकी प्रगति बताने के लिए कुछ भी नहीं है। यह केवल कर्सर पर तब तक बैठता है जब तक कि कमांड अंत में समाप्त नहीं हो जाता। तो कैसे एक dd की प्रगति की निगरानी करता है?

जवाबों:


728

अद्यतन २०१६ : यदि आप GNU कोरुटिल्स> = default.२४ (उबंटू क्निअल १६.०४ में डिफ़ॉल्ट रूप से) का उपयोग करते हैं, तो प्रगति दिखाने के लिए वैकल्पिक तरीके के लिए नीचे विधि २ देखें।


विधि 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यदि आप समय का अनुमान चाहते हैं तो आप अनुमानित आकार को निर्दिष्ट कर सकते हैं ।


उदाहरण मान लें कि 2GB डिस्क को / dev / sdb से कॉपी किया जा रहा है

बिना आज्ञा 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(GNU Coreutils 8.24+) जोड़ा गया

ddGNU Coreutils 8.24+ (Ubuntu 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

76
pv bigfile.iso | dd of = / dev / yourdevice
आयन ब्र।

18
ध्यान दें कि "dd" के पैरामीटर पहले छमाही (पाइप के इनपुट भाग) में उपयुक्त हैं dd if=/dev/zero bs=1M count=35000 | pv | dd of=VirtualDisk.raw:।
सोपालाजो डे एरियेरेज़

6
pv bigfile.iso | dd of=VirtualDisk.raw bs=1M count=35000काम करता है, सत्यापित है। @SopalajodeArrierez, दूसरे dd में पैरामीटर दिए जा सकते हैं।
सिद्धार्थआरटी

11
का उपयोग कर pv < /dev/sda > /dev/sdbबेहतर गति ( स्रोत ) प्राप्त करने के लिए लगता है
निकोला फेल्ट्रिन

14
गति पर FYI करें। सैमसंग 840 प्रो एसएसडी के साथ मेरे कंप्यूटर पर टेस्ट: dd if=/dev/urandom | pv | of=/dev/sdb~ 18 एमबी / एस लिखता है, ~ 80 एमबी / एस dd if=/dev/zero | pv | of=/dev/sdbदेता है, और सादे पुराना ~ 550 एमबी dd if=/dev/zero of=/dev/sdb/ एस (एसएसडी अधिकतम लिखने की गति के करीब) देता है। सभी के साथ bs=4096000
टेड हैन्सन

461

से HowTo: dd की प्रगति की निगरानी

आप killकमांड का उपयोग करके इसे रोकने के बिना dd की प्रगति की निगरानी कर सकते हैं ।

ddयह चल रहा है की प्रगति को देखने के लिए , एक और टर्मिनल खोलें और दर्ज करें:

sudo kill -USR1 $(pgrep ^dd)

यह प्रक्रिया को रोकने के बिना टर्मिनल विंडो ddमें प्रगति प्रदर्शित करेगा dd। यदि आप BSD या OS X पर हैं, तो INFOइसके बजाय का उपयोग करें USR1USR1संकेत dd समाप्त कर देगा।

यदि आप ddप्रगति के नियमित अपडेट प्राप्त करना चाहते हैं , तो दर्ज करें:

watch -n5 'sudo kill -USR1 $(pgrep ^dd)'

watchddप्रक्रिया की जाँच हर सेकंड ( -n5= 5 सेकंड) और बिना रुके रिपोर्ट करेगी ।

ऊपर दिए गए आदेशों में उचित एकल उद्धरणों पर ध्यान दें।


19
यह काम किया, लेकिन टिप्पणियों के एक जोड़े। सबसे पहले, मुझे यकीन नहीं है कि आप अपने बैकटिक्स से बच गए (यदि यह एसओ संपादक के लिए है, तो आपने इसे गलत तरीके से किया था)। दूसरी बात मैं ^ dd $ का उपयोग करने की सलाह दूंगा, बस अगर उपसर्ग dd के साथ कुछ और चल रहा हो। अंत में, आपको USR1 सिग्नल भेजने के लिए sudo की आवश्यकता नहीं है। अन्यथा, अच्छा जवाब, +1।
gsingh2011

22
नायब! इस तरह से OSX के तहत dd के काम में रुकावट आती है।
मैक्सिम खोलियाकिन

26
@Speakus आपको kill -INFO $(pgrep ^dd$)BSD सिस्टम (जैसे OSX) पर उपयोग करना होगा।
तोरबीन

20
sudo pkill -usr1 ddयाद रखना आसान है, पूरी तरह से ठीक काम करता है (कम से कम Ubuntu 14.04 पर), और टाइप करने के लिए कम है।
12

21
मुझे यह पसंद है क्योंकि मुझे डर है pvकि स्थानांतरण धीमा हो जाएगा, जैसा कि टेडहंसन ने दिखाया था। इसके अलावा, मैं शर्त लगा सकता हूं कि बहुत से लोग इस पर गुगली कर रहे हैं क्योंकि उन्होंने पहले हीdd ऑपरेशन शुरू कर दिया है;)
सूदो

104

कुछ आसान नमूना pvकम टाइपिंग या अधिक प्रगति के साथ फिर अन्य उत्तर देता है:

पहले आपको pvकमांड के साथ इंस्टॉल करना होगा :

sudo apt-get install pv

फिर कुछ उदाहरण हैं:

pv -n /dev/urandom | dd of=/dev/null
pv -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-ward-coping/

साथ ही खुद को संग्रहित करने के लिए।


3
आपको dialogapt-get install dialog
k7k0

7
पसंदdialog उदाहरण। अब गंभीरता !
एलेक्स ग्रे

क्या आप केवल उस डायलॉग को अजगर के साथ कह सकते हैं?
मिक्यमोप

1
इस उत्तर के लिए धन्यवाद, इसने dialogशेल स्क्रिप्ट लिखने में बेहद मदद की: D
holms

2
brew install pv dialogमैक के लिए। इसके अलावा यह सज्जन शैली के साथ गणना करता है। वाहवाही।
दुष्टनोबू

62

चलने के दौरान Ctrl+ Shift+ का उपयोग करें , और यह प्रगति को आउटपुट करेगा (बाइट्स में):Tdd

load: 1.51  cmd: dd 31215 uninterruptible 0.28u 3.67s
321121+0 records in
321120+0 records out
164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)

5
कुबंटू ट्रस्टी पर मेरे लिए काम नहीं करता है। संभवतः महत्वपूर्ण बाइंडिंग परस्पर विरोधी?
जमदग्नि

14
महान पथ। यह OSX के तहत काम करता है, लेकिन ubuntu 14.04 के तहत काम नहीं करता है
मैक्सिम खोलियाकिन

1
पहली पंक्ति ओएस एक्स द्वारा उत्पन्न होती है, केवल बाद वाली 3 लाइनें हैं dd
इत्ते ग्रुदेव

3
आपको बीएसएनडी जैसे OS X
macshome

3
यह उबंटू पर काम नहीं करता है। Ctrl-T / Ctrl-Shift-T केवल ^Tटर्मिनल के लिए आउटपुट (कई टर्मिनल ऐप को छोड़कर, Ctrl-Shift-T को रोक देगा और एक नया टैब खोल देगा)। OSX / BSD पर कई खोजकर्ता इस उत्तर की सराहना कर सकते हैं, लेकिन यह स्पष्ट किया जाना चाहिए कि यह उबंटू (या सामान्य तौर पर GNU / LInux?) के लिए नहीं है
mwfearnley

60

परिपूर्णता के लिए:

GNU कोर्यूटिल्स के संस्करण 8.24 में dd के लिए एक पैच शामिल है जो प्रगति को प्रिंट करने के लिए एक पैरामीटर पेश करता है।

इस परिवर्तन को शुरू करने वाली टिप्पणी में टिप्पणी है:

dd: आँकड़े छापने के लिए नई स्थिति = प्रगति स्तर

कई वितरण, Ubuntu 16.04.2 LTS सहित इस संस्करण का उपयोग करते हैं।


बस जोड़ना चाहता हूं कि मैंने 8.24 कोरुटिल्स कैसे संकलित किए हैं: apt install build-essentialऔर apt-get build-dep coreutils, फिर कोरुटिल्स-8.25 . tar.xz डाउनलोड करें, tar xvf coreutils-8.25.tar.xz configure --prefix=$HOME/usr/localऔर चलाएं make। नया संकलित dir के ddतहत किया जाएगा src। आप इसे / बिन में कॉपी कर सकते हैं और मौजूदा एक या जूस को src / dd के रूप में बदल सकते हैं
होम्स

2
ठंडा! मुझे यह सुविधा पसंद है। और यह सिर्फ 30 साल लग गए dd को प्रिंट करने के लिए प्रगति आउटपुट सिखाना। :-)
जोहान्स ओवरमैन

जान में जान आई! मैं तुरंत एक dd शेल उपनाम में इस तर्क को जोड़ दूंगा।
स्टीफ़न हेन्निंगसन

ध्यान दें कि स्थिति कभी-कभी दो संख्याओं के साथ, एसआई इकाइयों में एक और बाइनरी इकाइयों (जैसे 10 एमबी, 9.5 मिब) में बराबर मूल्य के साथ प्रिंट करेगी।
पालसीम

33

सबसे अच्छा http://dcfldd.sourceforge.net/ का उपयोग कर रहा है। यह एप-गेट के माध्यम से स्थापित करना आसान है


3
dcfldd को पॉइंटर के लिए धन्यवाद, dd के साथ बहुत संगत लेकिन कुछ अच्छी नई विशेषताएं। मुझे विशेष रूप से मानक प्रगति पसंद है।
फ्लोयड

4
क्यों dcfldd अधिक अच्छी तरह से ज्ञात नहीं है मेरे लिए एक पूर्ण रहस्य है।
Freedom_Ben

28
शायद इसके नाम के लिए।
जियोवानी टोराल्डो

यह विकल्प हैं ddऔर विकल्प status=onप्रगति संदेश, के लिए डिफ़ॉल्ट रूप से, statusinterval=N(एन ब्लॉक में) संदेश अद्यतन आवृत्ति के लिए और sizeprobe=[if|of]एक प्रतिशत सूचक के लिए। मैं इसे DD:):
काव्यादि

25

Dd में मूल प्रगति की स्थिति जोड़ी गई !!!

Coreutils का नया संस्करण (8.24) ddउपकरण में प्रगति की स्थिति जोड़ता है :

जुबांटु 15.10 पर उपयोग:

एक टर्मिनल खोलें और ये कमांड टाइप करें:

wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xz
tar -xf coreutils-8.24.tar.xz
cd coreutils-8.24
./configure && make -j $(nproc)

ddरूट के रूप में चलाएँ :

sudo su
cd src
./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress

आप देखेंगे: बाइट्स, सेकंड और गति (बाइट्स / सेकंड)।

के संस्करणों की जाँच करने के लिए dd:

मूल निवासी:

dd --version

नया:

cd coreutils-8.24/src
./dd --version

18

यदि आपने पहले ही dd शुरू कर दिया है, और यदि आप एक फाइल लिख रहे हैं जैसे कि डिस्क में एक पेनड्राइव की एक कॉपी बनाते समय, आप बदलाव देखने और अनुमान पूरा करने के लिए आउटपुट फाइल के आकार को लगातार देखने के लिए वॉच कमांड का उपयोग कर सकते हैं।

watch ls -l /pathtofile/filename

केवल फ़ाइल आकार (एच-मानव दृश्य) देखने के लिए:

watch ls -sh /pathtofile/filename

इसके अलावा एक व्यवहार्य विधि ...
21

3
उपयोगी, हालांकि यह जरूरी काम नहीं करता है यदि आप एक फ़ाइल के अलावा किसी अन्य चीज़ से dd आउटपुट को पाइप कर रहे हैं (जैसे कि डिस्क पर लिखने से पहले gzip'ing)।
पोंकडूडल

विशेष फ़ाइलों पर काम नहीं करता है।
जोहान्स ओवरमैन

13

dd | pv | ddत्रय मेरी 50GB वीएम प्रति 800 सेकंड का समय, के रूप में सिर्फ dd का उपयोग कर 260 सेकंड के लिए विरोध कर दिया। इस पाइपलाइन के साथ, कम से कम, pv को यह पता नहीं है कि इनपुट फ़ाइल कितनी बड़ी है, इसलिए यह आपको यह बताने में सक्षम नहीं होगा कि आपके साथ कितनी दूर है इसलिए इसे इस प्रकार करने का कोई नुकसान नहीं है- और आपको एक अच्छी गति का लाभ मिलता है:

मैं कुछ भी बड़े पर pv से बचूंगा, और (यदि बैश का उपयोग कर रहा हूँ):

नियंत्रण-जेड dd प्रक्रिया

bgइसे पृष्ठभूमि में रखना निरीक्षण करें कि bgआपको आउटपुट देगा जैसे [1] 6011कि बाद वाला नंबर एक प्रोसेस आईडी है। ऐसा:

while true; do kill -USR1 process_id ; sleep 5; done

जहां process_id आपके द्वारा देखी गई प्रक्रिया आईडी है। जब आप कुछ देखते हैं तो कंट्रोल-सी को मारें:

[1]+  Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse
-bash: kill: (60111) - No such process

आप कर चुके हैं।

संपादित करें: सिली सिस्टम्स एडमिनिस्ट्रेटर! अपने जीवन को स्वचालित करें, काम न करें! अगर मेरे पास एक लंबी dd प्रक्रिया है जिसे मैं मॉनिटर करना चाहता हूं, तो यहां एक-लाइनर है जो आपके लिए पूरे एन्चीलाडा का ख्याल रखेगा; यह सब एक लाइन पर रखें:

 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 को अपनी आउटपुट फ़ाइल बना सकते हैं। इसे पाठक के लिए एक अभ्यास के रूप में छोड़ दिया जाता है। ध्यान दें कि आपको मारने या मारने से पहले उस छोटी नींद की जरूरत है, जब वह अभी तक तैयार नहीं है तो dd को सिग्नल भेजने की कोशिश कर रहा है। अपनी नींद को इच्छानुसार समायोजित करें (शायद दूसरी नींद को भी पूरी तरह से हटा दें)।

बैश- FTW! :-)


1
whileलूप को संपीड़ित करें । का उपयोग करें watch
मूरू

1
@ मरमू यह निर्भर करता है। मुझे आपके सिस्टम के बारे में पता नहीं है लेकिन CentOS7 * पर आउटपुट थोड़ा बढ़ा हुआ है; यह पठनीय है, लेकिन व्यवस्थित नहीं दिखता है। इसके अलावा यह आपके पिछले आउटपुट पर स्टॉम्प करता है ताकि आप अपने dd की गति का इतिहास खो दें; मेरा 20 एमबी / एस और 300 एमबी / एस के बीच भिन्न होता है। यह देखना दिलचस्प है कि संख्याएँ बदलती हैं और शिक्षाप्रद भी। मुझे लगता है कि एलवीएम के पतले पूलों में से कुछ के कारण बड़े बदलाव होते हैं, मैं जिस एलवी के लिए लिख रहा हूं उसके लिए आवंटन बढ़ रहा है। * हाँ यह एक ubuntu मंच है, लेकिन मैं यहाँ "dd मॉनिटर प्रगति" की तलाश में है। यह Google पर पहला परिणाम है।
माइक एस

ओह, मेरा मतलब दूसरे टर्मिनल या स्क्रीन विंडो में है, भागो sudo watch pkill dd। फिर ddआउटपुट को आराम से देखें।
मुरु

Pkill डिफ़ॉल्ट रूप से SIGTERM नहीं भेजेंगे? मैं प्रयोग भी नहीं करना चाहता, क्योंकि pgrep dd 3 pid के साथ आता है जब एक एकल dd चल रहा है: kthreadd, oddjob, और dd। मुझे डर है कि pkill क्या करेगा। आप pkill के साथ -USR1 सिग्नल भेज सकते हैं, लेकिन फिर से मुझे नहीं पता कि कर्नेल थ्रेड या obbjob को भेजना सुरक्षित है या नहीं। वॉच कमांड साफ दिखता है, लेकिन यह कुछ अतिरिक्त कदमों की तरह लगता है, ताकि कुछ समय बाद लूप से बचा जा सके। आम तौर पर अगर मैं एक खिड़की में एक dd कर रहा हूँ तो मैं उसी गोले में बाद में कुछ करने जा रहा हूँ। जबकि लूप सुरक्षित है: आपको पता है कि सिग्नल किस पिड को प्राप्त होता है।
माइक एस

ज्यादातर मुझे परवाह नहीं है कि मुझे कौन सा ग्रिड सिग्नल मिलता है, क्योंकि मैं उपयोग करता हूं watch pkill -USR1 -x dd। चूंकि मैं watchअन्य समान कार्यों के लिए भी उपयोग करता हूं , इसलिए यह स्वाभाविक रूप से आता है।
मुरु

11

http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html

मूल रूप से:

kill -USR1 < dd pid >

1
"pkill -USR1 dd" सबसे सरल संस्करण है जिसके बारे में मुझे पता है (जब तक आप सिर्फ एक उदाहरण dd चला रहे हैं, वैसे भी)। अपने सिस्टम पर मुझे sudo चाहिए: "sudo pkill -USR1 dd"। आपके द्वारा dd कमांड टाइप करने के बाद काम करता है, और आपको कुछ भी नया स्थापित करने की आवश्यकता नहीं है।
फ्रेड हैमिल्टन

7

सबसे आसान है:

 dd if=... of=... bs=4M status=progress oflag=dsync

oflag=dsyncआपके लेखन को सिंक में रखेगा, इसलिए इसकी जानकारी status=progressअधिक सटीक है। हालाँकि यह थोड़ा धीमा हो सकता है।


1
gnu.org/software/coreutils/manual/html_node/dd-invocation.html के अनुसार , का उपयोग conv=fsyncकरना बेहतर है
चेन डेंग-टा

इसके लिए धन्यवाद! मैं एक दूरस्थ lvm2 और bs = 4M में dd कर रहा हूं, 20 के कारक से मेरा स्थानांतरण बढ़ा है और प्रगति संकेत अद्भुत है।
लोनी बेस्ट

6

उबंटू 16.04 पर

Ubuntu 16.04 dd (coreutils) संस्करण 8.25 के साथ आता है । इसलिए विकल्प status=progress है समर्थित :-)

इसका उपयोग करने के लिए, बस status=progressअपनी ddकमांड के साथ जोड़ें ।

उदाहरण :

dd bs=4M if=/media/severus/tools-soft/OperatingSystems/ubuntu-16.04-desktop-amd64.iso of=/dev/null status=progress && sync

के रूप में स्थिति देता है

1282846183 bytes (1.2 GiB, 1.1 GiB) copied, 14.03 s, 101.9 MB/s

यहां छवि विवरण दर्ज करें


5

status=progressस्थानांतरण के दौरान प्रगति प्राप्त करने के लिए विकल्प का उपयोग करें ।

इसके अलावा, conv=fsyncI / O त्रुटियों को प्रदर्शित करेगा।

उदाहरण:

sudo dd if=mydistrib.iso of=/dev/sdb status=progress conv=fsync

4

मुझे वास्तव में ddrescue पसंद है, यह dd के रूप में काम करता है, लेकिन आउटपुट देता है और त्रुटियों पर विफल नहीं होता है, इसके विपरीत यह एक बहुत ही उन्नत एल्गोरिथ्म है एक सफल प्रतिलिपि बनाने के लिए वास्तव में कठिन प्रयास करता है ... इसके लिए कई GUI भी हैं

प्रोजेक्ट: https://www.gnu.org/software/ddresoscope

विकिपीडिया: https://en.wikipedia.org/wiki/Ddrescue

यहां छवि विवरण दर्ज करें


3

मैंने बैश रैपर बनाया है ddजो pvप्रगति दिखाने के लिए उपयोग करेगा । इसे अपने अंदर रखें .bashrcऔर ddहमेशा की तरह उपयोग करें :

# dd if=/dev/vvg0/root of=/dev/vvg1/root bs=4M
    2GB 0:00:17 [ 120MB/s] [===========================================================>] 100%            
0+16384 records in
0+16384 records out
2147483648 bytes (2.1 GB) copied, 18.3353 s, 117 MB/s

स्रोत:

dd()
{
    local dd=$(which dd); [ "$dd" ] || {
        echo "'dd' is not installed!" >&2
        return 1
    }

    local pv=$(which pv); [ "$pv" ] || {
        echo "'pv' is not installed!" >&2
        "$dd" "$@"
        return $?
    }

    local arg arg2 infile
    local -a args
    for arg in "$@"
    do
        arg2=${arg#if=}
        if [ "$arg2" != "$arg" ]
        then
            infile=$arg2
        else
            args[${#args[@]}]=$arg
        fi
    done

    "$pv" -tpreb "$infile" | "$dd" "${args[@]}"
}

अच्छा तरीका है लेकिन यह सूडो या समय जैसी आज्ञाओं के साथ काम नहीं करता है।
मैक्सिम खोलियाकिन

1
शीर्ष पर इसके साथ / usr / स्थानीय / बिन / dd में डालें #!/bin/bash:। नीचे: tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"या आप हार्डकोड ddस्थान की इच्छा कर सकते हैं । फिर उपयोग करें local dd=/usr/bin/dd। निष्पादन योग्य बिट जोड़ने के लिए मत भूलना chmod +x /usr/local/dd:।
midenok

2

इसलिए आज मैं दौड़ते killसमय लूप में दौड़ने की कोशिश से थोड़ा निराश हो ddगया, और उन्हें आसानी से समानांतर रूप से चलाने के लिए इस विधि के साथ आया:

function vdd {
    sudo dd "$@" &
    sudo sh -c "while pkill -10 ^dd$; do sleep 5; done"
}

अब बस vddकहीं भी उपयोग करें जिसे आप सामान्य रूप से उपयोग करेंगे dd(यह सीधे सभी तर्कों को पास करता है) और आपको प्रत्येक 5s में प्रगति की रिपोर्ट मिलेगी।

केवल नकारात्मक पक्ष यह है कि dd पूरा होने पर कमांड तुरंत वापस नहीं आता है; इसलिए यह संभव है कि यह कमांड आपको नोटिस और निकास से पहले dd रिटर्न के बाद एक अतिरिक्त 5s प्रतीक्षा कर सकता है।


2

यह एक फोर्स dd को हर 2 सेकंड में आँकड़े प्रदान करता है जो कि घड़ी के लिए डिफ़ॉल्ट है:

watch killall -USR1 dd

हर 2 सेकंड से हर 5 सेकंड में बदलने के लिए, इस तरह 5 विकल्प जोड़ें:

watch -n 5 killall -USR1 dd

2

बस के मामले में CentOS भूमि से किसी को भी इस धागे को खोजने के लिए होता है ...

'स्थिति = प्रगति' विकल्प CentOS 7.5 और 7.6 के साथ काम करता है

@DavidDavidson द्वारा दिए गए उत्तर का तात्पर्य है कि फीचर को Coreutils 8.24 में नया जोड़ा गया था।

GNU कोर्यूटिल्स के संस्करण 8.24 में dd के लिए एक पैच शामिल है जो प्रगति को प्रिंट करने के लिए एक पैरामीटर पेश करता है।

यह मामला हो सकता है, लेकिन CentOS समान संस्करण योजना का पालन नहीं कर सकता है।

CentOS 7.6.1810 के साथ आने वाले Coreutils का संस्करण है:

coreutils-8.22-23.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts

और dd का संस्करण जो संस्थापित है:

[root@hostname /]# dd --version
dd (coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Paul Rubin, David MacKenzie, and Stuart Kemp.

यह संस्करण 8.22 दिखाता है ।

हालाँकि, मैंने 7.5 स्टेटस = प्रोग्रेस ’का परीक्षण dd के साथ CentOS 7.5 और CentOS 7.6 (दोनों Coreutils के संस्करण 8.22 के साथ) किया है और यह ठीक से काम करता है।

मुझे नहीं पता कि RedHat कोरुटिल के इतने पुराने संस्करण का उपयोग करने का विकल्प क्यों चुनता है, लेकिन कार्यक्षमता 8.22 के साथ मौजूद है।


1

जैसा कि ऊपर उल्लेख किया गया है, कम से कम जीएनयू कोर्यूटिल्स या बिजीबॉक्स से 'डीडी' के साथ, यह प्रगति की जानकारी को स्टादर को प्रिंट करके एक यूएसआर 1 सिग्नल का जवाब देगा।

मैंने dd के लिए थोड़ा रैपर स्क्रिप्ट लिखा है जो एक अच्छा प्रतिशत-पूर्ण संकेतक दिखाता है, और किसी भी तरह से dd की प्रक्रिया या कार्य करने के तरीके में हस्तक्षेप नहीं करने की कोशिश करता है। आप इसे जीथब पर पा सकते हैं:

http://github.com/delt01/dd_printpercent

दुर्भाग्य से, यह SIGUSR1 ट्रिक केवल जीएनयू dd (कोरुटिल्स पैकेज से) या व्यस्त बॉक्स के 'dd' मोड के साथ काम करता है, जो उस विशिष्ट सुविधा के साथ संकलित है। यह FreeBSD और OS X सहित अधिकांश BSD प्रणालियों के साथ स्टॉक 'dd' के साथ काम नहीं करता है ... :(


लिंक मर चुका है।
इश्माएल

1

आप किसी भी कोर्यूटिल्स प्रोग्राम का उपयोग करके प्रगति देख सकते हैं progress - Coreutils Progress Viewer

यह निगरानी कर सकता है:

cp mv dd टार कैट rsync grep fgrep egrep कट सॉर्ट md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzn gunzip bzip2 bzip2 xz unxz lzma unzz lzma unlzma 7z 7za

आप मैनपेज देख सकते हैं

कमांड चालू होने पर आप इसे अलग टर्मिनल विंडो में उपयोग कर सकते हैं या dd कमांड के साथ लॉन्च कर सकते हैं:

dd if=/dev/sda of=file.img & progress -mp $!

यहां &पहले कमांड की जरूरत होती है और कमांड खत्म होने तक इंतजार करने के बजाय तुरंत जारी रहती है।

प्रगति कमांड के साथ लॉन्च किया गया है: -mइसलिए यह निगरानी प्रक्रिया समाप्त होने तक इंतजार करता है, -pइसलिए यह किसी दिए गए पीड को मॉनिटर करता $!है और अंतिम कमांड पिड है।

यदि आप sudo के साथ dd जारी करते हैं, तो आपको भी प्रगति के साथ होना चाहिए:

sudo dd if=/dev/sda of=file.img &
sudo progress -m
# with no -p, this will wait for all coreutil commands to finish
# but $! will give the sudo command's pid
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.