/ ডি / এসডিএক্স কোনও সংযুক্ত ইউএসবি বা এইচডিডি কিনা তা কীভাবে জানবেন?


23

স্থানীয় এইচডিডি বা ইউএসবি কী আছে কীভাবে আমি জানতে পারি ? আমি মূল সুযোগ ছাড়াই এটি করার কোনও উপায় পছন্দ করব of/dev/sdX

ঠিক আছে, udevadmঅনেক সাহায্য করেছে:

স্থানীয় এইচডিডি এর জন্য:

udevadm info --query=all --name=sdb | grep ID_BUS
E: ID_BUS=ata

ইউএসবি কী এর জন্য:

udevadm info --query=all --name=sdc | grep ID_BUS
E: ID_BUS=usb

উত্তর:


15

মূল সুবিধা ছাড়াই বলার কয়েকটি উপায় রয়েছে যার মধ্যে অনেকগুলি কৌশল / হ্যাকি:

ব্যবহার /dev/disk/by-id:

find /dev/disk/by-id/ -lname '*sdX'

এটি যদি এর মতো কিছু দিয়ে প্রতিক্রিয়া জানায় /dev/disk/by-id/usb-blah-blah-blahতবে এটি একটি ইউএসবি ডিস্ক। অন্যান্য উপসর্গ অন্তর্ভুক্ত ata, dm, memstick,scsi , ইত্যাদি

ব্যবহার /dev/disk/by-pathউল্লেখযোগ্যভাবে পৃথক নয়:

find /dev/disk/by-path/ -lname '*sdX'

আপনি কিছু পাবেন /dev/disk/by-path/pci-0000:00:1d.7-usb-0:1:1.0-scsi-0:0:0:0। এটি ডিস্কের দিকে পরিচালিত ডিভাইসের পথ দেখায়। এই ক্ষেত্রে, মোটামুটি পাথ হ'ল পিসিআই → ইউএসবি → ডিস্ক। (নোট-usb- )

উদেব ব্যবহার করে (আমি দেবিয়ান চালাই My আমার udevadmমধ্যে /sbinযা আমার নেই $PATH- আপনার অন্যত্র হতে পারে, আপনার বা বন্ধ থাকতে পারে $PATH):

/sbin/udevadm info --query=all --name=sdX | grep ID_BUS

আপনি ডিভাইসটি চালু থাকা বাসের ধরণটি পাবেন। অপসারণ| grep ID_BUSতথ্য সম্পূর্ণ তালিকা জন্য (আপনি যোগ করার প্রয়োজন হতে পারে |less)।

আপনি যদি lshwইনস্টল করে থাকেন তবে হিউজেনসের উত্তরটিও কাজ করতে পারে:

lshw -class disk -class storage | less

এবং আপনার ডিস্কের জন্য আউটপুটটি দেখুন। ইন less, /এসডিএক্স চেষ্টা করে দেখুন এবং পূর্ববর্তী, bus infoরেখাগুলি দেখুন - প্রথমটি কেবল বলবে scsi@…, তবে এর আগে কয়েকটি লাইন আরও আলোকিত হবে। যাইহোক, আপনার সত্যই এটি সুপারভাইজার হিসাবে চালানো উচিত যাতে এটি উপযুক্ত নাও হতে পারে। (লক্ষণগুলি: ল্যাপটপে আমি চেষ্টা করেছিলাম, এটি সটা ডিস্ক তালিকাভুক্ত করেছে তবে ইউএসবি নয় - sudoতালিকাভুক্ত উভয় দিয়ে চলছে )

অন্যগুলিও রয়েছে, এইগুলির চেয়ে কম-বেশি সরাসরি।


কোনও অভ্যন্তরীণ Sata ড্রাইভ বনাম কোনও বাহ্যিক Sata ড্রাইভের সাথে সংযুক্ত থাকার কথা বলার উপায় আছে esatap?
সিএমসিডিগ্রাগনকাই

10

আমি একটি সমাধান জানি, কিন্তু দুঃখের সাথে এর জন্য মূল অধিকার প্রয়োজন। যাইহোক, আপনি এখনও এটি দরকারী মনে হতে পারে:

sudo lshw -class disk -class storage

প্রতিটি ডিভাইসের জন্য এটি যৌক্তিক নাম (যেমন, /dev/sda) এবং বাসের তথ্য মুদ্রণ করবে , যা কোনও ইউএসবি ডিভাইসের ক্ষেত্রে 'ইউএসবি @ 1: 2' এর মতো কিছু হতে পারে।

