লিনাক্সে কোন ডিভাইস / দেব / মূল প্রতিনিধিত্ব করে তা সন্ধান করুন?


17

লিনাক্সে, একটি /dev/rootডিভাইস নোড রয়েছে। এটি অন্য ডিভাইস নোডের মতো একই ব্লক ডিভাইস হবে /dev/sdaX/dev/rootএই পরিস্থিতিতে আমি কীভাবে 'রিয়েল' ডিভাইস নোডের সমাধান করতে পারি , যাতে আমি কোনও ব্যবহারকারীর বোধগম্য ডিভাইসের নামটি দেখাতে পারি?

উদাহরণস্বরূপ, বিশ্লেষণ করার সময় আমি এই পরিস্থিতির মুখোমুখি হতে পারি /proc/mounts

আমি এমন সমাধান খুঁজছি যা শেল / পাইথন স্ক্রিপ্ট থেকে কাজ করবে তবে সি নয় not


আপনি এখানে চেক করেছেন? linux-diag.sourceforge.net/Sysfsutils.html এটি সমস্ত ধরণের সংযুক্ত ডিভাইসগুলি সম্পর্কে কার্নেলটি অনুসন্ধান করার উপায়ের পরামর্শ দেয়, নিশ্চিত নয়, এটি যদি আপনি খুঁজছেন তবে!

উত্তর:


14

root=থেকে প্যারামিটারটি পার্স করুন /proc/cmdline


বাহ, বজ্রপাতের প্রতিক্রিয়া :-)

1
প্রতীকী লিঙ্কটিকে ডিফেরেন্স করার চেয়ে অনেক বেশি নিরাপদ। +1 :)
টিম পোস্ট

1
এটি তিনটি ডিস্ট্রোতে কাজ করে (fc14, rhel5, উবুন্টু ১১.০৪) আমি যে সামান্য সতর্কতার সাথে দেখেছি যে রুট = ইউআইডি = টাইপ আর্গুমেন্টগুলি মোকাবেলা করার জন্য একটি অতিরিক্ত পদক্ষেপ প্রয়োজন।
কেডিটি

আমি কেন আগ্রহী যে এটি রিডলিংক সমাধানের চেয়ে কেন নিরাপদ, কেউ কি আরও বিস্তারিত বলতে পারে?
অপেলো

রিডলিঙ্ক সবসময় কাজ করে না, আমি এখনই এই সমস্যাটিতে কাজ করছি এবং এমন একজন ব্যবহারকারীকে পেয়েছি যার সিস্টেমে কোনও ফলাফল দেখায় না: রিডলিঙ্ক / ডেভ / রুট - আমি যে প্রোগ্রামটিতে কাজ করছি তাতে একটি ত্রুটি ছুঁড়েছে, যার কারণে আমি এসেছি এই থ্রেড। সঠিক পরীক্ষাটি প্রথমে করণীয়: রিডলিঙ্ক / ডিভ / রুট, তারপরে শূন্য হলে এটি / proc / সেমিডলাইনে সন্ধান করুন, তবে পার্সিং / প্রোক / সেমিডলাইন আরও ভাল সমাধানের মতো সহজ নয়, তাই আমি সন্ধান করতে থাকব।
Lizardx

12

যে সমস্ত সিস্টেমে আমি দেখেছি, /dev/rootসেগুলি হ'ল আসল ডিভাইসের জন্য একটি সিমিলিংক, সুতরাং readlink /dev/root(বা readlink -f /dev/rootআপনি যদি পুরো পথটি চান), এটি করবে।


বা কেবল ls -l /dev/root- টাইপ করতে সংক্ষিপ্ত :)
রোজিট্রিজেভিয়াচজ

@ জ্যাঙ্কস, তবে তারপরে আপনাকে আউটপুট পার্স করতে হবে ls(তিনি কোনও স্ক্রিপ্টে কিছু ব্যবহার করার জন্য বলেছিলেন)।
সিজেএম

আহ, দুঃখিত - এটিকে উপেক্ষা করেছেন।
রোজিট্রিজেভিয়াচজ

নাহ - আমার আরএইচইএল 5 মেশিনে এটি অবশ্যই একটি সিমিলিংক নয়, যদিও এটি কোনও এফসি 14 বা উবুন্টু 11.04 মেশিনে রয়েছে।
কেডিটি

1
আর্চলিনাক্সে কাজ করে না।
g33kz0r

7

ওয়েল /dev/rootহ'ল আসল ডিভাইসের একটি প্রতীকী লিঙ্ক, সুতরাং আপনি readlink(2)এটি কোনও প্রোগ্রাম থেকে কোথায় এটি নির্দেশ করেছেন তা জানতে বা readlink(1)শেল স্ক্রিপ্ট থেকে একই জিনিসটি ব্যবহার করতে পারেন ।


নং আর্চলিনাক্সে কাজ করে না
g33kz0r


উবুন্টু তালিকায় যুক্ত করুন।
Lizardx

3

এটি সম্ভবত আপডেট করা উচিত, কারণ এখানে প্রদত্ত প্রচুর তথ্য বিভ্রান্তিকর, এবং সম্ভবত কখনই পুরোপুরি সঠিক ছিল না।

