সিপি চালানোর অগ্রগতি কীভাবে চেক করবেন?


54

সিপি প্রক্রিয়া চলমান অগ্রগতি পরীক্ষা করা সম্ভব? কিছু প্রক্রিয়া বিভিন্ন কেআইএলএল সংকেতগুলিতে সাড়া দেয় যাতে আপনি তাদের অবস্থা কী তা পরীক্ষা করতে পারেন। আমি জানি যে আমি প্যারামিটার -v দিয়ে সিপি চালাতে পারি তবে কি করতে ভুলে গেলে, সিপি খুব দীর্ঘ সময় ধরে চলতে থাকে এবং আমি জানতে চাই যে কোন ফাইলটি অনুলিপি করা হচ্ছে, বা ইতিমধ্যে কয়টি অনুলিপি করা হয়েছিল।


লিখিত ক্রিয়াকলাপের তুলনায় রিড অপারেশনগুলি আরও দ্রুততর হয়ে গেলে বেশিরভাগ সমাধান (লিনাক্স এবং সম্ভবত অন্যান্য পসিক্স, যেমন ম্যাক ওএস এক্স) এ বন্ধ হয়ে যায়, যা প্রকৃত সমাপ্তির 100% অনেক আগে প্রদর্শন করে। কারণগুলি লেখার ক্রিয়াকলাপগুলি প্রকৃতপক্ষে সম্পাদন হওয়ার আগে ফাইল সিস্টেম ক্যাশে বসে। এই মুহুর্তে, জিনিসগুলি ট্র্যাক করা কঠিন। এই কৌশলটি ব্যবধান হ্রাস করতে পারে: অন্য টার্মিনালে while sleep 1 ; do sync ; done
স্টাফেন গৌরিচন

উত্তর:


31

হ্যাঁ, লক্ষ্য ফাইল এবং স্থানীয় ফাইলের স্ট্যাটাস চালিয়ে, এবং একটি ফাইল আকার পান,

অর্থাত stat -c "%s" /bin/ls

এবং আপনি দুটি মানের তুলনা করে অনুলিপি করা তথ্যের শতাংশ পান, এটি হ'ল

একটি খুব বেসিক বাস্তবায়নে এটি দেখতে পাবেন:

function cpstat()
{
  local pid="${1:-$(pgrep -xn cp)}" src dst
  [[ "$pid" ]] || return
  while [[ -f "/proc/$pid/fd/3" ]]; do
    read src dst < <(stat -L --printf '%s ' "/proc/$pid/fd/"{3,4})
    (( src )) || break
    printf 'cp %d%%\r' $((dst*100/src))
    sleep 1
  done
  echo
}

4
আপনার পরামর্শের সদৃশ পোস্ট করার উদ্দেশ্যে নয়, তাই আমি কোডটি এখানে যুক্ত করেছি। আশা করি কিছু মনে করবেন না।
মানবসচেতন

@ মানাটওয়ার্ক আহ ধন্যবাদ, আমি একটি সম্পূর্ণ উদাহরণ দেওয়ার ক্ষেত্রে কেবল অলস ছিলাম :-)
ডেইজি

দুর্দান্ত, এটি আমার সার্ভারে সমস্ত সরঞ্জামে চলেছে! ধন্যবাদ!
ACK_stoverflow

লিনাক্স 4 এ, একটি দ্রুত ইউএসবি ড্রাইভ থেকে একটি পুরানো কার্ড রিডারে একটি সস্তা মাইক্রো এসডি পর্যন্ত সিপি করা 500 এমবি ফাইল: সিপি এবং সিঙ্কটি কয়েক ডজন মিনিটের জন্য স্তব্ধ থাকে। তবে যদি আমি উত্স এবং গন্তব্য ফাইলটি স্থির করি তবে আমি সিপি শুরু হওয়ার পরে উভয় দশকেই একই নম্বর পাই।
gcb

40

ম্যাক ওএস এক্স এর সাম্প্রতিক সংস্করণগুলিতে আপনি অগ্রগতি দেখতে CTRL+ টিপুন Tকরতে পারেন। থেকে CP জন্য ওএসএক্স 10.6 man পৃষ্ঠা (1) :

 "If cp receives a SIGINFO (see the status argument for stty(1)) signal,
 the current input and output file and the percentage complete will be
 written to the standard output."

