উদেব আসলে কোন সমস্যাগুলি সমাধান করে?


28

এই বিষয়টির জন্য, একগুচ্ছ স্থির ফাইলগুলির মধ্যে ভুল কী ছিল /dev? বিকাশকারীরা এখন আমার গণনা অনুসারে এই চক্রটি পুনরায় নতুনভাবে পুনরুদ্ধার করতে যথেষ্ট স্পষ্টতই অসন্তুষ্টিজনক (এখন devfs-> udev + HAL-> udev), এবং এখন স্পষ্টত এটি গ্র্যান্ড ইউনিফাইড ইনিশ প্রোগ্রামেও চলেছে, তাই চারবার times

আমার মনে আছে যখন কয়েক বছর আগে আমি লিনাক্স ব্যবহার শুরু করেছি তখন অবাক হয়ে গিয়েছিলাম যে "সবকিছুই একটি ফাইল" দাবি করা সত্ত্বেও কিছুই নেই /dev/eth0(এটি পরে বোঝা গেল, যেহেতু এটি কোনও চর বা ব্লক ডিভাইস নয় - যদিও "প্যাকেট" ডিভাইসের ধরণ রয়েছে আকর্ষণীয় হবে ...)। এটি প্রদত্ত, কেন যে প্রোগ্রামটি চর এবং ব্লক ডিভাইস ফাইল ট্রি পরিচালনা করে তা নেটওয়ার্ক ডিভাইসের জন্যও দায়ী? আমি "নমনীয়তা" এর অস্পষ্ট রেফারেন্সগুলি দেখেছি, তবে এটি কী যুক্ত করে, বলুন, ifconfig (8) সন্ধান করে /proc/net/dev? আমি জানি, উদাহরণস্বরূপ, নেটওয়ার্ক udevম্যানেজারটি শীঘ্রই নেট বা ওপেনবিএসডি-তে থাকবে না কারণ এটি নির্ভর করে যা কোন দলই লিখতে চায় না; আমি কি করি না/devএটি ইতিমধ্যে কার্নেল দ্বারা একাধিক উপায়ে উন্মুক্ত করা হয়েছে (এবং এর মধ্যে কোনওটিই এতে নেই /dev!)।

এটি কি কেবল হটপ্লাগিংয়ের কারণে? কার্নেলের সাথে কী কেবল শারীরিক বাসগুলি শোনা এবং "ডিভাইস যুক্ত" বার্তাটিতে উপযুক্ত মডিউল লোড করা নিয়ে সমস্যা রয়েছে? অথবা, forbশ্বর বারণ করবেন না, প্রকৃত প্রশাসক তা করছেন? আমার মনে নেই 2000 এর শুরুর দিকে আমার সার্ভারগুলি তাদের নেটওয়ার্ক কার্ডগুলি কখনও কখনও অপ্রত্যাশিত ক্রমে শুরু করে দেয় এবং আমি মনে করি যে নামকরণটি ইউজারল্যান্ডে স্থির করা উচিত (যদিও এটি তত্ক্ষণিকভাবে ফিরিয়ে নেওয়া খুব কঠিন ছিল না), তবে এটিকে তেলাপোকার জন্য স্লেজহ্যামারের মতো মনে হয়। (অথবা হতে পারে যে সমস্যাগুলি ব্যবহারের ক্ষেত্রে আঘাত হানে আমি র‌্যাকমাউন্ট করা সার্ভার বা পিসি, যা আমার অভিজ্ঞতা, তার চেয়ে বেশি শক্ততার বিষয়ে ভাবছি না))

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


5
আপনার প্রশাসনের প্রশাসক পরিচালনা করার জন্য আপনার চিন্তার রেখাটি ভাল, তবে ল্যাপটপ, সাধারণ আধুনিক ডেস্কটপ বা মোবাইল ব্যবহারকারীদের প্রয়োজনগুলিকে সম্বোধন করে না। স্থিতিশীল ফাইলগুলি /dev(সহজে বা সুবিধাজনকভাবে) কোনও USB নেটওয়ার্ক অ্যাডাপ্টারে প্লাগ ইন করা ব্যক্তি বা ভার্চুয়াল নেটওয়ার্ক অ্যাডাপ্টারগুলি সিস্টেম চলাকালীন যুক্ত বা ডাউন করার মতো বিষয়গুলিকে সম্বোধন করে না। যদিও আপনাকে আনইনস্টল করা থেকে udevও সরল পুরানো স্ট্যাটিক /devডিরেক্টরি রুটে ফিরে যাওয়া থেকে কোনও কিছুই থামছে না ।
LawrenceC

