সংক্ষিপ্তসার: dd
একটি ক্র্যাংকি সরঞ্জাম যা সঠিকভাবে ব্যবহার করা শক্ত। এটি আপনাকে বলে এমন অসংখ্য টিউটোরিয়াল সত্ত্বেও এটি ব্যবহার করবেন না। dd
এর সাথে একটি "ইউনিক্স স্ট্রিট ক্রেডিট" ভিবি যুক্ত রয়েছে - তবে আপনি কী করছেন তা যদি আপনি সত্যিই বুঝতে পারেন তবে আপনি জানতে পারবেন যে এটি আপনাকে 10 ফুট খুঁটির সাথে স্পর্শ করা উচিত নয়।
dd
read
প্রতি ব্লক সিস্টেমে একটি কল দেয় (এর মান দ্বারা সংজ্ঞায়িত bs
)। read
সিস্টেম কলটি নির্দিষ্ট বাফার আকারের যতটা ডেটা দেয় তার কোনও গ্যারান্টি নেই । এটি নিয়মিত ফাইল এবং ব্লক ডিভাইসের জন্য কাজ করতে ঝোঁক, তবে পাইপ এবং কিছু অক্ষর ডিভাইসের জন্য নয়। দেখুন ডেডি কখন অনুলিপি করার উপযুক্ত? (বা, কখন পড়বেন) (এবং আংশিক লিখুন) আরও তথ্যের জন্য। যদি read
সিস্টেম কল একেরও কম পূর্ণ ব্লক ফেরত দেয় তবে dd
আংশিক ব্লক স্থানান্তর করে। এটি এখনও নির্দিষ্ট সংখ্যক ব্লকের অনুলিপি করে, তাই স্থানান্তরিত বাইটের মোট পরিমাণ অনুরোধের চেয়ে কম হয়।
"আংশিক পঠন" সম্পর্কে সতর্কতা আপনাকে ঠিক এটি বলে: একটি পাঠ আংশিক ছিল, তাই dd
একটি অসম্পূর্ণ ব্লক স্থানান্তরিত করে। ব্লকের গণনায়, এর +1
অর্থ একটি ব্লক আংশিকভাবে পড়া হয়েছিল; আউটপুট গণনা হ'ল +0
, সমস্ত ব্লকগুলি পঠিত হিসাবে লিখিত ছিল।
এই ডেটার যদৃচ্ছতা প্রভাবিত করে না: সমস্ত বাইট যে dd
আউট লিখেছেন বাইট এটি থেকে পড়তে হয় /dev/urandom
। তবে আপনি প্রত্যাশার চেয়ে কম বাইট পেয়েছেন।
লিনাক্সের /dev/urandom
যথেচ্ছ বৃহত অনুরোধগুলি (উত্স: extract_entropy_user
ইন drivers/char/random.c
) সংযোজন করে , তাই dd
এটি পড়ার পরে সাধারণত নিরাপদ। তবে বিপুল পরিমাণে ডেটা পড়তে সময় লাগে। প্রক্রিয়াটি যদি একটি সিগন্যাল পায় তবে read
সিস্টেম কলটি তার আউটপুট বাফারটি পূরণ করার আগে ফিরে আসে। এটি স্বাভাবিক আচরণ এবং অ্যাপ্লিকেশনগুলির read
একটি লুপে কল করার কথা ; dd
এটি করবেন না, historicalতিহাসিক কারণে ( dd
এর উত্সগুলি সংকীর্ণ, তবে এটি টেপগুলি অ্যাক্সেস করার একটি সরঞ্জাম হিসাবে শুরু হয়েছে বলে মনে হয়, যার অদ্ভুত প্রয়োজনীয়তা রয়েছে এবং এটি কখনও কখনও সাধারণ-উদ্দেশ্যে সরঞ্জাম হিসাবে অভিযোজিত হয়নি)। আপনি যখন অগ্রগতি পরীক্ষা করেন, এটি dd
প্রক্রিয়াটি এমন সংকেত প্রেরণ করে যা পাঠকে বাধা দেয়। আপনার কাছে কতগুলি বাইট জেনে যাওয়ার মধ্যে একটি পছন্দ আছেdd
সামগ্রিকভাবে অনুলিপি করবেন (এটিকে বাধা না দেওয়ার বিষয়টি নিশ্চিত করুন - কোনও অগ্রগতি চেক নেই, কোনও স্থগিতাদেশ নেই), বা dd
এখনও অবধি কতগুলি বাইট অনুলিপি করেছেন তা জেনেছেন, এই ক্ষেত্রে আরও কতগুলি বাইট অনুলিপি করবেন তা আপনি জানেন না।
dd
জিএনইউ কোর্টিলস- এর সংস্করণটির (যেমন এমবেডেড লিনাক্স এবং সাইগউইন-তে পাওয়া যায়) একটি পতাকা রয়েছে fullblock
যা একটি লুপে (এবং এর জন্য ডাইটো ) dd
কল করতে বলে এবং এভাবে সর্বদা সম্পূর্ণ ব্লক স্থানান্তর করে। ত্রুটি বার্তাটি আপনাকে এটি ব্যবহার করার পরামর্শ দেয়; আপনার সবসময় এটি ব্যবহার করা উচিত (উভয় ইনপুট এবং আউটপুট পতাকাগুলিতে) খুব বিশেষ পরিস্থিতিতে (বেশিরভাগ সময় টেপগুলি অ্যাক্সেস করার সময়) ব্যতীত - আপনি যদি কিছুটা ব্যবহার করেন তবে তা হ'ল: এখানে আরও ভাল সমাধান থাকে (নীচে দেখুন)।read
write
dd
dd if=/dev/urandom iflag=fullblock oflag=fullblock of=file bs=1M count=1000000
কী dd
করবে তা নিশ্চিত করার আর একটি সম্ভাব্য উপায় হ'ল ১ টি ব্লকের আকার পাস করা Then তারপরে আপনি বলতে পারবেন যে ব্লক গণনা থেকে কয়টি বাইট অনুলিপি করা হয়েছিল, যদিও আমি নিশ্চিত না যে read
প্রথমটি পড়ার আগে কোনও ব্যত্যয় ঘটলে কী হবে বাইট (যা অনুশীলনে খুব সম্ভবত না তবে ঘটতে পারে)। তবে এটি কার্যকর হলেও এটি খুব ধীর very
ব্যবহার dd
সম্পর্কে সাধারণ পরামর্শটি ব্যবহার করবেন নাdd
। যদিও dd
ডিভাইসগুলিতে অ্যাক্সেসের জন্য প্রায়শই নিম্ন-স্তরের কমান্ড হিসাবে বিজ্ঞাপন দেওয়া হয় তবে এটি আসলে তেমন কোনও বিষয় নয়: সমস্ত যাদুটি ডিভাইস ফাইলে (দ্য /dev/…
) অংশে ঘটে থাকে , dd
এটি কেবলমাত্র একটি সাধারণ সরঞ্জাম যা অপব্যবহারের উচ্চ সম্ভাবনার সাথে ডেটা ক্ষতিগ্রস্থ হয় resulting । বেশিরভাগ ক্ষেত্রে, কমপক্ষে লিনাক্সে আপনি যা চান তার করার একটি সহজ এবং নিরাপদ উপায় রয়েছে।
উদাহরণস্বরূপ, কোনও ফাইলের শুরুতে নির্দিষ্ট সংখ্যক বাইট পড়ার জন্য, কেবল কল করুন head
:
head -c 1000000m </dev/urandom >file
আমি আমার মেশিনে একটি দ্রুত বেঞ্চমার্ক তৈরি করেছি এবং dd
একটি বৃহত ব্লকের আকার এবং এর মধ্যে কোনও পারফরম্যান্সের পার্থক্য লক্ষ্য করি নি head
।
আপনি কি আবার গোড়া কিছু বাইট লাফালাফি করার প্রয়োজন হলে, নল tail
মধ্যে head
:
dd if=input of=output count=C bs=B seek=S
<input tail -c +$((S*B+1)) | head -c $((C*B)) >output
আপনি যদি অগ্রগতি দেখতে চান lsof
তবে ফাইলটি অফসেট দেখতে কল করুন। এটি কেবল একটি নিয়মিত ফাইল (আপনার উদাহরণের আউটপুট ফাইল) এ কাজ করে, কোনও অক্ষর ডিভাইসে নয়।
lsof -a -p 1234 -d 1
cat /proc/1234/fdinfo/1
পাইপলাইনে অতিরিক্ত আইটেম ব্যয়ে আপনি pv
অগ্রগতি প্রতিবেদন ( dd
'এর চেয়ে ভাল ) পেতে কল করতে পারেন (পারফরম্যান্স-ভিত্তিক, এটি সবেমাত্র অনুধাবনযোগ্য)।