হিটিং CTRL+ Tওএসএক্স সহ বিএসডি-ইশ মেশিনগুলিতে সিআইএনএনএফওর সাথে বর্তমান প্রক্রিয়াটিকে সংকেত দেওয়ার সমতুল্য।

এটি ডিডি (1) এর জন্যও কাজ করে।

আমি মনে করি না লিনাক্সের এই সিগিনফো মেকানিজম রয়েছে এবং সিপি (1) এর জন্য জিএনইউ ম্যান পৃষ্ঠাতে এমন কিছু দেখতে পাবে না যা প্রগতিটি রিপোর্ট করতে ব্যবহার করা যেতে পারে।


1
কি দারুন! এটি আমাকে বেশি তথ্য দেয় না, তবে আমার mvজীবিত তা জানা যথেষ্ট । ধন্যবাদ!
ড্যান রোজনস্টার্ক

এটি কেবলমাত্র আপনাকে স্বতন্ত্র ফাইলের জন্য শতকরা সম্পূর্ণ বলে দেয় যে এটি সিগন্যাল পাওয়ার পরে এটি অনুলিপি করছে। এটি যে কাজটি করছে তার পুরো শতাংশই এটি দেয় না।
জো সি

21

আপনি যখন প্রচুর ফাইল অনুলিপি করছেন, du -s /path/to/destinationবা find /path/to/destination | wc -lআপনাকে ইতিমধ্যে কতটা কাজ হয়েছে তার একটি ধারণা দেয়।

lsof -p12341234 এর প্রসেস আইডি হ'ল কোন ফাইলটি অনুলিপি করা হচ্ছে তা আপনি খুঁজে পেতে পারেন cp। অনেক সিস্টেমে, pgrep -x cpসমস্ত চলমান প্রক্রিয়াগুলির নামের আইডি প্রতিবেদন করে cp। এটি সম্ভবত খুব কার্যকর হতে পারে না কারণ প্রদত্ত ডিরেক্টরিতে থাকা ফাইলগুলি যে ক্রমে অনুলিপি করা হয়েছে তা মূলত অনির্দেশীয় (লিনাক্সের অধীনে একটি বৃহত ডিরেক্টরিতে ls --sort=noneআপনাকে বলবে; ডিরেক্টরি ট্রি সহ, চেষ্টা করুন find)।

lsof -p1234কলামে আপনাকে জানায় যে কতগুলি বাইট cpইতিমধ্যে বর্তমান ফাইলটির জন্য পড়েছে এবং লিখেছেন OFFSET

লিনাক্সের অধীনে, আইও ব্যবহারের পরিসংখ্যান রয়েছে /proc/$pid/io(আবার, এর জন্য cpপ্রক্রিয়াটির পিআইডি ব্যবহার করুন $pidf)। rcharমান বাইট যে প্রক্রিয়া পড়েছেন মোট সংখ্যা, এবং wcharবাইট যে প্রক্রিয়া লিখেছেন সংখ্যা। এর মধ্যে কেবলমাত্র ফাইলগুলিতে ডেটা নয় ডিরেক্টরিতে মেটাডেটাও অন্তর্ভুক্ত। আপনি সেই চিত্রটি তুলনা করতে পারবেন প্রাপ্ত আনুমানিক চিত্রের সাথে du /path/to/source(যা কেবলমাত্র ফাইলের ডেটা গণনা করে)। read_bytesএবং write_bytesকেবল স্টোরেজ থেকে যা পড়া বা লিখিত হয়েছে তা অন্তর্ভুক্ত করুন, যেমন এটি ইতিমধ্যে ক্যাশে বা এখনও বাফারগুলিতে টার্মিনাল ডায়াগনস্টিকস এবং ডেটা বাদ দেয়।


4
আসল সময়ের জন্য:watch lsof -p1234
মিচিড

3
বা সব watch lsof -p`pgrep -x cp`
মাইক 21

15

একটি তুলনামূলকভাবে নতুন সরঞ্জাম যা ঠিক তা করে অগ্রগতি (পূর্বে সিভি [কোর্টিলস ভিউয়ার])।

এটা কি?

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

এটা কিভাবে কাজ করে?

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



14