নমুনা আউটপুট:

[...]
  *-storage
       description: SATA controller
       physical id: d
       bus info: pci@0000:00:0d.0
       configuration: driver=ahci latency=64
[...]
     *-disk:0
          description: ATA Disk
          physical id: 0
          bus info: scsi@2:0.0.0
          logical name: /dev/sda
[...]
  *-scsi
       physical id: 3
       bus info: usb@1:2
       configuration: driver=usb-storage
     *-disk
          description: SCSI Disk
          physical id: 0.0.0
          bus info: scsi@6:0.0.0
          logical name: /dev/sdc
[...]

8

আপনি ব্যবহার করতে পারেন lsblk:

lsblk -do নাম, tran
NAME TRAN
sda  sata
sdb  sata
sdd  usb

যেখানে -dবা --nodepsমানে দাসগুলি মুদ্রণ করবেন না এবং -o name,tranবা তার --output name,tranঅর্থ কেবলমাত্র ডিভাইস এবং ডিভাইস পরিবহন প্রকারের তালিকান। rmকোন ডিভাইসগুলি অপসারণযোগ্য ( 1যদি true) তা দেখার জন্য আউটপুট কলামগুলির তালিকায় যুক্ত করুন :

lsblk --nodeps - আউটপুট নাম, ট্রান, আরএম
NAME TRAN   RM
sda  sata    0
sdb  sata    0
sdd  usb     1

আমি উত্তরের জন্য এটি সন্ধান
করছিলাম

4

এর জন্য মূল সুবিধার দরকার নেই (তবে এই কমান্ডগুলির মধ্যে অনেকগুলি ব্যাশিজম ব্যবহার করে এবং নির্ভর করে, সুতরাং তারা সমস্ত পসিক্স-কমপ্লায়েন্ট শেলগুলিতে কাজ করবে না):

একটি সম্পর্কে জিজ্ঞাসা করার জন্য দ্রুত উপায় রয়েছে :sdX

grep -H . /sys/block/sda/{capability,uevent,removable,device/{model,type,vendor,uevent}}
/sys/block/sda/capability:52
/sys/block/sda/uevent:MAJOR=8
/sys/block/sda/uevent:MINOR=0
/sys/block/sda/uevent:DEVNAME=sda
/sys/block/sda/uevent:DEVTYPE=disk
/sys/block/sda/removable:0
/sys/block/sda/device/model:WDC WD360GD-00FN
/sys/block/sda/device/type:0
/sys/block/sda/device/vendor:ATA     
/sys/block/sda/device/uevent:DEVTYPE=scsi_device
/sys/block/sda/device/uevent:DRIVER=sd
/sys/block/sda/device/uevent:MODALIAS=scsi:t-0x00

সত্যিই আকর্ষণীয় ফাইল capability। আমার ডেবিয়ানে, আমার কাছে একটি genhd.hফাইল রয়েছে, তাই:

eval $(sed -ne '
   s/#define.*GENHD_FL_\([A-Z0-9_]*\)[ \t]*\([0-9]*\) \?.*$/GENHD_FLAGS[\2]="\1"/p
  ' /usr/src/linux-headers-2.6.32-5-common-openvz/include/linux/genhd.h)
diskCapa=$(</sys/block/sda/capability)
for i in ${!GENHD_FLAGS[@]};do
    (( diskCapa & i )) && echo ${GENHD_FLAGS[i]}
  done
MEDIA_CHANGE_NOTIFY
UP
SUPPRESS_PARTITION_INFO

diskCapa=$(</sys/block/sdd/capability)
    for i in ${!GENHD_FLAGS[@]};do
    (( diskCapa & i )) && echo ${GENHD_FLAGS[i]}
  done
REMOVABLE
MEDIA_CHANGE_NOTIFY
UP
SUPPRESS_PARTITION_INFO

removableমোটেও, পতাকা নির্ধারণ করা হয়েছে কিনা তা কেবল জানতে :

grep REMOVABL /usr/src/linux-headers-3.2.0-4-common/include/linux/genhd.h 
#define GENHD_FL_REMOVABLE                      1

সুতরাং

for disk in sd{a,b,c,d,e,f,g,h} ; do
 (( $(< /sys/block/$disk/capability ) & 1 ))  &&  echo $disk is removable
done

পরীক্ষা করিয়া করে কাজ করে capabilityমান (যা আমার মধ্যে 52 sdaউদাহরণস্বরূপ, উপরোক্ত) আছে 1বিট সেট (অর্থাত, তা একটি বিজোড় সংখ্যা) হয়।

তবে লিনাক্স সমস্ত পতাকা রেন্ডার করে /sys, তাই চাইতে /sys/block/sdX/removableঅনেক সহজ! ;-)

