সীমাবদ্ধ মাপের ডিভাইসগুলি অনুলিপি করার সময় কেন ব্লকের আকার নির্দিষ্ট করবেন?


12

অনলাইন টিউটোরিয়ালগুলিতে প্রায়শই সিএসরোমকে আইসো ইমেজে অনুলিপি করতে নীচের কমান্ডটি ব্যবহার করার পরামর্শ দেওয়া হয়:

$ dd if=/dev/dvd of=foobar.iso bs=2048

বাইট আকার নির্দিষ্ট করা আবশ্যক কেন? আমি লক্ষ্য করেছি যে বাস্তবে 2048 হ'ল সিডিআরএম চিত্রগুলির জন্য স্ট্যান্ডার্ড বাইট আকার তবে ddএটি নির্দিষ্ট করে না দিয়ে bs=বা count=কাজ করে বলে মনে হয় ।

সুনির্দিষ্ট আকারের ডিভাইস থেকে অনুলিপি করার সময় বা কোন পরিস্থিতিতে নির্দিষ্ট না করা সমস্যা হবে ?bs=count=

উত্তর:


12

ডেডি কখন অনুলিপি করার উপযুক্ত? (বা, যখন পড়ুন () এবং লিখুন () আংশিক) ব্যবহার করার সময় একটি গুরুত্বপূর্ণ সতর্কতা নির্দেশ করে count: ddআংশিক ব্লকগুলি অনুলিপি করতে পারে, তাই যখন দেওয়া countহয় তখন প্রদত্ত সংখ্যক ব্লকের পরে এটি বন্ধ হয়ে যায়, এমনকি কিছু ব্লক অসম্পূর্ণ থাকলেও। সুতরাং আপনি bs * countঅনুলিপি না করা কপিরাইট বাইটের চেয়ে কম দিয়ে শেষ করতে পারেন iflag=fullblock

ডিডির জন্য ডিফল্ট ব্লকের আকার 512 বাইট। countএকটি সীমা; আপনার প্রশ্নের ইঙ্গিত হিসাবে সীমাবদ্ধ মাপের একটি ডিভাইস অনুলিপি করার সময় এটি প্রয়োজন হয় না, এবং সত্যই কোনও ডিভাইসের কেবলমাত্র অংশটি অনুলিপি করার উদ্দেশ্যে।

আমি মনে করি এখানে দুটি দিক বিবেচনা করতে হবে: কর্মক্ষমতা এবং ডেটা পুনরুদ্ধার।

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

যতক্ষণ তথ্য পুনরুদ্ধারের বিষয়, আপনি যদি ছোট ছোট ব্লকের আকার ব্যবহার করেন তবে আপনি ব্যর্থ হওয়া হার্ড ডিস্ক থেকে আরও ডেটা পুনরুদ্ধার করতে পারেন; এটি dd-rescueস্বয়ংক্রিয়ভাবে করার মতো প্রোগ্রামগুলি : এটি প্রাথমিকভাবে বড় ব্লকগুলি পড়ে তবে কোনও ব্লক যদি ব্যর্থ হয় তবে তারা এটি ছোট ব্লকের আকারের সাথে পুনরায় পড়তে পারে। ddএটি করবেন না, এটি পুরো ব্লকটি ব্যর্থ করবে।


2
পারফরম্যান্স বিশেষত; কোনও এসডি কার্ডে একটি পার্টিশন চিত্র লিখুন, উদাহরণস্বরূপ, dd bs=4m iflag=fullblockবনাম ব্যবহার করে dd bs=1111এবং প্রাক্তন আপনাকে যে পরিমাণ উচ্চতর ডেটা রেট দিবে তা লক্ষ্য করুন। এর কারণটি হ'ল প্রাক্তনটি এসডি কার্ডে প্রাকৃতিক ব্লকের আকারের সাথে প্রান্তিক হয়, যদিও পরেরটির জন্য এসডি নিয়ামককে আংশিক শারীরিক ব্লকগুলি লেখার জন্য অনেকগুলি পড়ার, অনুলিপি করা এবং পুনর্বিবেচনার প্রয়োজন হয়। এর গুরুত্বকে fullblockঅবমূল্যায়ন করা উচিত নয়, উপায় ব্যতীত, bsকেবল এটিই সর্বাধিক এবং আংশিক পাঠগুলি পরবর্তীতে ভুল বিভ্রান্তির কারণ হতে পারে।
জেসন সি

5

ব্লকের আকার পরিবর্তন করা এক সময় কতটা বাফার হয় বা পড়ে / লিখিত হয় তা পরিবর্তন করার একটি ভাল উপায়।

এটি আসল ব্লক ডিভাইস বা অসীম / ভার্চুয়াল যা কিনা তা সত্যই সম্পর্কিত নয়। এটি ddলেখার আগে আপনি মেমরিতে কত পরিমাণে সঞ্চয় করতে চান এটি সম্পর্কে । bs=উভয়ই সেট করে ibs=(একসাথে কত ডেটা পাঠ করা হয়) এবং obs=(একসাথে কত ডেটা লেখা হয়)। গন্তব্যটিতে লেখা শুরু করার জন্য আপনার পর্যাপ্ত ডেটা থাকার আগে obs=যত বেশি উচ্চতর পুনরাবৃত্তির ibs=প্রয়োজন হবে dd

count=আপনি যা করতে চাইছেন তা ব্যতীত অন্য কোনও কিছুর উপরও নির্ভর করে না। এটি নিয়ন্ত্রণ করে যে কতগুলি "ব্লক" (যেমন এটি দ্বারা পরিমাপ করা হয়েছে ibs=) ddএর কাজটি সম্পন্ন হিসাবে বিবেচনা করার জন্য প্রয়োজনীয় হবে।


