লিনাক্সে কোনও ডিডি-তে শতাংশ পাওয়ার কোনও পদ্ধতি আছে কি?


41

সুতরাং এখানে কি ঘটছে।

আমি একটি লিনাক্স লাইভ ইউএসবি মাধ্যমে আমার সার্ভারে একটি ড্রাইভের ব্যাকআপ শুরু করেছি। আমি প্রথম ড্রাইভটি ddকমান্ড ভ্যানিলা দিয়ে অনুলিপি করতে শুরু করি ; ঠিক sudo dd if=/dev/sda of=/dev/sdc1তখনই আমি মনে রেখেছিলাম যে এটি শেষ না হওয়া অবধি কনসোলটি ফাঁকা ছেড়ে দেয়।

যাইহোক যাইহোক, একই ড্রাইভে আমার অন্যরকম ব্যাকআপ চালানোর দরকার ছিল, তাই আমি এটির পাশাপাশি এটি শুরু করেছিলাম sudo dd if=/dev/sdb of=/dev/sdc3 status=progressএবং তারপরে আমার কাছে একটি টেক্সট লাইন পাওয়া গেল যা ট্রান্সফার বর্তমান হার এবং বাইটের অগ্রগতি দেখায়।

আমি এমন একটি পদ্ধতির জন্য প্রত্যাশা করছিলাম যা ১.৮ টিবি'র মধ্যে কতগুলি বাইট ব্যাক আপ করা হয়েছে তার গণিত না করে ব্যাকআপের শতকরা হার দেখায়। অবস্থা = অগ্রগতির চেয়ে কি এটি করার সহজ উপায় আছে?

উত্তর:


68

এই প্রশ্নের উত্তর দেখুন [ 1 ]

pv

উদাহরণস্বরূপ আপনি শুরু করার আগে ব্যবহার করতে পারেনpv

sudo apt-get install pv    # if you do not have it
pv < /dev/sda > /dev/sc3   # it is reported to be faster
pv /dev/sda > /dev/sc3     # it seems to have the same speed of the previous one
#or 
sudo dd if=/dev/sda | pv -s 1844G | dd of=/dev/sdc3  # Maybe slower 

আউটপুট [ 2 ] :

440MB 0:00:38 [11.6MB/s] [======>                             ] 21% ETA 0:02:19

দ্রষ্টব্য:
বিশেষত বড় ফাইলগুলির জন্য আপনি man ddআপনার হার্ডওয়ারের সমস্ত গতি বাড়ানোর জন্য প্রয়োজনীয় বিকল্পগুলি দেখতে এবং সেট করতে চাইতে পারেন , উদাহরণস্বরূপ bs=100Mবাফার সেট করা, oflag=syncকার্যকর বাইটগুলি লিখিতভাবে গণনা করার জন্য direct...
বিকল্পটি -sকেবলমাত্র পূর্ণসংখ্যার পরামিতিগুলি গ্রহণ করে 1.8T-->1844G
আপনি প্রথম লাইনগুলি থেকে লক্ষ্য করতে পারেন যে আপনার মোটেই প্রয়োজন নেই dd


kill -USR1 pid

আপনি যদি ইতিমধ্যে চালুdd , কমান্ড একবার আপনি তার PID, পৃথকীকৃত হয়েছে ( Ctrl- Z+ + bgএবং আপনি এটা পড়তে, বা pgrep ^dd...) আপনি যদি একটি সংকেত পাঠাতে পারে USR1(অথবা SIGUSR1, অথবা SIGINFOনীচে দেখুন) এবং আউটপুট পড়ুন।
যদি প্রোগ্রামটির পিআইডি 1234 থাকে

kill -USR1 1234

dd এর এসটিডিআরআর এর টার্মিনালে অনুরূপ কিছু দিয়ে উত্তর দেবে

4+1 records in
4+0 records out
41943040 bytes (42 MB) copied, 2.90588 s, 14.4 MB/s

সতর্কতা: ওপেনবিএসডি এর অধীনে আপনাকে kill[ 3 ] এর আচরণটি আগে থেকে পরীক্ষা করতে হবে: পরিবর্তে ব্যবহার করুন
kill -SIGINFO 1234
এটি নামক অস্তিত্ব বিদ্যমান SIGINFOSIGUSR1এক, এই ক্ষেত্রে, উচিত বিনষ্ট প্রোগ্রাম ( dd) ...
উবুন্টু অধীনে ব্যবহার -SIGUSR1( 10)।


9
আপনি প্রায় নিশ্চিতভাবেই দেখতে পাবেন যে dd কমান্ডে 'bs' ব্যবহার করে এটির গতি অনেক বেড়ে যায়। একবারে 100M ব্লক স্থানান্তর করতে = / দেব / ব্লা অফ = / টিএমপি / ব্লা বিএস = 100
এম এর

