在我的 bash 脚本中我使用语法lsblk |正则表达式为了捕获我的硬件机器中的所有磁盘(不包括闪存卡或ROM)
我只是担心某些磁盘设备名称与 sd 不同,我会错过这些磁盘
是否可以 ?
lsblk | grep sd
sda 8:0 0 150G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 149.5G 0 part
sdb 8:16 0 20G 0 disk /id/sdb
sdc 8:32 0 20G 0 disk /id/sdc
sdd 8:48 0 20G 0 disk /id/sdd
sde 8:64 0 20G 0 disk /id/sde
sdf 8:80 0 20G 0 disk /id/sdf
sdg 8:96 0 20G 0 disk
sdh 8:112 0 20G 0 disk
sdi 8:128 0 20G 0 disk
sdj 8:144 0 20G 0 disk
sdk 8:160 0 20G 0 disk
答案1
大多数磁盘驱动程序使用该sd
前缀,但不是全部。历史上sd
代表“SCSI 磁盘”,但大多数磁盘使用接近于的协议小型计算机系统接口,并且大多数Linux的磁盘驱动程序使用通用sd
层加上特定于控制器的部分。但是,这不是义务,因此您需要检查您的硬件。例如,多媒体卡设备具有前缀mmcblk
.某些硬件 RAID 驱动程序使用不同的前缀。虚拟机磁盘可能会也可能不会/dev/sd*
取决于虚拟化技术。
请注意,其中sd
还包括可移动驱动程序。例如,所有 USB 驱动器都有sd
前缀,无论它们是硬盘、USB 密钥、SD 卡读卡器等。
另请注意,它grep sd
非常脆弱,因为它与sd
线路上的任何位置匹配,例如在磁盘或分区标签中。grep '^sd'
会不那么脆弱。
总而言之,grep '^sd'
做一些不太有用的事情,但可能恰好适合您,具体取决于您的硬件。如果您将安装迁移到不同的硬件,它可能会停止工作。所以你应该尝试寻找其他东西。还可以使用什么取决于您所说的“所有磁盘 (...)(不包括闪存卡或 ROM)”的含义。毕竟,闪存是一种磁盘技术,没有理由将其与旋转磁盘区分开来。依赖机器是否虚拟化这一事实通常是个坏主意。如果您开始使用 RAID,则不清楚您是对底层硬件感兴趣还是对软件可用的分区感兴趣。
如果您只想查看不可移动驱动器,请查看并检查文件中/sys/block/*
包含哪些驱动器。这包括“非硬件”块设备,例如 RAID/LVM 持有者和循环设备。0
removable
在Linux下,我推荐使用左心室容量对于不可移动媒体。它使管理变得更加容易。如果你使用LVM,那么或者pvdisplay
或者lvdisplay
可能会显示你想要的信息(但当然我不能确定,因为你没有告诉你你想要什么)。
答案2
至少 (P)ATA、SATA 和 USB 驱动器显示为.如果您有其他硬件,您可能需要检查它们的显示方式。应显示系统已检测到的所有大容量存储设备的人类可读列表。/dev/sdX
/proc/partitions
/dev/sd*
最初仅适用于 SCSI 驱动器,但其范围有所扩展。过去使用的 IDE/ATA 驱动程序将磁盘命名为磁盘/dev/hd*
,但它“已经让开发者疯狂了”当前的驱动程序使它们像 SCSI 磁盘一样显示,如/dev/sd*
.
某些硬件 RAID 控制器有自己的命名方案,例如/dev/cciss/c0d0p1
HP RAID 控制器等,并且某些虚拟机上的磁盘可能显示为/dev/xvd*
(Xen) 或/dev/vd*
(KVM virtio 驱动器)。
除此之外,最常见的可能是 RAM 磁盘/dev/ram*
;软盘/dev/fd*
;和软件 RAID 设备(多设备磁盘),/dev/md*
答案3
只有由 psuedo scsi 系统管理的设备才会列为 sdX。较旧的块设备将显示为 /dev/hda、/dev/hdb 等。SD 卡显示为 /dev/mmcblk0、/dev/mmcblk1 等。