সুতরাং একটি USB কী হতে পারে removable, কিন্তু সেখানে প্রচুর আছে অপসারণযোগ্য ডিভাইস, আমি তা নিশ্চিত করার জন্য পছন্দ করেন আকার মাঝারি 0 চেয়ে বেশী (কোনো আনলোড সিডি-রম ট্রে মত, নমুনা জন্য) এবং যে ডিভাইস হয় না এ ব্যবহার: যে দেখার মধ্যেsdX/trace/enable আবদ্ধ হয় না:

নোটা: এগুলি সমস্ত ভাল v4.2 + এ পরীক্ষিত।

অধীনে , আপনি এই খুব দ্রুত এবং দক্ষ উপায় ব্যবহার করতে পারেন:

for disk in /sys/block/* ; do
    [ -f "$disk/removable" ]    && [ $(<"$disk/removable") -gt 0 ]   &&
    [ -f "$disk/size" ]         && [ $(<"$disk/size") -gt 0 ]        &&
    [ -f "$disk/trace/enable" ] && [ -z "$(<"$disk/trace/enable")" ] &&
    echo "${disk##*/} $(($(<"$disk/size")/1953125))G $(<"$disk/device/model")"
  done

আমার সিস্টেমে 4 টি ইউএসবি কী রয়েছে তবে এর মধ্যে একটি ( sde) ইতিমধ্যে মাউন্ট করা হয়েছে, সুতরাং পূর্ববর্তী কমান্ড আউটপুট:

sdd 8G Trans-It Drive
sdf 7G Storage Media
sdg 4G silicon-power

আমার লিপি:

আপলোডড ডেবিয়ান লাইভ ইনস্টল করতে আমি লিখেছিলাম একটি ছোট ফাংশন।

#!/bin/bash

txtsize() {
    local _c=$1 _i=0 _a=(b K M G T P)
    while [ ${#_c} -gt 3 ] ; do
        ((_i++))
        _c=$((_c>>10))
      done
    _c=000$(( ( $1*1000 ) >> ( 10*_i ) ))
    ((_i+=${3:-0}))
    printf -v ${2:-REPLY} "%.2f%s" ${_c:0:${#_c}-3}.${_c:${#_c}-3} ${_a[_i]}
}

# প্রথম অংশটি কেবল মানব পাঠযোগ্য আকারকে উপস্থাপন করে। ফাংশন শুরু হয় সেখানে।

chooseFreeUsbKey() {
    local _lUdisk _lUsize _lUdialog=dialog # whiptail # gdialog
    local -A _lUdevices
    unset ${1:-REPLY}
    for _lUdisk in /sys/block/*; do
        [ -f $_lUdisk/removable ] && [ $(<$_lUdisk/removable) -gt 0 ] &&
        [ -f $_lUdisk/size ] && [ $(<$_lUdisk/size) -gt 0 ] &&
        txtsize $(<$_lUdisk/size)*512 _lUsize &&
        [ -f $_lUdisk/trace/enable ] && [ -z "$(<$_lUdisk/trace/enable)" ] &&
        _lUdevices[${_lUdisk##*/}]="$_lUsize $(<$_lUdisk/device/model)"
    done
    case ${#_lUdevices[@]} in
        0 ) ;; # echo Sorry no key found. ;;
        1 ) IFS read -a ${1:-REPLY} \
            <<< "${!_lUdevices[@]}§${_lUdevices[@]%% *}§${_lUdevices[@]#* }";;
        * ) declare -a menu
           for _lUdisk in ${!_lUdevices[@]}; do
               menu+=($_lUdisk "${_lUdevices[$_lUdisk]}")
           done
           _lUdisk=$($_lUdialog --menu "Choose a USB stick" \
               $((LINES-3)) $((COLUMNS-3)) $((LINES-8)) \
               "${menu[@]}" 2>&1 >/dev/tty)
           IFS read -a ${1:-REPLY} \
           <<< "$_lUdisk§${_lUdevices[$_lUdisk]%% *}§${_lUdevices[$_lUdisk]#* }"
    esac
}

