我需要找到连接到给定机器的所有可写存储设备,无论它们是否已安装。
执行此操作的愚蠢方法是尝试/dev
与可写设备(hd* 和 sd*)相对应的每个条目。
有没有更好的解决方案,或者我应该坚持这个?
答案1
如果一个人只对堵塞存储设备,可以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
它非常适合与许多其他可用的专栏一起编写脚本。
答案2
您可以仔细检查输出lshw
并提取有关disk
或tape
类中的设备的详细信息(也可能是其他设备 -storage
类会为您提供有关存储控制器、scsi、sata、sas 等的详细信息)。
例如
lshw -class disk -class tape
该-short
选项给出了一个很好的紧凑的摘要。例如,在我家的 zfsonlinux 服务器/工作站/实验箱上(遗憾的是没有磁带设备):
# lshw -类磁带 -类磁盘 -类存储 -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 [Falcon] /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
答案3
请尝试这个命令
ls -l /dev /dev/mapper |grep '^b'
它将列出系统中的所有块设备
答案4
lsblk
将列出所有块存储设备。
fdisk -l
将列出列出的所有设备上的所有分区/proc/partitions
lshw -short
将为您提供有关系统上所有硬件(火线除外)的信息。