এই জন্য আমার প্রিয় ঠাট এক (লিনাক্সের অধীনে) এর PID, জানতে হয় cp(ব্যবহার প্রক্রিয়া ps | grep cpবা অনুরূপ), এবং তারপর সন্ধান করার জন্য /proc/$PID/fd/এবং /proc/$PID/fdinfo/

$ cp -r y z
^Z
$ ls -l /proc/8614/fd
lrwx------ 1 jander jander 64 Aug  2 15:21 0 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug  2 15:21 1 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug  2 15:20 2 -> /dev/pts/4
lr-x------ 1 jander jander 64 Aug  2 15:21 3 -> /home/jander/y/foo.tgz
l-wx------ 1 jander jander 64 Aug  2 15:21 4 -> /home/jander/z/foo.tgz

প্রক্রিয়াটি কী ফাইল খোলে তা এটি আপনাকে দেখাবে। আপনি যদি ফাইলটিতে কতটা প্রক্রিয়া দেখতে চান তা ...

$ cat /proc/8614/fdinfo/3
pos:    105381888
flags:  0500000

posপরামিতি পড়ুন (বা লিখন) পয়েন্টার অবস্থান, বাইট হয়।


7

আপনি করতে পারেন কয়েকটি জিনিস। straceএটি কী করছে তা দেখতে আপনি এটিকে সংযুক্ত করতে পারেন (আউটপুটটি প্রশস্ত হতে পারে!):

স্ট্রেস-পি [সিপির পিড]

অথবা lsofএটি বর্তমানে কোন ফাইলগুলি খোলার তা আপনাকে বলতে পারে :

lsof -p [সিপির পিড]

আপনি যদি একটি বড় পুনরাবৃত্তি চালিয়ে যাচ্ছেন তবে আপনি বর্তমান চলমান ডিরেক্টরিটি পেতে cpব্যবহার pwdxকরতে পারেন যা আপনাকে এটি কীভাবে করছে সে সম্পর্কে কিছু ধারণা দিতে পারে:

pwdx [সিপির পিড]

4

ওপিতে "সিপি" কমান্ড কীভাবে অগ্রগতি হচ্ছে তা দেখার সক্ষমতা উল্লেখ করার সাথে সাথে এটি অবশ্যই বলা উচিত যে অন্যান্য ইউটিলিটিগুলি এই বিশেষ সমস্যার জন্য আরও ভাল better

উদাহরণ স্বরূপ:

rsync -avP FROM TO

TO ফাইল / ফোল্ডারে FROM ফাইল / ফোল্ডার অনুলিপি করার অগ্রগতি প্রদর্শন করবে।


# rsync -avP Video.mp4  /run/media/user1/3.8G/