https://bootlin.com/blog/find-root-device/

/ মাউন্ট পয়েন্টের জন্য, আপনাকে কেবলমাত্র বলা হয়েছে যে এটি / ডিভ / রুটের সাথে সম্পর্কিত, যা আপনি অনুসন্ধান করছেন এমন আসল ডিভাইস নয়।

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

$ বিড়াল / প্রকো / সিএমডিলাইন মেম = 512 এম কনসোল = ttyS2,115200n8 রুট = / দেব / মিমিসিবিএলক0 পি 2 আর ডাব্লু রুটওয়েট

তবে এর অর্থ এই নয় যে আপনি যা দেখছেন তা হ'ল বর্তমান মূল ডিভাইস। অনেকগুলি লিনাক্স সিস্টেম মধ্যবর্তী রুট ফাইল সিস্টেমগুলিতে বুট হয় (যেমন initramdisks এবং initramfs), যা কেবলমাত্র চূড়ান্তটি অ্যাক্সেস করতে ব্যবহৃত হয়।

একটি জিনিস যা এটি নির্দেশ করে তা হ'ল / proc / cmdline এ থাকা জিনিসটি আসল চূড়ান্ত ডিভাইস রুটটি আসলেই থাকে না।

এটি ব্যস্তবক্সের লোকদের, যারা ধরে নিয়েছি যে তারা যখন পরিস্থিতি বুট করার কথা আসে তখন তারা কী সম্পর্কে কথা বলে।

https://www.linuxquestions.org/questions/slackware-14/slackware-current-dev-root-688189/page2.html

আমি যে দ্বিতীয় দরকারী সংস্থান পেয়েছি তা হ'ল / দেব / মূল সম্পর্কিত প্রশ্ন সম্পর্কে একটি খুব পুরানো স্ল্যাকওয়ার থ্রেড, এই থ্রেডের বয়স থেকেই আমরা দেখতে পাচ্ছি যে সমস্ত রূপগুলি সর্বদা উপস্থিত ছিল, তবে আমি বিশ্বাস করি 'বেশিরভাগ' ডিস্ট্রোসগুলি প্রতীকী ব্যবহার করছিল লিঙ্ক পদ্ধতি, তবে এটি একটি সাধারণ কার্নেল সংকলন সুইচ ছিল, এটি পোস্টারগুলি সঠিকভাবে বুঝতে পারলে এটি তৈরি করতে পারে বা তৈরি করতে পারে না, অর্থাত এটি একপথে স্যুইচ করুন এবং রিডলিংক / দেব / মূলটি আসল ডিভাইসের নামটি রিপোর্ট করে, এটি স্যুইচ করে অন্যটি, এবং তা হয় না।

যেহেতু এই থ্রেডের মূল বিষয়টি কীভাবে / ডিভ / রুট থেকে মুক্তি পাওয়া যায়, তাই এগুলি আসলে কী তা তৈরি করে, এটি কী তৈরি করে ইত্যাদি, যার অর্থ, এটিকে পরিত্রাণ পেতে তাদের বুঝতে হবে।

Gnashly এটি ভাল ব্যাখ্যা:

/ dev / রুট একটি জেনেরিক ডিভাইস যা fstab এ ব্যবহার করা যেতে পারে। যে কেউ 'রুটফ' ব্যবহার করতে পারে। এটি করার ফলে কিছু সুবিধা পাওয়া যায় যা এটি আপনাকে কম নির্দিষ্ট করে তোলার অনুমতি দেয়। আমার অর্থ হ'ল, মূল বিভাজনটি যদি কোনও বাহ্যিক ড্রাইভে থাকে তবে এটি সর্বদা একই ডিভাইস হিসাবে প্রদর্শিত হবে না এবং সঠিকভাবে ডিভাইসের সাথে মেলে fstab পরিবর্তন করা প্রয়োজন হিসাবে এটি সাফল্যের সাথে মাউন্ট করতে পারে না। / Dev / root ব্যবহার করে এটি সর্বদা লিলো বা গ্রাব থেকে কার্নেল বুট প্যারামিটারে নির্দিষ্ট করা যেকোন ডিভাইসের সাথে মেলে।

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

/ dev / root হ'ল 'proc' বা / dev / tcp এর মতো ভার্চুয়াল ডিভাইস। ভার্চুয়াল ডিভাইস হিসাবে কার্নেলের মধ্যে ইতিমধ্যে এইগুলির জন্য / ডিভাইসে কোনও ডিভাইস নোড নেই।

এটি ব্যাখ্যা করে যে প্রতীকী লিঙ্কটি কেন অগত্যা উপস্থিত নেই। আমি অবাক হয়েছি আমি এই সমস্যাটি এখনকার আগে কখনও আঘাত করি নি, আমি এই প্রোগ্রামটি জানার প্রয়োজন এমন কিছু প্রোগ্রাম বজায় রেখেছি, তবে এর চেয়ে ভাল আর দেরি না করে।

