检查连接的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
udev 是Linux 内核的设备管理器。
只要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