Contents

检查连接的USB设备

1. 概述

有时,我们的机器中插入了多个 USB 存储设备。如果我们大量使用命令行,那么我们可能需要识别设备才能执行复制操作。

在本文中,我们将介绍可用于检查连接到我们系统的块 USB 存储设备的多种方法。我们将从通过检查系统日志手动识别设备开始。接下来,我们将介绍可用于相同目的的 UNIX 实用程序。

其中一些实用程序可能不会随我们的发行版一起提供,但我们可以使用包管理器 从我们的包存储库中安装它们。但是,在现代流行的发行版中,应该至少有一种工具可以用来识别我们的 USB 设备。

2. dmesg

dmesg 是一个工具,可以让我们检查设备驱动程序生成的设备日志

插入 USB 设备后,我们将tail dmesg生成的日志:

$ dmesg | tail -n 20

产生的输出将与此类似:

...
[10526.331968] sd 6:0:0:0: [sdb] 61472960 512-byte logical blocks: (31.5 GB/29.3 GiB)
[10526.332209] sd 6:0:0:0: [sdb] Write Protect is off
[10526.332216] sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00
[10526.332434] sd 6:0:0:0: [sdb] No Caching mode page found
[10526.332440] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[10526.365116] sdb: sdb1
[10526.366565] sd 6:0:0:0: [sdb] Attached SCSI removable disk

在输出中,我们可以看到我们的系统成功检测到了我们的 USB 设备。在倒数第二行中,我们的设备现在被标识为sdb

让我们验证一下:

$ find /dev -iname "sdb*"
/dev/sdb1
/dev/sdb

3. mount

mount 命令让我们挂载文件系统和块设备。它随大多数 Linux 发行版一起提供。

**在现代 Linux 发行版中,块设备是自动挂载的。**因此,假设我们的 USB 驱动器已经挂载,我们只需键入mount即可快速查看挂载设备列表:

$ mount

但是,我们只对从*/dev目录映射的设备感兴趣。按照惯例,Linux 中的块 USB 设备名称以前缀sd*开头,后跟一个唯一的字母。因此,我们将输出范围缩小到:

$ mount | grep -i /dev/sd
/dev/sda2 on / type ext4 (rw,relatime)
/dev/sdb1 on /mnt type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)

正如我们在输出中看到的,挂载在*/mnt上的/dev/sdb1*是 USB 设备。

4. udev

udevLinux 内核的设备管理器

只要udev在我们的系统上运行,我们就可以在*/dev/disk/by-id*目录中识别我们的 USB 设备

$ ls -l /dev/disk/by-id

执行命令后,我们可以看到我们的存储虚拟文件以manufacturer_serial的形式重命名:

lrwxrwxrwx 1 root root  9 May 25 20:30 usb-AI_Mass_Storage-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 May 25 20:30 usb-AI_Mass_Storage-0:0-part1 -> ../../sdb1

5. udevadm

udevadm一个管理设备事件的设备管理工具。

作为在*/dev/disk下手动检查附加设备的替代方法,我们可以使用udevadm*为每个驱动器打印大量信息:

$ udevadm info --query=all /dev/sd*
  • info子命令打印设备的信息
  • –query=all将打印所有相关字段
  • */dev/sd**是我们要打印信息的设备的路径

udevadm需要设备路径,但我们使用通配符打印sdX设备的信息。

让我们看看输出:

...
P: /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.0/host6/target6:0:0/6:0:0:0/block/sdb
N: sdb
L: 0
S: disk/by-id/usb-AI_Mass_Storage-0:0
S: disk/by-path/pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-1
...

6.  lsblk

lbslk 是一个方便的实用程序,我们可以使用它来列出所有块设备。除了设备名称之外,它还会打印额外的信息,告诉我们磁盘是否已安装以及磁盘上的可用空间量:

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 298.1G  0 disk 
├─sda1   8:1    0   128M  0 part /boot/efi
├─sda2   8:2    0     8G  0 part [SWAP]
└─sda3   8:3    0   290G  0 part /
sdb      8:16   1  29.3G  0 disk 
└─sdb1   8:17   1  29.3G  0 part 

lsblk可能是检查设备名称的最快方法。但是,并非所有系统都附带lsblk,因此我们可能需要从官方软件包存储库中以util-linux 名称安装它。

7. fdisk

fdisk一个轻量级的分区管理实用程序,可用于大多数 Linux 发行版。

我们可以通过*–list*选项打印有关当前连接的设备的信息:

$ fdisk -l

我们执行命令后,我们可以分析输出:

...
Device        Start       End   Sectors  Size Type
/dev/sda1      2048    264191    262144  128M EFI System
/dev/sda2    264192  17041407  16777216    8G Linux swap
/dev/sda3  17041408 625141759 608100352  290G Linux filesystem
Disk /dev/sdb: 29.31 GiB, 31474155520 bytes, 61472960 sectors
Disk model: Mass Storage    
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A440DCBF-1A4A-4234-9B90-C38DABF21039
Device     Start      End  Sectors  Size Type
/dev/sdb1   2048 61472767 61470720 29.3G Microsoft basic data