어떤 sd*가 USB인지 어떻게 알 수 있나요? [복사]

어떤 sd*가 USB인지 어떻게 알 수 있나요? [복사]

중복 가능성:
/dev/sdX가 USB 또는 HDD에 연결되어 있는지 어떻게 알 수 있나요?

내 시스템의 출력 ls /dev/sd*은 -

sda  sda1  sda2  sda3  sda4  sda5  sda6  sda7  sdb  sdc  sdc1  sdc2

어떤 드라이브가 어떤 것인지 어떻게 결정해야 합니까?

답변1

Linux를 사용한다고 가정합니다.

노력하다:

sudo /lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/sdc

또는:

cat /sys/block/sdc/device/{vendor,model}

다음 명령을 사용하여 다른 파티션의 파일 시스템에서 정보(레이블 포함)를 가져올 수도 있습니다.

sudo blkid /dev/sdc1

pathid는 장치 유형을 결정하는 데 도움이 됩니다.

readlink -f /sys/class/block/sdc/device

또한보십시오:

find /dev/disk -ls | grep /sdc

제대로 작동하면 udev위의 다른 명령에 대한 모든 정보가 제공됩니다.

의 내용은 크기에 대한 정보를 제공합니다(@Max가 이미 언급한 친숙한 형식은 아니지만 /proc/partitions).lsblk

sudo blockdev --getsize64 /dev/sdc

해당 블록 장치의 크기를 바이트 단위로 제공합니다.

sudo smartctl -i /dev/sdc

(크로스 플랫폼) 브랜드, 모델, 크기, 일련 번호, 펌웨어 버전 등을 포함한 많은 정보도 제공합니다.

답변2

최종 확인세게 때리다견본

생성하고 설치하기 위한 작은 스크립트를 작성했습니다.라이브 USB 키, (이중 부팅 우분투 - 데비안):

첫 번째 부분 USBKEYS=...은 질문에 대한 답변입니다.

즉, 이는 다음과 같습니다.

목록이동할 수 있는장치, 구동sd그리고 소유0이 아닌크기.

노트이 스크립트는 dialogUbuntu에 기본적으로 설치되어 있지 않은 것 같습니다. 하지만 " zenity easybashbui" dialog로 대체할 수 있습니다 .gdialogwhiptailor even

#!/bin/bash

export USBKEYS=($(
    grep -Hv ^0$ /sys/block/*/removable |
    sed s/removable:.*$/device\\/uevent/ |
    xargs grep -H ^DRIVER=sd |
    sed s/device.uevent.*$/size/ |
    xargs grep -Hv ^0$ |
    cut -d / -f 4
))

export STICK
case ${#USBKEYS[@]} in
    0 ) echo No USB Stick found; exit 0 ;;
    1 ) STICK=$USBKEYS ;;
    * )
    STICK=$(
    bash -c "$(
        echo -n  dialog --menu \
            \"Choose wich USB stick have to be installed\" 22 76 17;
        for dev in ${USBKEYS[@]} ;do
            echo -n \ $dev \"$(
                sed -e s/\ *$//g </sys/block/$dev/device/model
                )\" ;
            done
        )" 2>&1 >/dev/tty
    )
    ;;
esac

[ "$STICK" ] || exit 0

echo $STICK...

예(방금 하드 드라이브 3개 외에 USB 스틱 3개를 연결했습니다):

대화상자 미리보기

dialog( gdialog24행)을 바꾸면 다음이 제공됩니다.

gdialog 미리보기

하지만 이 구문은 다른 구문과 함께 사용할 수 있습니다.대화실용성 등 whiptail...

중요한 부분

export USBKEYS=($(
    grep -Hv ^0$ /sys/block/*/removable |
    sed s/removable:.*$/device\\/uevent/ |
    xargs grep -H ^DRIVER=sd |
    sed s/device.uevent.*$/size/ |
    xargs grep -Hv ^0$ |
    cut -d / -f 4
))
for dev in ${USBKEYS[@]} ;do
    echo $dev \"$(
        sed -e s/\ *$//g </sys/block/$dev/device/model
        )\" ;
  done

sdd "Storage Media"
sde "Freecom Databar"
sdf "silicon-power"

상해

이것은 일부를 사용합니다바시즘:

export USBKEYS=($(                         # Declaration of *array* 'USBKEYS'
    grep -Hv ^0$ /sys/block/*/removable |  # search for *not 0* in `removable` flag of all devices
    sed s/removable:.*$/device\\/uevent/ | # replace `removable` by `device/uevent` on each line of previous answer
    xargs grep -H ^DRIVER=sd |             # search for devices drived by `SD`
    sed s/device.uevent.*$/size/ |         # replace `device/uevent` by 'size'
    xargs grep -Hv ^0$ |                   # search for devices having NOT 0 size
    cut -d / -f 4                          # return only 4th part `/` separated
))
for dev in ${USBKEYS[@]} ;do               # for each devices in USBKEY...
    echo $dev \"$(r                        # echo device name and content of model file
        sed -e s/\ *$//g </sys/block/$dev/device/model
        )\" ;
  done

책상에 USB 드라이브 3개를 삽입한 후:

grep -H . /sys/block/*/removable
/sys/block/loop0/removable:0
/sys/block/loop1/removable:0
...
/sys/block/sdc/removable:0
/sys/block/sdd/removable:1
/sys/block/sde/removable:1
/sys/block/sdf/removable:1
/sys/block/sr0/removable:1

sda(예, 제 책상에는 , , sdb의 3개의 물리적 하드 드라이브가 있습니다. sdc첫 번째 이동식 드라이브는 가 되었습니다 sdd. sde)

그래서:

grep -Hv ^0$ /sys/block/*/removable
/sys/block/sdd/removable:1
/sys/block/sde/removable:1
/sys/block/sdf/removable:1
/sys/block/sr0/removable:1

다음 목록이 있습니다.이동할 수 있는장비,

grep -Hv ^0$ /sys/block/*/removable |
    sed s/removable:.*$/device\\/uevent/
/sys/block/sdd/device/uevent
/sys/block/sde/device/uevent
/sys/block/sdf/device/uevent
/sys/block/sr0/device/uevent

 

grep -Hv ^0$ /sys/block/*/removable |
    sed s/removable:.*$/device\\/uevent/ |
    xargs grep -H ^DRIVER=sd
/sys/block/sdd/device/uevent:DRIVER=sd
/sys/block/sde/device/uevent:DRIVER=sd
/sys/block/sdf/device/uevent:DRIVER=sd

드라이버로 구동되는 이동식 장치 목록이 있습니다 sd(예: 또는 아님 sr) floppy.

grep -Hv ^0$ /sys/block/*/removable |
    sed s/removable:.*$/device\\/uevent/ |
    xargs grep -H ^DRIVER=sd |
    sed s/device.uevent.*$/size/
/sys/block/sdd/size
/sys/block/sde/size
/sys/block/sdf/size

 

grep -Hv ^0$ /sys/block/*/removable |
    sed s/removable:.*$/device\\/uevent/ |
    xargs grep -H ^DRIVER=sd |
    sed s/device.uevent.*$/size/ |
    xargs grep -Hv ^0$
/sys/block/sdd/size:15224832
/sys/block/sde/size:7834944
/sys/block/sdf/size:7831552

 

grep -Hv ^0$ /sys/block/*/removable |
    sed s/removable:.*$/device\\/uevent/ |
    xargs grep -H ^DRIVER=sd |
    sed s/device.uevent.*$/size/ |
    xargs grep -Hv ^0$ |
    cut -d / -f 4
sdd
sde
sdf

반품:

export USBKEYS=($(
    grep -Hv ^0$ /sys/block/*/removable |
    sed s/removable:.*$/device\\/uevent/ |
    xargs grep -H ^DRIVER=sd |
    sed s/device.uevent.*$/size/ |
    xargs grep -Hv ^0$ |
    cut -d / -f 4
))
set | grep ^USBKEYS=
USBKEYS=([0]="sdd" [1]="sde" [2]="sdf")

마침내:

cat /sys/block/$USBKEYS/device/model
Storage Media   

cat /sys/block/${USBKEYS[2]}/device/model
silicon-power   

하지만

printf "|%s|\n" "$(</sys/block/$USBKEYS/device/model)"
|Storage Media   |

내가 쓴 이유는 다음과 같습니다.

echo ${USBKEYS[2]} \"$(sed -e s/\ *$//g </sys/block/${USBKEYS[2]}/device/model)\"
sde "silicon-power"

축소 - 골프:

단축버전이 있습니다

US=($(cut -d/ -f4 <(grep -vl ^0$ $(sed s@device/.*@size@ <(grep -l ^DRIVER=sd $(
    sed s+/rem.*$+/dev*/ue*+ <(grep -Hv ^0$ /sys/block/*/removable)) <(:))) <(:))))

(참고: <(:)포크를 통해 의사 빈 파일을 실행하면 :더 짧지 /dev/null만 실제로는 동일하지 않습니다.)

두 줄과 변수UsbSticks유지하다:

set | grep ^US=
US=([0]="sde" [1]="sdf" [2]="sdg")

따라서 (내 오프닝) 스크립트는 다음과 같습니다.

#/bin/bash

US=($(cut -d/ -f4 <(grep -vl ^0$ $(sed s@device/.*@size@ <(grep -l ^DRIVER=sd $(
    sed s+/rem.*$+/dev*/ue*+ <(grep -Hv ^0$ /sys/block/*/removable)) <(:))) <(:))))
case ${#US[@]} in 0)echo "No USB stick found.";exit 0;;1)S=$US;;*)S=$(sh -c "$(
    sed -nre 's@/sys/block/(.*)/device/model:(.*)$@\1 "\2"@;H;${x;s/\n/ /g;
      s/^/whiptail --menu "Choose an USB stick" 22 76 14/;p}' <(grep -H . $(
     printf /sys/block/%s/device/model\\n ${US[@]})))" 2>&1 >/dev/tty) ;; esac
whiptail --defaultno --yesno "Could I destroy content of $S!?" 10 70 6 || exit 0

답변3

최신 버전의 Linux에서는 일부 /dev/disk/by-{id,label,path,uuid}디렉토리에 다양한 /dev/sdX 및 /dev/sdXN 항목에 대한 자동 심볼릭 링크가 포함되어 있습니다(모두 udev에서 설정한 것으로 생각됩니다). 이는 디스크와 파티션에 대해 보다 안정적이고 유용한 이름을 제공합니다. 나는 /dev/disk/by-label/이것이 가장 유용하다고 생각하지만(특히 파일 시스템 파티션에 레이블을 지정하는 경우) by-path귀하의 사용 사례에 더 유용할 수 있습니다.

답변4

lsscsi명령을 사용하여 연결된 SCSI 장치(/proc 및 /sys에서 가져옴)에 대한 다양한 정보를 인쇄 할 수도 있습니다 . 전송 정보에 관심이 있으므로 lsscsi -t | grep usb어떤 장치가 USB 전송을 사용하고 있는지 알려줍니다.

관련 정보