প্রকৃতপক্ষে প্রতিযোগিতামূলক ডিএফএস বাস্তবায়ন ছিল। সুতরাং এটি
তিনটিরও

উত্তর:


33

আরও দুটি জিনিস: লিনাক্সের এন্টারপ্রাইজ এবং অন্যান্য বড় সার্ভারগুলিতে সরানো স্থিতিশীলতা /devভঙ্গ হওয়ার প্রকাশ করছিল । অগ্রণী প্রযুক্তি, উভয় গ্রাহক এবং উদ্যোগে, একটি রসিকতা হিসাবে স্থির / দেব প্রকাশ করছিল। [এই উত্তরটি ব্যাকস্টোরির বেশিরভাগ জায়গায় পূরণ করে, বিশেষত কেন দেবদেবদের পরিবর্তে ইউদেব প্রতিস্থাপন করা হয়নি]।

মেজর এবং মাইনর নম্বর স্পেসের ক্লান্তি

/devফাইলগুলি তাদের প্রধান এবং গৌণ সংখ্যা দ্বারা কার্নেলের অভ্যন্তরে চিহ্নিত করা হয়। কার্নেলটি আসলে কখনই নামটির বিষয়ে চিন্তা করে নি (এবং আপনি উদাহরণস্বরূপ করতে পারেন, mv /dev/sda /dev/disk-1এবং এটি কাজ চালিয়ে যেতে চাইবে - যদিও প্রোগ্রামগুলি এটি কোথায় খুঁজে পাবে তা অবশ্যই জানত না)।

একটি স্থিতিশীল সঙ্গে /dev, আপনার বিদ্যমান প্রতিটি সম্ভাব্য ডিভাইসের জন্য আপনাকে একটি বড় / গৌণ সংখ্যা বরাদ্দ করতে হবে। এই সংখ্যাগুলি বিশ্বব্যাপী অনন্য হতে হবে, কারণ এগুলি ডিস্ট্রোসের অংশ হিসাবে প্রেরণ করা হয়, চাহিদা অনুযায়ী তৈরি করা হয় না। সমস্যাটি হ'ল তারা প্রতিটি 8-বিট সংখ্যা — এর পরিসীমা 0-255।

মূলত, উদাহরণস্বরূপ, লিনাক্স 8,0 এসডিএ, 8,1 এসডিএ 1, 8,16 এসডিবি হওয়া ইত্যাদি দিয়ে শুরু হয়েছিল তবে লোকেরা মেশিনগুলিতে আরও বেশি সংখ্যক ডিস্ক যুক্ত করতে থাকে, বিশেষত যখন আপনি ফাইবার চ্যানেলের মতো বিষয়গুলি বিবেচনা করেন। সুতরাং এক পর্যায়ে, আরও ডিস্কের জন্য প্রধান সংখ্যা 65-71 যোগ করা হয়েছিল। পরে, বড় সংখ্যা 128-135 – এবং এখনও লোকেরা আরও ডিস্ক চায় ...

এবং জিপিটি-র মতো পার্টিশন টেবিল ফর্ম্যাটগুলি প্রায় প্রতি ডিস্কে আরও বেশি পার্টিশন সমর্থন করে came এবং অবশ্যই অন্যান্য ডিভাইসগুলি নম্বর স্পেসের মাধ্যমে খাচ্ছিল: বিভিন্ন RAID নিয়ামক, লজিক্যাল ভলিউম পরিচালনা ইত্যাদি etc.

শেষ ফলাফলটি লানা লিনাক্স ডিভাইস তালিকায় দেখা যাবে । যদি আপনি ২.6 তালিকার দিকে লক্ষ্য করেন (কেবলমাত্র এখনও সেখানে রয়েছেন), তবে প্রচুর পরিমাণে ব্লক মেজর সংখ্যা ২০০ (সর্বোচ্চ: 255) ব্যবহৃত হয়েছে — স্পষ্টতই, সংখ্যাগুলি শেষ হয়ে যেত।