এটি প্রথম আর্গুমেন্ট হিসাবে দেওয়া বা ভেরিয়েবলকে একটি অ্যারে হিসাবে উত্তরটি বরাদ্দ করে $REPLY:

chooseFreeUsbKey stick

echo "$stick"
sdf

echo "${stick[1]}"
7.26G

echo "${stick[2]}"
Storage Media

(শেষ ক্ষেত্রটিতে ফাঁকা জায়গা থাকতে পারে))


আমার উত্তরের প্রথম অংশটি আরও পঠনযোগ্য করার জন্য @ স্টেফেনচাজেলাসকে ধন্যবাদ জানাই।
এফ। হাউরি

1
(1) আপনার কোঁকড়ানো ধনুর্বন্ধনী কেন আছে? মানে …,device/{model,type,vendor,uevent}? (২) আপনি দয়া করে আপনার GENHD কমান্ড এবং আপনার "ট্রেস / সক্ষম" আদেশগুলি ব্যাখ্যা করতে পারেন? (3) আপনার [ $(( $(< $file ) & 1 )) -ne 0 ]পরীক্ষা সহজ করা যেতে পারে (সংক্ষিপ্ত) থেকে (( $(< $file ) & 1 ))
জি-ম্যান

@ জি-ম্যান (1) হ্যাঁ, এটির জন্য +1! এই টিপোটি কীভাবে চালু হয়েছিল তা আমি বুঝতে পারি না। (২) জেনেরিক হার্ড ডিস্ক হেডার ফাইলটি অবশ্যই উপস্থিত থাকতে হবে /usr/src/*/include/linux। ব্যবহার করে দেখুন sed -ne 's/#define.*GENHD_FL_\([A-Z0-9_]*\)[ \t]*\([0-9]*\) \?.*$/GENHD_FLAGS[\2]="\1"/p;' /usr/src/*/include/linux/genhd.h। (৩) হ্যাঁ
এফ। হাউরি

0

আমি কেবল ব্যবহার hdparmবা lshw(যা আপনার ইনস্টল করার প্রয়োজন হতে পারে), এবং sudoএটির মূল হিসাবে চালিত করার জন্য পরামর্শ দিচ্ছি ।

sudo hdparm -I /dev/sda
sudo lshw -short -C disk
sudo lshw -class disk -class storage

সব আপনার তথ্য দেওয়া উচিত।


ভার্চুয়াল ডিস্কে এইচডিপারম:hdparm -i /dev/sda /dev/sda: HDIO_DRIVE_CMD(identify) failed: Invalid exchange HDIO_GET_IDENTITY failed: Invalid argument
টিম

আচ্ছা বলেন তো উচিত এবং এটি ভার্চুয়াল ডিস্ক এখানে কাজ করে।
এইটবিটটনি

0

শুধু মান পড়ুন /sys/block/sdX/removable

উদাহরণ স্বরূপ:

$ cat /sys/block/sda/removable
0
$ cat /sys/block/sdc/removable
1

/dev/sdc একটি ইউএসবি কী (এটি কোনও এসডি কার্ড বা অন্য কোনও অপসারণযোগ্য মিডিয়া হতে পারে)।


এটি এফ। হাউরির উত্তরে তথ্যটিকে নকল করে এবং কোনও নতুন সামগ্রী যুক্ত করে না। আপনি কোনও বিদ্যমান উত্তরের মধ্যে খুঁজে পাওয়া যায় না এমন নতুন দিক যুক্ত করতে না পারলে কোনও উত্তর পোস্ট করবেন না।
জি-ম্যান

0

dmesg সবচেয়ে সহজ পদ্ধতি:

dmesg | গ্রেপ এসডি এক্স

( আপনার ডিভাইসের নাম হওয়া, যেমন, )sdXsda

উপরের কমান্ড থেকে, আপনি নিম্নলিখিত দেখতে পাবেন:

  • সংযুক্ত এসসিএসআই ডিস্ক (হার্ড ডিস্ক)
  • সংযুক্ত এসসিএসআই অপসারণযোগ্য ডিস্ক (অপসারণযোগ্য মিডিয়া; যেমন, ইউএসবি ফ্ল্যাশ ড্রাইভ)

dmesgকার্নেলের বিজ্ঞপ্তি বার্তা বাফার পড়ে তাই এই সমাধানটি কেবল পুনরায় চালু হওয়ার পরে তুলনামূলকভাবে সম্প্রতি কাজ করবে
রোয়াইমা

