하드 드라이브가 외부 USB인지 내부인지 확인하는 방법은 무엇입니까?

하드 드라이브가 외부 USB인지 내부인지 확인하는 방법은 무엇입니까?

드라이브가 외부인지 내부인지 감지하고 싶습니다. SATA-USB 어댑터를 통해 USB 포트에 SATA 드라이브가 연결되어 있습니다.

hdparm -I는 다음과 같이 보고합니다.

ATA device, with non-removable media
...
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0.

분명히 이 데이터는 드라이브에서 직접 가져옵니다. hdparm이 드라이브가 보고하는 계층 대신 실제 전송 계층을 감지하는 것이 가능합니까?

나도 시도했다 lsusb. 유용하지 않은 것 같습니다. 사람이 읽을 수 있지만 출력을 다른 장치 명령과 상호 참조할 수 있는 방법은 없습니다. 버스를 반복하는 것도 lsusb -D /dev/bus/usb/...적절하지 않은 것 같습니다. 아마도 다음과 같은 작업을 수행할 수 있을 것입니다.find /dev/bus | while read -r line; do if((lsusb -D $line | grep) CONTAINS SOME SUBSTRING MENTIONING THE DEVICE) then blah done

parted --list또한 외부 드라이브가 USB를 통해 실행되고 있다는 사실을 보고하지 못합니다.

Model: ADATA SU 800 (scsi)

답변1

나는 다음과 같이 말할 수 있다:

$ realpath /sys/block/sd*
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host6/target6:0:0/6:0:0:0/block/sdc

노트:

  • realpath그렇지 않다면 readlink힌트를 줄 수도 있습니다.
  • 특정 장치에 대해 쿼리합니다. 일부(위와 같은) 또는 전체( /sys/block/*)입니다.
  • 내 쿠분투에는 /sys/class/block/파티션 항목도 포함되어 있습니다(예: sda1).

POSIX 솔루션:

$ for p in /sys/block/sd*; do (cd "$p" && pwd -P); done
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host6/target6:0:0/6:0:0:0/block/sdc

관련 정보