查找连接到 Linux 机器的所有存储设备

war*_*ren 41 storage linux

我需要找到连接到给定机器的所有可写存储设备,无论它们是否已安装。

执行此操作的笨拙方法是尝试/dev对应于可写设备(hd* 和 sd*)的每个条目。

有没有更好的解决方案,还是我应该坚持使用这个解决方案?

K3-*_*rnc 64

如果只对存储设备感兴趣,可以使用lsblk广泛可用的 util-linux 包:

$ lsblk -o KNAME,TYPE,SIZE,MODEL
KNAME TYPE   SIZE MODEL
sda   disk 149.1G TOSHIBA MK1637GS
sda1  part  23.3G 
sda2  part    28G 
sda3  part  93.6G 
sda4  part   4.3G 
sr0   rom   1024M CD/DVDW TS-L632M
Run Code Online (Sandbox Code Playgroud)

它非常适合使用许多其他可用列编写脚本。


cas*_*cas 17

您可以浏览or类中lshw设备的输出并提取有关设备的详细信息(可能还有其他类-类为您提供有关存储控制器、scsi、sata、sas 等的详细信息)。disktapestorage

例如

lshw -class disk -class tape
Run Code Online (Sandbox Code Playgroud)

-short选项提供了一个很好的紧凑摘要。例如在我家的 zfsonlinux 服务器/工作站/实验箱上(不幸的是没有磁带设备):

# lshw -class 磁带 -class 磁盘 -class 存储 -short
硬件路径设备类描述
================================================== ========
/0/100/4/0 存储 JMB362 SATA 控制器
/0/100/5/0 scsi10 存储 JMB362 SATA 控制器
/0/100/5/0/0.0.0 /dev/sdc 磁盘 120GB 爱国者野火
/0/100/b/0 scsi1 存储 SAS2008 PCI-Express Fusion-MPT SAS-2 [猎鹰]
/0/100/b/0/0.0.0 /dev/sdd 磁盘 1TB WDC WD10EARS-00Y
/0/100/b/0/0.1.0 /dev/sde 磁盘 1TB WDC WD10EACS-00Z
/0/100/b/0/0.2.0 /dev/sdf 磁盘 1TB WDC WD10EACS-00Z
/0/100/b/0/0.3.0 /dev/sdg 磁盘 1TB ST31000528AS
/0/100/b/0/0.4.0 /dev/sdh 磁盘 1TB ST31000528AS
/0/100/b/0/0.5.0 /dev/sdi 磁盘 1TB ST31000528AS
/0/100/b/0/0.6.0 /dev/sdj 磁盘 1TB ST31000528AS
/0/100/11 scsi2存储SB7x0/SB8x0/SB9x0 SATA控制器【AHCI模式】
/0/100/11/0 /dev/sda 磁盘 128GB 爱国者 Torqx 2
/0/100/11/1 /dev/sdb 磁盘 1TB ST31000528AS
/0/1 scsi11 存储     
/0/1/0.0.0 /dev/sdk 磁盘 1967MB SCSI 磁盘
/0/1/0.0.1 /dev/sdl 磁盘 SCSI 磁盘
/0/1/0.0.2 /dev/sdm 磁盘 SCSI 磁盘
/0/1/0.0.3 /dev/sdn 磁盘 SCSI 磁盘
/0/2 scsi66 存储     
/0/2/0.0.0 /dev/sdo 磁盘 SCSI 磁盘
/0/3 scsi67 存储     
/0/3/0.0.0 /dev/sdp 磁盘 4057MB SCSI 磁盘

/0/1 设备实际上是一个 USB 读卡器(其中一个插槽中插入了 2GB SD 卡),而 /0/2 设备是我插入的 Android 手机,仅用于充电。0/3 设备是一个 4GB 的 USB 闪存驱动器。

lshw可以产生纯文本、html、xml和json输出。它还可以将硬件详细信息转储为 sqlite 数据库格式。

它是为 debian 和大多数其他发行版打包的。主页和来源位于http://ezix.org/project/wiki/HardwareLiSter


Jas*_*bbs 8

您可以使用lsblk列出所有块设备,以及每个设备是否为只读。

然后grep,您可以使用和awk打印非只读块设备的名称:

lsblk -d -n -oNAME,RO | grep '0$' | awk {'print $1'}
Run Code Online (Sandbox Code Playgroud)


Ser*_*rge 6

请试试这个命令

ls -l /dev /dev/mapper |grep '^b'
Run Code Online (Sandbox Code Playgroud)

它将列出您系统中的所有块设备


小智 5

lsblk将列出所有块存储设备。

fdisk -l将列出列出的所有设备上的所有分区/proc/partitions

lshw -short将为您提供有关系统上所有硬件(火线除外)的信息。