আমি বিশ্বাস করি যে এখানে প্রদত্ত কয়েকটি সমাধান 'প্রায়শই' কাজ করবে এবং সম্ভবত আমি যা করব তা হ'ল, তবে এগুলি সমস্যার আসল সত্য সমাধান নয়, যা ব্যস্তবক্স লেখক উল্লেখ করেছেন, খুব কার্যকরভাবে প্রয়োগ করা আরও জটিল complicated শক্ত পদ্ধতি।

[আপডেট: some কিছু ব্যবহারকারীর পরীক্ষার ডেটা পাওয়ার পরে, আমি মাউন্ট পদ্ধতিটি নিয়ে যাচ্ছি, যা কিছু ক্ষেত্রে কমপক্ষে ঠিক আছে বলে মনে হচ্ছে। / Proc / cmdline কার্যকর ছিল না কারণ অনেকগুলি বৈকল্পিক রয়েছে। প্রথম উদাহরণে, আপনি পুরানো পদ্ধতিটি দেখুন। এটি কম এবং কম সাধারণ কারণ এটি ব্যবহার করতে দৃ it's়ভাবে নিরুৎসাহিত করা হয়েছে (মূল / দেব / এসডিএক্স [0-9] টাইপ সিনট্যাক্স) কারণ এই পাথগুলি পরিবর্তনশীলভাবে পরিবর্তন করতে পারে (ডিস্কের ক্রম, নতুন ডিস্ক ইত্যাদি সন্নিবেশ করানো এবং হঠাৎ / দেব / sda1 হয়ে যায় / dev / sdb1)।

root=/dev/sda1
root=UUID=5a25cf4a-9772-40cd-b527-62848d4bdfda
root=LABEL=random string
root=PARTUUID=a2079bfb-02

ভিএস খুব পরিষ্কার এবং পার্স করা সহজ:

mount
/dev/sda1 on / type ext4 (rw,noatime,data=ordered)

সেমিডলাইনের ক্ষেত্রে, আপনি দেখতে পাবেন, তত্ত্বের সঠিক 'উত্তর' হ'ল একমাত্র বৈকল্পিকটি হ'ল প্রথম, অবহিত একটি, যেহেতু আপনি / dev / sdxy এর মতো চলন্ত লক্ষ্যে রুটকে উল্লেখ করবেন না

পরের দু'জনের / ডি / ডিস্ক / বাই-ইউইড বা / ডেভ / ডিস্ক / বাই লেবেলে সেই স্ট্রিং থেকে প্রতীকী লিঙ্ক পাওয়ার আরও ক্রিয়া করা দরকার

শেষেরটিটির জন্য আমি বিশ্বাস করি যে that পার্টড আইডিটি কী নির্দেশ করছে তা খুঁজে পেতে পার্টড-এল ব্যবহার করে using

এটি কেবলমাত্র আমি জানি এবং দেখেছি যে বৈকল্পিকগুলি, জিপিটিআইডি এর মতো আরও অনেকগুলি থাকতে পারে।

সুতরাং আমি যে সমাধানটি ব্যবহার করছি তা হ'ল:

প্রথমে দেখুন / dev / মূলটি একটি প্রতীকী লিঙ্ক কিনা। যদি এটি হয় তবে তা / ডিভ / ডিস্ক / বাই-ইউইড বা বাই-লেবেলের কাছে যাচাই করুন, যদি হয় তবে আপনাকে শেষ আসল পথটি পেতে প্রসেসের দ্বিতীয় ধাপটি করতে হবে। আপনি যে সরঞ্জামটি ব্যবহার করেন তার উপর নির্ভর করে।

যদি আপনি কিছু না পেয়ে থাকেন তবে মাউন্টে যান এবং দেখুন এটি কেমন। সর্বশেষ ফ্যালব্যাক কেস হিসাবে, একটি আমি ব্যবহার করছি না কারণ এটির বিরুদ্ধে দেওয়া যুক্তিগুলি আসল পার্টিশন বা প্রশ্নে থাকা ডিভাইস না হওয়াও আমার প্রোগ্রামের সেই সমাধানটি প্রত্যাখ্যান করার পক্ষে আমার পক্ষে যথেষ্ট ভাল। মাউন্ট একটি সম্পূর্ণ দৃust় সমাধান নয়, এবং আমি নিশ্চিত যথেষ্ট পরিমাণে নমুনা দিয়েছি, এমন ঘটনা খুঁজে পাওয়া সহজ হবে যেখানে এটি মোটেও ঠিক নয়, তবে আমি বিশ্বাস করি যে এই দুটি ক্ষেত্রেই 'বেশিরভাগ' ব্যবহারকারীদের কভার রয়েছে, যা আমার প্রয়োজন কেবল।

সর্বোত্তম, সবচেয়ে পরিষ্কার এবং সবচেয়ে নির্ভরযোগ্য সমাধানটি কর্নেলের পক্ষে সর্বদা প্রতীকী লিঙ্ক তৈরি করা হত, যা কোনও কিছু বা কারও ক্ষতি করতে পারে না এবং এটিকে ভাল বলেছিল, তবে এটি বাস্তব জগতে কার্যকর হয়নি not ।

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


2

হতে পারে আমি কিছু মিস করছি, তবে কী সম্পর্কে:

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