LoginSignup
1
1

More than 3 years have passed since last update.

USB のブロックデバイス (USB メモリや HDD)を列挙する方法

Last updated at Posted at 2020-12-27

USB のブロックデバイス (USB メモリや HDD)を列挙する方法

USB のブロックデバイス (USB メモリや HDD)を列挙する方法 (Part2) の方法もあります。

方法

ls /sys/block/ -1 | \
  xargs -I{} echo /sys/block/{} | \
  xargs readlink | \
  grep usb | sed -e 's!.*/\([a-z]\+\)!\1!'

解説

ブロックデバイスの列挙

  • /sys/block/ 以下を列挙すると、linux 上のブロックデバイスを列挙できる。
  • 各項目はシンボリックリンクになっている。
  • usb のデバイスの場合はシンボリックリンクのパスに usb という文字列が含まれる。
ls /sys/block/ -l
合計 0
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop0 -> ../devices/virtual/block/loop0
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop1 -> ../devices/virtual/block/loop1
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop10 -> ../devices/virtual/block/loop10
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop2 -> ../devices/virtual/block/loop2
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop3 -> ../devices/virtual/block/loop3
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop4 -> ../devices/virtual/block/loop4
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop5 -> ../devices/virtual/block/loop5
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop6 -> ../devices/virtual/block/loop6
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop7 -> ../devices/virtual/block/loop7
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop8 -> ../devices/virtual/block/loop8
lrwxrwxrwx 1 root root 0 12月 27 19:08 loop9 -> ../devices/virtual/block/loop9
lrwxrwxrwx 1 root root 0 12月 27 19:08 sda -> ../devices/pci0000:00/0000:00:17.0/ata1/host0/target0:0:0/0:0:0:0/block/sda
lrwxrwxrwx 1 root root 0 12月 27 19:19 sdb -> ../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0/block/sdb
lrwxrwxrwx 1 root root 0 12月 27 19:08 sr0 -> ../devices/pci0000:00/0000:00:17.0/ata2/host1/target1:0:0/1:0:0:0/block/sr0
t

USB のブロックデバイスを列挙する

  • ls /sys/block/ -1 の出力を xargs に渡して、更に readlink でシンボリックリンクの実体を列挙する
$ ls /sys/block/ -1 | xargs -I{} echo /sys/block/{} | xargs readlink | grep usb
../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0/block/sdb

USB のブロックデバイスの部分を抽出する

sed -e 's!.*/\([a-z]\+\)!\1!' のような正規表現を使うことで ...block/sdb の最後の sdb の部分を抽出する。

最終的に以下のコマンドでデバイスファイルの部分 (sdb など) を抽出できる。

ls /sys/block/ -1 | \
  xargs -I{} echo /sys/block/{} | \
  xargs readlink | \
  grep usb | sed -e 's!.*/\([a-z]\+\)!\1!'

以下のようなコマンドにすると /dev/sdb という形式で出力できる。

ls /sys/block/ -1 | \
  xargs -I{} echo /sys/block/{} | \
  xargs readlink | \
  grep usb | sed -e 's!.*/\([a-z]\+\)!\1!' | \
  xargs -I{} echo /dev/{}

参考情報

ブロックデバイスのサイズ

以下のコマンドで /dev/sdb のブロックデバイスのセクタサイズを取得できる。

$ cat /sys/block/sdb/size 
15646720

/sys/block/sdb/size の値に 512 を掛けることでブロックデバイス全体のサイズをバイト単位で取得できる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1