বড় সংখ্যায় পরিবর্তন করা সহজ ছিল না। এটি কার্নেল এবিআই পরিবর্তন করে। ফাইল সিস্টেমের উপর নির্ভর করে এটি অন ডিস্কের বিন্যাস পরিবর্তন করে। তবে, অবশ্যই, সেই ডিভাইসগুলির বেশিরভাগই কোনও একটি সিস্টেমে ছিল না, এমনকি এসসিএসআই ডিস্কের বাইরে চলে আসা একটি (সম্ভবত উদাহরণস্বরূপ) প্রচুর ফ্রি জিনিস ছিল — এটির জন্য সম্ভবত আইবিএম এক্সটি হার্ড ডিস্কের প্রয়োজন হয়নি, উদাহরণ স্বরূপ.

ডায়নামিকের সাথে /dev, ডিস্ট্রোতে ডিভাইসের নম্বরগুলি পাঠানো হয় না। তাদের আর বিশ্বব্যাপী অনন্য হতে হবে না। এমনকি বুট জুড়ে তাদের অনন্য হতে হবে না।

ডিভাইসগুলির নাম অপ্রত্যাশিত ছিল

এটি প্রতিটি ক্ষেত্রে একটি সংখ্যা নির্ধারণ করা সত্যই সহজ ছিল easy একটি বোর্ডে দুটি আইডিই চ্যানেল ছিল; প্রতিটি আইডিই চ্যানেল একজন মাস্টার এবং একজন ক্রীতদাসকে সমর্থন করে। আপনি চ্যানেল ক্রমে এবং মাস্টার-পরে-ক্রীতদাস অর্ডারে বরাদ্দ করতে পারেন। সুতরাং hdaপ্রথম চ্যানেল হয়ে ওঠে, মাস্টার; hdbপ্রথম চ্যানেল, দাস; hdcদ্বিতীয় চ্যানেল, মাস্টার; এগুলি অনুমানযোগ্য এবং স্থিতিশীল ছিল। আপনি যদি নতুন ড্রাইভ যুক্ত করেন, বা একটি অপসারণ করেন তবে এগুলি পরিবর্তন হতে পারে তবে অনুপস্থিত হার্ডওয়্যার পরিবর্তনগুলি, তারা স্থির ছিল।

আপনি করা হতে পারে /dev/hda1আপনার /etc/fstabএবং আত্মবিশ্বাসী এটা পরিশ্রমী থাকার চাই অন্তত অনুপস্থিত হার্ডওয়্যার পরিবর্তন করা আবশ্যক।

আইডিই সেভাবে কাজ করেছিল। এর পরে কিছুই হয় না।

SATA সহজ বলে মনে হচ্ছে: একটি পোর্ট, একটি ডিস্ক। তবে তা নয়; এটি পোর্ট মাল্টিপ্লায়ারকে অনুমতি দেয়। এবং এটি হট-অদলবদলের অনুমতি দেয়। তবুও, অনুপস্থিত হার্ডওয়্যার পরিবর্তন, আপনি এখনও ম্যাপিংকে কাজ করে রাখতে পারেন।

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

নেটওয়ার্ক সংযুক্ত ডিস্কগুলির কোনও সহজাত পোর্ট অর্ডার নেই। কার্নেলটি কেবলমাত্র যে ক্রমটি ব্যবহার করেছিল তা হ'ল তাদের উপস্থিত হওয়া ক্রম log লজিক্যাল ভলিউমের সাথে একই।

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

সুতরাং কার্নেলটি কমবেশি, "তারা যেভাবেই আদেশ প্রদর্শন করবে" রেখেছিল। এর অর্থ হ'ল বহু ধরণের ডিভাইস প্রতিটি বুটকে ক্রম পরিবর্তন করতে পারে - যা একটি বুটে /dev/sdbছিল তা অন্য বুটে ছিল /dev/sdc। এটি স্ট্যাটিকের ধারণাটিকে /devএকটি রসিকতা করে তোলে ।

সারাংশ

