/dev/sdX が接続されている USB または HDD かどうかを確認するにはどうすればよいでしょうか?

/dev/sdX が接続されている USB または HDD かどうかを確認するにはどうすればよいでしょうか?

ローカル HDD か USB キーかはどうすればわかりますか? ルート権限なしでこれを行う方法をお勧めします。/dev/sdX

はい、udevadmとても助かりました。

ローカル HDD の場合:

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

USBキーの場合:

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

答え1

ルート権限なしで確認する方法はいくつかありますが、その多くはトリッキー/ハッキング的です。

使用方法/dev/disk/by-id:

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

のような応答が返ってきたら/dev/disk/by-id/usb-blah-blah-blah、それは USB ディスクです。その他のプレフィックスにはata、、、、などdmがあります。memstickscsi

使用しても/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。これは、ディスクにつながるデバイス パスを示しています。この場合、おおよそのパスは PCI → USB → ディスクです ( に注意してください-usb-)。

udev を使用します (私は Debian を実行しています。私のは にあり、私の には存在しませんudevadm。あなたの は 上または外のどこかにある可能性があります):/sbin$PATH$PATH

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

デバイスが接続されているバス タイプを取得します。| grep ID_BUS情報を完全にリストするには を削除します ( を追加する必要がある場合があります|less)。

インストールしている場合はlshw、Huygensの回答5月以下も動作します:

lshw -class disk -class storage | less

そして、ディスクの出力を見てください。 でless/sdXを試して、その前の行を見てください。bus info最初の行には とだけ書かれていますscsi@…が、その数行前の行にはもっと詳しい説明があります。しかし、すべきこれをスーパーユーザーとして実行すると、適切ではない可能性があります。(症状: 私が試したラップトップでは、SATA ディスクはリストされましたが、USB ディスクはリストされませんでした。sudo両方をリストして実行しています)

これらよりも直接的なものも、そうでないものも、他にもあります。

答え2

(デバイスのトランスポートタイプ)lsblkを報告するために使用できます:TRAN

lsblk -do name,tran

NAME TRAN
sda  sata
sdb  sata
sdd  usb

ここで-d、 または--nodepsはスレーブを印刷しないことを意味し、-o name,tranまたは は--output name,tranデバイス名とデバイス トランスポート タイプのみをリストすることを意味します。出力列のリストに、どのデバイスが取り外し可能か ( if )rmを確認するための追加情報:1true

lsblk --nodeps --output NAME,TRAN,RM

NAME TRAN   RM
sda  sata    0
sdb  sata    0
sdd  usb     1

または、-nヘッダーを削除します。たとえば、特定のドライブのトランスポート タイプのみを印刷します。

lsblk -ndo tran /dev/sdb

sata

の最新バージョンlsblk(2.27およびそれ以降)はJSON出力をサポートしているので、次のようなこともできることに注意してください。

lsblk -Jdo name,tran | jq -r '.blockdevices[] | select(.tran=="usb") | .name'

バスに接続されているブロックデバイスのみを一覧表示しますUSB

答え3

解決策はわかっていますが、残念ながらルート権限が必要です。とにかく、それでも役に立つかもしれません:

sudo lshw -class disk -class storage

各デバイスについて、論理名 (例: /dev/sda) とバス情報が出力されます。USB デバイスの場合は、「usb@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
[...]

答え4

の値を読み取ります/sys/block/sdX/removable

例えば:

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

/dev/sdcUSB キー (SD カードまたはその他のリムーバブル メディアでも可)。

関連情報