1
@ সিরেক্স অবশ্যই আপনার হার্ডওয়ারের সাথে সম্পর্কিত ট্রান্সফার রেট অনুকূল করতে আপনাকে বিএস সেট করতে হবে ... উত্তরে ওপি-র কমান্ডলাইনটি পুনরাবৃত্তি করা হয়েছে। :-)
হাস্তুর

3
@Criggie: হয়তো যে কারণ ddছিল ইতিমধ্যে সব শেষ write()সিস্টেম কল করুন এবং fsyncবা closeনাগালের ডিস্কের মধ্যে লেখা জন্য অপেক্ষা ব্লক করা হয়েছে। ধীরে ধীরে ইউএসবি স্টিকের সাহায্যে, ডিফল্ট লিনাক্স আই / ও বাফার থ্রোসোল্ডগুলি কীভাবে বড় নোংরা লিখন-বাফারগুলি দ্রুত ডিস্কগুলিতে বড় ফাইলগুলির চেয়ে গুণগতভাবে ভিন্ন আচরণের দিকে পরিচালিত করতে পারে, কারণ আপনি যে অনুলিপি করছেন তার চেয়ে বড় বাফারগুলিও এটির চেয়ে বড় এখনও লক্ষণীয় সময় লাগে।
পিটার কর্ডেস

5
দুর্দান্ত উত্তর। তবে আমি লক্ষ করতে চাই যে ওপেনবিএসডি-তে ডান কিল সিগন্যাল হ'ল সিগিনফো, সিগুসআর 1 নয়। ওপেনবিএসডি-তে ইউএসআর 1 ব্যবহার করা কেবল ডিডি মেরে ফেলবে। সুতরাং আপনি নতুন পরিবেশে এটি চেষ্টা করার আগে, এমন কোনও স্থানান্তর যা আপনি বাধা দিতে চান না, আপনি পরিবেশ কীভাবে কাজ করে (নিরাপদ পরীক্ষায়) তার সাথে নিজেকে পরিচিত করতে চাইতে পারেন।
তোগাম

1
সিগন্যালের পরামর্শটি ddহ'ল দুর্দান্ত তথ্য, বিশেষত এমন সার্ভারগুলির জন্য যেখানে আপনি ইনস্টল করতে / করতে চান নাpv
মাইকে

38

এই ধরণের স্টাফের জন্য আমার গো টু টুলটি হ'ল progress:

এই সরঞ্জামটিকে একটি টিনি , ডার্টি, লিনাক্স-এবং-ওএসএক্স-ওনল সি কমান্ড হিসাবে বর্ণনা করা যেতে পারে যা আপনার সিস্টেমে বর্তমানে চলমান কোর্টিলস বেসিক কমান্ডগুলি (সিপি, এমভি, ডিডি, টার, জিজিপ / গানজিপ, বিড়াল ইত্যাদি) সন্ধান করে এবং অনুলিপি করা তথ্যের শতাংশ প্রদর্শন করে । এটি আনুমানিক সময় এবং মাধ্যমে আউটপুটও প্রদর্শন করতে পারে এবং একটি "শীর্ষ-মত" মোড (নিরীক্ষণ) সরবরাহ করে।

"<কোড> অগ্রগতি </ কোড> ক্রিয়ায়" স্ক্রিনশট

এটি কেবল /procআকর্ষণীয় কমান্ডগুলির জন্য স্ক্যান করে এবং তারপরে ডিরেক্টরিগুলি fdএবং fdinfoখোলা ফাইলগুলি অনুসন্ধান এবং অবস্থানগুলি সন্ধান করতে এবং বৃহত্তম ফাইলের জন্য স্থিতি প্রতিবেদন করে।

এটি খুব হালকা এবং কার্যত কোনও কমান্ডের সাথে সামঞ্জস্যপূর্ণ।

আমি এটি বিশেষভাবে দরকারী বলে মনে করি কারণ:

  • pvপাইপের তুলনায় বা dcfldd, অপারেশন শুরু করার সময় আমাকে আলাদা কমান্ড চালানোর কথা মনে করতে হবে না, আমি সত্যের পরে জিনিসগুলি পর্যবেক্ষণ করতে পারি;
  • তুলনায় kill -USR1, এটি কার্যত কোনও কমান্ডের সাথে কাজ করে, আমি দুর্ঘটনাক্রমে অনুলিপিটি নষ্ট করছি না তা নিশ্চিত করার জন্য ম্যানপেজটি সর্বদা ডাবল-চেক করতে হবে না; এছাড়াও, এটি দুর্দান্ত যে, প্যারামিটার ছাড়াই যখন আবেদন করা হয়, এটি বর্তমানে চলমান যে কোনও সাধারণ "ডেটা ট্রান্সফার" কমান্ডের অগ্রগতি দেখায়, তাই আমাকে পিআইডিও সন্ধান করতে হবে না;
  • তুলনায় pv -d, আবার আমার পিআইডি সন্ধান করার দরকার নেই।