0

আপনি এসডি, ইউএসবি এবং সাটা ডিভাইস নোডগুলি পেতে নীচের কমান্ডগুলি ব্যবহার করতে পারেন।

usb_device="/dev/`ls -lR /dev/disk/by-id/  | grep ^l | grep 'usb' | awk '{print $NF}' | cut -d '/' -f 3 | awk 'NR == 1'`"

sata_device="/dev/`ls -lR /dev/disk/by-id/ | grep ^l | grep 'ata' | awk '{print $NF}' | cut -d '/' -f 3 | awk 'NR == 1'`"

sd_device="/dev/`ls -lR /dev/disk/by-id/   | grep ^l | grep 'mmc' | awk '{print $NF}' | cut -d '/' -f 3 | awk 'NR == 1'`"

1
(1) এটি এই প্রশ্নের উত্তরটি কীভাবে আমার কাছে স্পষ্ট নয়, যা হ'ল "কোনও বিশেষের জন্য /dev/sdX, আমি কীভাবে জানতে পারি যে এটি স্থানীয় এইচডিডি বা ইউএসবি কী?" দয়া করে ব্যাখ্যা করুন যে ওপি কীভাবে আপনার আদেশগুলি ব্যবহার করতে পারে সংকল্প। (২) আমরা এমন উত্তরগুলিকে পছন্দ করি যা আদেশ দেয় এবং কেবলমাত্র আদেশগুলি সরবরাহ করে এমন উত্তরে তাদের ব্যাখ্যা করে । আপনি কি করছেন দয়া করে ব্যাখ্যা করুন। মন্তব্যে প্রতিক্রিয়া জানাতে দয়া করে; আপনার উত্তরটি আরও পরিষ্কার এবং আরও পরিপূর্ণ করতে সম্পাদনা করুন। … (চালিয়ে যাওয়া)
জি-ম্যান

(চালিয়ে যাওয়া) ... (3)  awkএকটি খুব শক্তিশালী সরঞ্জাম। অনেক শিক্ষানবিস এমন উত্তর পোস্ট করে যা একটি করে grepএবং এর আউটপুটটি পাইপ করে awk। এটি খুব কমই প্রয়োজনীয়; awkপ্যাটার্ন ম্যাচিং করতে পারে এবং কোনও সহায়তা ছাড়াই পছন্দসই ইনপুট নির্বাচন করতে পারে grep। আপনার কাছে দুটি grepকমান্ডের পাইপলাইন রয়েছে , এতে পাইপ দেওয়া হয় awkএবং তারপরে একটি দ্বিতীয় awk কমান্ড। এটি ব্যাপকভাবে সরল করা যেতে পারে; চেষ্টা করুন. (4) এছাড়াও, স্বচ্ছতার জন্য, আপনি পরিবর্তন করতে চাইতে পারেন `…`করতে $(…)- দেখুন এই , এই , এবং এই
জি-ম্যান

0

আমি অলস, ইনসি আমাকে সহজেই এটি বলে:

inxi -D
Drives:    HDD Total Size: 1220.3GB (33.2% used)
           ID-1: /dev/sda model: ST380817AS size: 80.0GB
           ID-2: /dev/sdb model: WDC_WD1003FZEX size: 1000.2GB
           ID-3: USB /dev/sdc model: USB_Flash_Drive size: 140.0GB

আমি বিশ্বাস করি এটি আমাকে ফায়ারওয়্যার এবং অন্য কোনও ধরণের হতে পারে তাও বলেছে তবে আমার ডাবল চেক করতে হবে, কিছুক্ষণের মধ্যে এই ধরণের ব্যবহার করা হয়নি।

এটি পার্শ্ববর্তী দূরবর্তী যেমন সাম্বা বা এনএফএস মাউন্টগুলি ব্যবহার করে -p ব্যবহার করে আমাকেও বলে।


-1

আপনি ইউএসবি ডিভাইস প্লাগ ইন করার পরে, চালান dmesg একটি কনসোল উইন্ডোতে । আপনাকে কিছু ইঙ্গিত সরবরাহ করা হবে।

উদাহরণস্বরূপ এটি "ডিভাইস প্লাগ ইন, ভর স্টোরেজ / ডিভ / এসডিডি" এর পংক্তিতে কিছু বলবে।


2
আপনার উত্তরটি দরকারী করতে দয়া করে আরও তথ্য / স্পষ্টকরণ সরবরাহ করুন।
জর্জ এম

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