/devঅপ্রত্যাশিত ডিভাইস তদন্ত আদেশের কারণে যখন আপনি স্থির ক্রমবর্ধমান অর্থহীন হয়ে যাওয়ার সংমিশ্রণটি গ্রহণ করেন এবং স্থির প্রধান / গৌণ সংখ্যাকে বরাদ্দ দেওয়া অব্যাহত রাখেন যার ফলে যথেষ্ট কাজ শেষ না হয়, তখন লিনাক্সের বিকাশকারীরা কেন ডায়নামিকের দিকে যেতে চান তা স্পষ্ট হয়ে যায় /dev


2
lsusb -vvআমার প্রিন্টারগুলি বুট থেকে বুটে কোথায় লুকিয়ে ছিল তা সন্ধান করার জন্য ইউএসবি প্রিন্টারগুলি সেটআপ করার ক্ষেত্রে একটি বড় ব্যথা হত। আমি ভালো বিট জন্য সন্ধান আছে চাই: "0217 বাস ২001 ডিভাইস 003:: আইডি 04f9"
SLM

24

ভাল প্রশ্ন.

একটি উপায়ে, এই যুক্তিটি ঘুরিয়ে দেওয়া যেতে পারে: যেহেতু কার্নেল ২. since.১৩ এর একটি নতুন সংস্করণ চালু করেছে uevent, তাই এটি ঘটতে বাধ্য ছিল devfsযা ইন্টারফেসের নতুন বৈশিষ্ট্যগুলির সুবিধা নিতে পুনরায় লিখতে হবে। সুতরাং, একটি উপায়ে, প্রশ্ন হওয়া উচিত কেন কার্নেলের পরিবর্তন।

যাইহোক, এটিকে সামান্য মূল্যে গ্রহণ করে, আপনার প্রশ্নের উত্তর এই উইকিপিডিয়াটির নিবন্ধে দেওয়া হয়েছে :

Traditionalতিহ্যবাহী ইউনিক্স সিস্টেমের বিপরীতে, যেখানে / dev ডিরেক্টরিতে থাকা ডিভাইস নোডগুলি ফাইলের একটি স্থির সেট হয়ে থাকে, লিনাক্স udev ডিভাইস ম্যানেজারটি গতিশীলভাবে কোনও সিস্টেমে উপস্থিত ডিভাইসগুলির জন্য কেবল নোড সরবরাহ করে। যদিও ডেভফগুলি অনুরূপ কার্যকারিতা সরবরাহ করত, গ্রেগ ক্রোয়া-হার্টম্যান ডিএফ-এর চেয়ে এটির প্রয়োগকে অগ্রাধিকার দেওয়ার জন্য বেশ কয়েকটি কারণ উল্লেখ করেছেন:

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

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

আমার সম্ভবত এটি যুক্ত হওয়া উচিত যে ওদেবের সাথে একটি সম্ভাবনা থাকে race conditionযা ডিফস এবং হটপ্লাগে ডিভাইসের নামকরণকে মূলত ক্ষুন্ন করে, এড়ানো যায়। অন্য কথায়: ডিভফদের সাথে আপনার বামতম ইথারনেট পোর্টটি কল করা eth0এবং তার ডানদিকের একটিকে নিশ্চিত করার কোনও উপায় ছিল না eth1, (একটি খাঁটি উদাহরণ হিসাবে) রাউটার স্থাপন (WAN তে একটি পোর্ট, ল্যান থেকে একটি পোর্ট) তৈরি করা কঠিন বাস্তবায়ন।

জিইউইডির ভিত্তিতে ডিস্কের নামকরণ প্রকল্পটি গ্রহণ করা অন্য একটি প্লাস এবং পুরো প্রক্রিয়াটিকে আরও বেশি বড় করে ব্যবহারকারী-স্পেসে নিয়ে যাওয়া: আপনি কত লোক নিজের উদেব নিয়ম লেখেন তা দেখার জন্য আপনি এই সাইটটি অনুসন্ধান করেছেন?

ইউজারস্পেসে ইউদেব থাকার অন্তর্নিহিত সুবিধাগুলির একটি সাধারণ উদাহরণ হিসাবে, এই প্রশ্নটি বা এই অন্য প্রশ্নটি উভয়ই এই সাইটেই দেখুন।

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