1
দ্রষ্টব্য: আপনি কেবল কোর্টিলস প্রক্রিয়াগুলির চেয়ে বেশি নিরীক্ষণ করতে পারেন। কমান্ডটির নামটি কেবল সহ উল্লেখ করুন --command <command-name>
jpaugh

1
এটা সত্যিই দারুন!
ফ্লোরিস

25

রান dd, তারপর, একটি পৃথক শেল, নিম্নলিখিত কমান্ড ডাকা:

pv -d $(pidof dd) # root may be required

এটি পিভি ddপ্রক্রিয়াটির সমস্ত খোলার ফাইল বর্ণনাকারীর পরিসংখ্যানগুলি অর্জন করবে । এটি আপনাকে উভয়ই দেখিয়ে দেবে যেখানে পড়তে এবং লেখার জন্য বাফার বসে।


2
বাস্তবের পরে কাজ করে !? অ্যামেজিং !!
jpaugh

3
এটা খুব দুর্দান্ত। এটি 3 প্রসেসের মাধ্যমে সমস্ত ডেটা পাইপ করার মেমরি-ব্যান্ডউইথ + প্রসঙ্গ-স্যুইচ ওভারহেড এড়িয়ে চলে! @jpaugh: আমি এটা ঠিক এ দেখায় অনুমান /proc/$PID/fdinfoফাইল পদের জন্য, এবং /proc/$PID/fdদেখতে যা ফাইল (এবং এইভাবে মাপ)। সুতরাং হ্যাঁ, খুব দুর্দান্ত, এবং কোনও বৈশিষ্ট্যের জন্য ভাল ধারণা, তবে আমি এটিকে "আশ্চর্যজনক" বলব না কারণ লিনাক্স এপিআই রয়েছে যা এটি অন্য প্রক্রিয়াটির ফাইল অবস্থানগুলিকে পোল করতে দেয়।
পিটার কর্ডেস

@ পিটারকর্ডস আমি বুঝতে পারিনি যে ফাইল-অবস্থান কার্নেল দ্বারা প্রকাশ করা হয়েছিল। (আমি আগে থেকে pvপাইপলাইনগুলি সাবধানে প্রস্তুত করার সাথে সাথে আমার জীবন ব্যয় করছি ।) অবশ্যই আমি একবার ধরে ধরেছিলাম যে এটি কাজ করে।
jpaugh

9

সেখানে বিকল্প নেই dd: dcfldd

dcfldd হ'ল GNU dd এর বর্ধিত সংস্করণ যা ফরেনসিক এবং সুরক্ষার জন্য দরকারী বৈশিষ্ট্যযুক্ত।

স্থিতি আউটপুট - dcfldd স্থানান্তরিত ডেটার পরিমাণ এবং অপারেশনটি কত বেশি সময় নেয় তার ক্ষেত্রে ব্যবহারকারী তার অগ্রগতির আপডেট করতে পারে।

dcfldd if=/dev/zero of=out bs=2G count=1 # test file
dcfldd if=out of=out2 sizeprobe=if
[80% of 2047Mb] 52736 blocks (1648Mb) written. 00:00:01 remaining.

http://dcfldd.sourceforge.net/
https://linux.die.net/man/1/dcfldd


এটি একটি দীর্ঘ কমান্ড নাম ... স্পষ্টতই, এটি নিকৃষ্ট হয়। (+1)
jpaugh

6

শতাংশ হিসাবে আপনাকে কিছু গণিত করতে হবে, তবে আপনি ইতিমধ্যে শুরু করার পরেও, মানব পাঠযোগ্য আকারে একটি ডিডির অগ্রগতি পেতে পারেন kill -USR1 $(pidof dd)

বর্তমান ডিডি প্রক্রিয়াটি এর মতো প্রদর্শিত হবে:

11117279 বাইট (11 এমবি, 11 মাইবি) অনুলিপি করা হয়েছে, 13.715 এস, 811 কেবি / এস


4
এটি মূলত একই জিনিসটি status=progressদেয়
র‌্যাক্লাইস

1
আমি আসলে বলতে চাইছিলাম যে স্থিতি = অগ্রগতি দেয় ঠিক একই জিনিস।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.