দ্রষ্টব্য ddআংশিক ব্লকগুলি অনুলিপি করার স্টিফেনস পয়েন্ট - এটি সবসময় হয় না bs * count
ড্রয় স্লোয়ান

নোট করুন যে কয়েকটি ইউনিক্স সিস্টেমে আপনাকে অবশ্যই নেটিভ ব্লকের আকারের একাধিকটি পড়তে হবে ; ddছাড়া bs=2048একটি ব্লক ডিভাইস সিডিরম ড্রাইভের থেকে পড়া বা কিছু একাধিক উহার একটি ত্রুটি দেবে।
পল্লীতে

5

চারপাশে কিছুটা কার্গো কাল্ট রয়েছে dd। মূলত, দু'টি বাগ ছিল cpযার কারণে সমস্যা দেখা দিয়েছে: 512 ব্যতীত অন্য কোনও ব্লকের আকারের সাথে লিনাক্স 1024 আকারের ব্লক আকার ব্যবহার করেছিল) এবং ফাইলটি অনুলিপি হিসাবে ফাঁকা ব্লকগুলি সাফ করতে পারে না বলে সমস্যাগুলি সৃষ্টি করেছিল It একটি ব্লক ডিভাইসে স্পার্স ফাইল।

প্রারম্ভিক লিনাক্স মেলিং তালিকার সংরক্ষণাগারগুলিতে আপনি এর কয়েকটি উল্লেখ পেতে পারেন ।

সুতরাং লোকেরা ডিস্ক চিত্রগুলি ডিল করার সঠিক উপায় হিসাবে অভ্যস্ত হয়ে উঠল, এবং সিপি পথের ধারে পড়ে গেল। এবং যেহেতু ডিডি 512 এর একটি ডিফল্ট ব্লক আকার ব্যবহার করে তাই এটি ধীর (আধুনিক সিস্টেমে সিপির চেয়ে ধীর)। তবে আপনার কোন ব্লকের আকার ব্যবহার করা উচিত তা স্পষ্ট নয়। সম্ভবত আপনার ক্ষেত্রে কেউ পড়েছে যে 2048 একটি সিডি-রমের জন্য "প্রাকৃতিক" ব্লক আকার (এটি, সিডি-রমগুলি ত্রুটি সংশোধন করার সাথে সাথে 2,048 বাইটের ডেটা সহ 2,352 বাইট সেক্টরে বিভক্ত) এবং সিদ্ধান্ত নিয়েছে যে এটি ডিডির সাথে ব্যবহার করার জন্য "ডান" আকারটি হ'ল, যদি আপনি (মাঝারিভাবে) বৃহত্তর ব্লকের আকার ব্যবহার করেন তবে সম্ভবত আপনি দ্রুত ফলাফল পেতে পারবেন। আসলে, জিএনইউ সিপি এই কারণে 64k এর একটি ডিফল্ট ব্লক আকার ব্যবহার করে।

tl; dr: ভাল cp /dev/dvd foobar.iso কাজ করা উচিত। এর জন্য ডিফল্ট ব্লকের আকার dd512 most


2

ব্লকসাইজ অপশনটি ddকার্যকরভাবে নির্ধারণ করে যে ইনপুট I / O সাব-সিস্টেমটি আউটপুট I / O উপ-সিস্টেমে ফিরে লেখার চেষ্টা করার আগে মেমরিতে কতটা ডেটা অনুলিপি হবে। আউটপুট একই (পুরো ডিস্কটি অনুলিপি করা হচ্ছে), অংশগুলি আপনার নির্দিষ্ট আকারে সবেমাত্র পড়ছে (বেশিরভাগ ddবাস্তবায়ন 512 বাইটের একটি ডিফল্ট ব্লকসাইজ সহ যায়)।

আপনার যদি অতিরিক্ত পরিমাণে মেমরি থাকে এবং ব্লকসাইজ বাড়িয়ে তোলে, তবে আরও বৃহত্তর অংশগুলি উত্তরাধিকার সূত্রে পড়া যায়, বাফার করে আউটপুট গন্তব্যে নিয়ে যায়। একটি নিম্ন ব্লকের আকারের প্রতিটি স্বতন্ত্র lseek, মেমসেট ইত্যাদির ক্ষেত্রে আরও ওভারহেড প্রয়োজন

আপনার মাইলেজটি আপনার কোথায় if=এবং of=সেট করা আছে এবং আপনার যদি কম স্মৃতি থাকে এবং তারপরে কোন হার্ডওয়্যারটি আপনি যাচ্ছেন তার উপর নির্ভর করে ভিন্ন হতে পারে ।


1

BS = ব্লক সাইজ পড়তে বা লিখতে প্রতিনিধিত্ব করে। ক্ষেত্রটি অক্ষত রেখে দেওয়া বা নির্দিষ্ট না করা এটি অনুলিপি করার একই কাজটি করতে পারে বলে মনে হচ্ছে তবে এটি ব্যবহারের মধ্যে গোপনীয় তথ্য রয়েছে। উদাহরণ স্বরূপ,

  • 1000000000000000000 ফাইলের সাথে প্রতি 1 1 10 কেবি প্রতিটি রয়েছে with
  • 10 জিবি এর জন্য একটি একক ফাইল রয়েছে Having

প্রথম ক্ষেত্রে লোয়ার ব্লকের আকার ব্যবহার করে অনুলিপি করার গতি বাড়িয়ে দেখা গেছে। পরবর্তী অবস্থাতেই, উচ্চতর ব্লকের আকারটি একটি ভাল বিকল্প ছিল কারণ এটি সেক্টরের আকার বৃদ্ধি করে কম sector changeকমান্ড রেখে যায় , যার ফলস্বরূপ দ্রুত I / O ক্রিয়াকলাপ হয়।

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