我需要知道有哪些硬盘是可用的,包括那些没有安装的和可能没有格式化的。我无法在dmesg
或/var/log/messages
中找到它们(太多东西需要滚动查看)。我希望有办法使用/dev
或/proc
来找到这些信息,但我不知道怎么做。我正在使用Linux。
这与平台有很大关系。另外,不同的方法可能会对边缘情况进行不同的处理(各种 "假 "磁盘,RAID卷,...)。
在现代udev安装中,在/dev/disk
的子目录中有存储介质的符号链接,让你通过序列号(/dev/disk/by-id/
)、UUID(/dev/disk/by-uuid
)、文件系统标签(/dev/disk/by-label/
)或硬件连接(/dev/disk/by-path/
)查询磁盘或分区。
在Linux 2.6下,每个磁盘和类似磁盘的设备在/sys/block
中都有一个条目。在自古以来的Linux下,磁盘和分区都在/proc/partitions
中列出。另外,你可以使用lshw: lshw -class disk
。
Linux还提供了lsblk
工具,可以显示一个漂亮的存储卷的树状视图(从util-linux 2.19开始,在带有BusyBox的嵌入式设备上不存在)。
如果你有一个fdisk
或disklabel
工具,它可能会告诉你它能在哪些设备上工作。
你可以在Rosetta Stone for Unix上找到许多unix变体的实用程序名称,特别是 "列出硬件配置 "和 "读取磁盘标签 "行。
@Giles说这是高度依赖平台的。这里有一个这样的例子。
我正在运行一个CentOS 5.5系统。这个系统有4个磁盘和一个3ware RAID控制器。
在我的例子中,lshw -class disk
,cat /proc/scsi/scsi
和parted -list
显示了RAID控制器(3ware 9650SE-4LP)。这并不显示实际的磁盘。
只显示提供/dev/sda卷的3ware RAID控制器。
# lshw -class disk
*-disk
description: SCSI Disk
product: 9650SE-4LP DISK
vendor: AMCC
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: AMCC Model: 9650SE-4LP DISK Rev: 4.06
Type: Direct-Access ANSI SCSI revision: 05
# parted --list
Model: AMCC 9650SE-4LP DISK (scsi)
Disk /dev/sda: 2000GB
为了看到下面的磁盘,我不得不安装3ware的tw_cli工具,并询问控制器本身。
# tw_cli info c0
...
VPort Status Unit Size Type Phy Encl-Slot Model
------------------------------------------------------------------------------
p0 OK u0 931.51 GB SATA 0 - WDC WD1002FBYS-02A6
p1 OK u0 931.51 GB SATA 1 - WDC WD1002FBYS-02A6