드라이브가 외부인지 내부인지 감지하고 싶습니다. 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