sending incremental file list
Video.mp4
    565,170,046 100%   51.23MB/s    0:00:10 (xfr#1, to-chk=0/1)

sent 565,308,115 bytes  received 134 bytes  5,210,214.28 bytes/sec
total size is 565,170,046  speedup is 1.00

এবং rsync আপনাকে জানাবে যে এটি কতটা অনুলিপি করা হয়েছে (এবং স্থানান্তর হার)। এটি একই মেশিনে বা নেটওয়ার্ক জুড়ে উভয়ই একক ফাইল বা ফোল্ডারের জন্য কাজ করে।


2
আপনি ভুল প্রশ্নের উত্তর দিচ্ছেন। আপনি যে প্রশ্নটি খুঁজছেন তা হ'ল: ইউনিক্স.স্ট্যাকেক্সেঞ্জা.কম / প্রশ্নগুলি / ২৫7777/২ , যা ইতিমধ্যে একটি উত্তর উল্লেখ করেছে rsync
মুড়ু

1

আপনি যা করতে পারেন তা হ'ল গন্তব্যস্থলে ফাইলগুলি পরীক্ষা করা।

যদি আপনার সিপি কমান্ডগুলি এমন কিছু হয় তবে cp -a <my_source> <my_dest_folder>আমি যা ফাইলগুলি ইতিমধ্যে অনুলিপি করা হয়েছে <my_dest_folder>এবং প্রতিটি ফাইলের আকার পরীক্ষা করে দেখতে পারি, তাই আমি অগ্রগতি দেখতে পাচ্ছি। যদি এটি <my_source>কিছুটা জটিল হয় (ডিরেক্টরিগুলির বেশ কয়েকটি স্তর) তবে একটি ছোট স্ক্রিপ্ট স্থিতি পরীক্ষা করতে সক্ষম হবে। যদিও এই জাতীয় স্ক্রিপ্টটি I / O এর কিছুটা পরিমাণ গ্রাস করতে পারে যা cpপ্রক্রিয়াটির দ্বারা ব্যবহৃত হবে না ।


1

এই সরঞ্জামটি একটি লিনাক্স ইউটিলিটি কমান্ড যা বর্তমানে আপনার সিস্টেমে চলছে কোর্টিলস বেসিক কমান্ড (সিপি, এমভি, ডিডি, টার, জিজিপ / গানজিপ, বিড়াল ইত্যাদি) অনুসন্ধান করে এবং অনুলিপি করা তথ্যের শতাংশ প্রদর্শন করে:

https://github.com/Xfennec/cv


1

আমি যুক্ত করতে চাই cpv, এটির জন্য একটি সামান্য মোড়ক pvলিখলাম যা ব্যবহারের অনুকরণ করে cp

সহজ এবং দরকারী

এখানে চিত্র বর্ণনা লিখুন

আপনি এটি এখানে পেতে পারেন



0

ব্যবহার pv -d:

-d PID[:FD], --watchfd PID[:FD]
ডেটা স্থানান্তর করার পরিবর্তে FDপ্রক্রিয়াটির ফাইল বর্ণনাকারী দেখুন PIDএবং এর অগ্রগতি দেখান। […] যদি কেবলমাত্র একটি PIDনির্দিষ্ট করা থাকে, তবে সেই প্রক্রিয়াটি পর্যবেক্ষণ করা হবে এবং এটি খোলার সমস্ত নিয়মিত ফাইল এবং ব্লক ডিভাইসগুলি একটি অগ্রগতি বারের সাথে দেখানো হবে। pvপ্রক্রিয়া থেকে প্রস্থান করা হবে যখন প্রক্রিয়া PIDথেকে প্রস্থান।

( উত্স )

আপনার চলমান পিআইডিটি সন্ধান করুন cp( pidof cp), ধরা যাক এটি 12345; তারপর সহজভাবে

pv -d 12345

নোট:

  • pvযে একই ব্যবহারকারীর cp(বা রুট হিসাবে) চালায় সে হিসাবে চালান ।
  • যেহেতু অনুলিপি করার অর্থ একটি ফাইল পড়া এবং অন্যটিতে লেখা, তাই একবারে দু'টি ফাইল পর্যবেক্ষণ করা হবে বলে আশা করুন।
  • cpএই মুহুর্তে যদি ছোট ছোট ফাইলগুলি প্রক্রিয়াজাত করা হয় তবে আপনি সম্ভবত সেগুলি সমস্ত আউটপুটে দেখতে পাবেন না (একটি ছোট ফাইল pvএটিকে নেওয়ার জন্য খুব দ্রুত বন্ধ হয়ে যেতে পারে )। তবুও কিছু উপস্থিত হবে, তারপরেও আপনি কি করতে পারবেন তা বলতে সক্ষম cpহবেন।
  • pv -d "$(pidof cp)"কাজ করতে পারে; তবে যদি একের অধিক cpচলমান থাকে তবে এটি কার্যকর হবে না। নেই pidof -s, যা সর্বাধিক এক PID, এ ফেরৎ, কিন্তু আপনি নিশ্চিত এটা সঠিক অধিকারে থাকবে হতে পারে না cpঅনেক যদি প্রক্রিয়া।

-1

আপনি প্রক্রিয়াটিতে একটি সংকেত পাঠাতে পারেন:

kill -SIGUSR1 pid

এমন কোনও স্ক্রিপ্ট তৈরি করা আরও কার্যকর যা আপনি সিটিআরএল-সি চাপ না দেওয়া বা প্রক্রিয়া শেষ না হওয়া পর্যন্ত পোলিং করে:

while [ : ] ; do kill -SIGUSR1 $1 && sleep 1m || exit ; done

ডিডির জন্য কাজ করে। সিপির জন্য কাজ করে না । হতে পারে আপনাকে অন্য একটি সিগন্যাল ব্যবহার করতে হবে। আমি একবার সিআইজিএনএফও চেষ্টা করেছিলাম তবে ইন্টেল প্ল্যাটফর্মে এর আর কোনও উপস্থিতি নেই বলে মনে হয়।

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