পার্টিশন ডিভাইসের নাম থেকে ব্লক ডিভাইসের নাম কীভাবে পাবেন?


14

/dev/sdaপার্টিশন ডিভাইসের নাম (উদাঃ /dev/sda1) প্রদত্ত প্যারেন্ট ব্লক ডিভাইসের নাম (যেমন ) পাওয়ার জন্য আমি একটি পোর্টেবল উপায় সন্ধান করছি । আমি জানি আমি কেবলমাত্র শেষ চরিত্রটি ফেলে দিতে পারি, তবে এটি কিছু ক্ষেত্রে কার্যকর হবে না:

  • এমএমসি কার্ড পাঠকদের সাধারণত নামগুলির মতো থাকে /dev/mmcblk0, তবে তাদের পার্টিশনের মতো নাম থাকে /dev/mmcblk0p1(অতিরিক্ত খেয়াল করুন p)।
  • alচ্ছিক: কিছু ব্লক ডিভাইসের কোনও পার্টিশন টেবিল নেই এবং এগুলি একক পার্টিশন হিসাবে ফর্ম্যাট করা আছে। এই ক্ষেত্রে, পার্টিশন ডিভাইস এবং প্যারেন্ট ব্লক ডিভাইসগুলি একই।

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


কীভাবে বহনযোগ্য? আমার ল্যাপটপে এর মূল বিভাজন রয়েছে /dev/sd0aকিন্তু কোনও /dev/sd0ডিভাইস নেই (একটি আছে /dev/sd0c...)
ট্রিগার করুন

@ ডন_ক্রিস্টি, /dev/sda1এবং /dev/mmcblk0p1যাইহোক লিনাক্স-নির্দিষ্ট। lsblkতুলনামূলকভাবে সাম্প্রতিক যদিও।
স্টাফেন চেজেলাস

lsblkকেবল নাম ব্যবহার না করে সঠিক নম্বরটি খুঁজতে ডিভাইস নোড নম্বরগুলিও ব্যবহার করে। লিনাক্স এবং ইউজ-লিনাক্সের সহজ সমাধান সম্ভবত সর্বদা যে কোনও উপায়ে পাওয়া যাবে বলে মনে হয়।
ইল্কাচ্চু

1
@ ডন_ক্রিসটি lsblk -dpno pkname $devnameআমার সমস্ত পরীক্ষায় পাস করেছে! সম্ভবত আপনার একটি উত্তর যুক্ত করা উচিত।
দিমিত্রি গ্রিগরিয়েভ

@ থ্রিগ্র ওয়েল হ্যাঁ, আমি অবশ্যই স্ক্রিপ্টটি /dev/sd0cসেই ক্ষেত্রে ফিরে আসার প্রত্যাশা করব । নীচের উত্তরগুলি আপনার পক্ষে কাজ করে?
দিমিত্রি গ্রিগরিয়েভ

উত্তর:


16

আপনি যদি লিনাক্সে থাকেন তবে আপনি ব্যবহার করতে পারেন lsblk(যা এর অংশ util-linux):

lsblk -no pkname /dev/sda1

2
আমার lsblk( util-linux: 2.20.1, উবুন্টু 14.04) pknameঠিক কলামটি নেই kname
হিমাইল

3
@ হেইমাইল - এটি মাত্র চার বছর আগে যুক্ত করা হয়েছিল তাই পুরানো প্রকাশগুলি ব্যবহার করে এমন ডিস্ট্রোগুলিতে পাওয়া যায় না ...
ডোন_ক্রিসটি

$ lsblk -no pkname /dev/nvme0n1p3আমার সিস্টেমে 7 টি লাইন প্রদান করে। হ্যাঁ, এই পার্টিশনটি এনক্রিপ্ট করা হয়েছে এবং এতে LVM রয়েছে, এটি তুচ্ছ পরিস্থিতি নয়। আমি জানি না আপনি কীভাবে নির্ভরযোগ্যভাবে কোনও স্ক্রিপ্ট থেকে সঠিক লাইনটি তুলবেন।
এলবৌলেঞ্জেরো

16

যদি কোনও ডিভাইস অন্য ডিভাইসের বিভাজন হয় তবে /sys/class/block/$devএকটি ফাইল থাকবে partition(যার সামগ্রীটি পার্টিশন নম্বর) is

যদি এটি হয় তবে আপনি পিতা-মাতার ডিভাইসের সাথে নামটি পেতে পারেন:

basename "$(readlink -f "/sys/class/block/$dev/..")"

বা সাথে zsh:

echo /sys/class/block/$dev(:A:h:t)

উদাহরণ:

$ dev=sda1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
sda
$ dev=nbd0p1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
nbd0

এলভিএম ভলিউম সম্পূর্ণ পৃথক, বিশেষ পার্থক্য ব্যতীত এগুলি পার্টিশন নয় যেখানে তারা linearকোনও শারীরিক পিভির সংলগ্ন ম্যাপিং।

আপনি যদি এইরকম পরিস্থিতিতে থাকেন তবে আপনি পিভিটির নামটি এতে পেতে পারেন:

ls "/sys/class/block/$dev/slaves"

কোথায় $devএমন কিছু dm-2(যা থেকে আপনি পেতে পারেন "$(basename "$(readlink -f /dev/VG/LV)")")।


আমি ডন_ক্রিসটির উত্তরটি গ্রহণ করেছি কারণ আমার কাছে এমনটি ঘটে lsblkএবং বাক্য গঠনটি সংক্ষিপ্ত, তবে আমি স্বীকার করি যে আপনার উত্তরটি আরও জেনেরিক এবং বহনযোগ্য। ধন্যবাদ!
দিমিত্রি গ্রিগরিয়েভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.