How do I find out what hard disks are in the system?
I need to know what hard disks are available, including ones that aren’t mounted and possibly aren’t formatted. I can’t find them in dmesg or /var/log/messages (too much to scroll through). I’m hoping there’s a way to use /dev or /proc to find out this information, but I don’t know how. I am using Linux.
The original question didn’t specify any particular unix variant, and hardware management is obviously highly variant-dependent.
I found a useful page describing many common hardware commands with a search on Google. The disk drive ones include lshw (List Hardware), hwinfo (Hardware Information), lsscsi (List scsi devices), lsusb (List usb buses/devices), lsblk (List block devices), fdisk -l and mount . More information at binarytides.com/linux-commands-hardware-info.
16 Answers 16
This is highly platform-dependent. Also different methods may treat edge cases differently (“fake” disks of various kinds, RAID volumes, …).
On modern udev installations, there are symbolic links to storage media in subdirectories of /dev/disk , that let you look up a disk or a partition by serial number ( /dev/disk/by-id/ ), by UUID ( /dev/disk/by-uuid ), by filesystem label ( /dev/disk/by-label/ ) or by hardware connectivity ( /dev/disk/by-path/ ).
Under Linux 2.6, each disk and disk-like device has an entry in /sys/block . Under Linux since the dawn of time, disks and partitions are listed in /proc/partitions . Alternatively, you can use lshw: lshw -class disk .
Linux also provides the lsblk utility which displays a nice tree view of the storage volumes (since util-linux 2.19, not present on embedded devices with BusyBox).
If you have an fdisk or disklabel utility, it might be able to tell you what devices it’s able to work on.
You will find utility names for many unix variants on the Rosetta Stone for Unix, in particular the “list hardware configuration” and “read a disk label” lines.
lsblk will list all block devices. It lends itself well to scripting:
$ lsblk -io 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
lsblk is present in util-linux package and is thus far more universal than proposed alternatives.
Indeed =) $ lsblk -ido KNAME,TYPE,SIZE,MODEL (part of util-linux which is part of base on Arch) instantly gives the information requested, and without the need to be root. Note that it provides the Device model, not Model Family. smarctl -i /dev/ advised by Skippy did it, eg: «Model Family: Seagate Barracuda 7200.12» (missing from lsblk -ido: «disk 465,8G ST3500418AS»).
not bad. I’ll double check it when I get off, I’m sure it works. unfortunately it’s ( lshw ) not installed on the server, and I suspect the answer will be we’re not installing it.
> hwinfo --disk 21: IDE 00.0: 10600 Disk [Created at block.245] Unique ID: 3OOL.8MZXfAWnuH8 Parent ID: w7Y8.1T_0outZkp6 SysFS ID: /class/block/sda SysFS BusID: 0:0:0:0 SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0 Hardware Class: disk Model: "Hitachi HTS54322" Vendor: "Hitachi" Device: "HTS54322" Revision: "ESBO" Driver: "ahci", "sd" Driver Modules: "ahci" Device File: /dev/sda Device Files: /dev/sda, /dev/disk/by-id/ata-Hitachi_HTS543225A7A384_E2021342GEPG4J, /dev/disk/by-id/scsi-SATA_Hitachi_HTS5432_E2021342GEPG4J, /dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0, /dev/disk/by-id/wwn-0x5000cca614c6395e Device Number: block 8:0-8:15 BIOS id: 0x80 Geometry (BIOS EDD): CHS 484521/16/63 Size (BIOS EDD): 488397168 sectors Geometry (BIOS Legacy): CHS 1023/255/63 Drive status: no medium Config Status: cfg=new, avail=yes, need=no, active=unknown Attached to: #17 (SATA controller) > hwinfo --block --short disk: /dev/sda Hitachi HTS54322 partition: /dev/sda1 Partition /dev/sda2 Partition /dev/sda3 Partition /dev/sda4 Partition /dev/sda5 Partition
@Giles says this is highly platform-dependent. Here’s one such example.
I’m running a CentOS 5.5 system. This system has 4 disks and a 3ware RAID controller.
In my case, lshw -class disk , cat /proc/scsi/scsi and parted —list shows the RAID controller (3ware 9650SE-4LP). This doesn’t show the actual disks:
only shows the 3ware RAID controller which provides the /dev/sda volume:
# 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
In order to see the disks which lie underneath, I had to install the tw_cli utility from 3ware, and ask the controller itself.
# 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
Since both «Can I see what HDD I have installed?» and «How do I determine the make & model of my storage devices?» are marked as duplicates of this question, I’m surprised no-one mentioned hdparm and smartctl . Having a look at a few machines, seems that either of them (when it’s not both) is often found already installed in standard (even old) linux distributions.
# smartctl -i /dev/sda smartctl 6.1 2013-03-16 r3800 [i686-linux-3.9.9-301.fc19.i686.PAE] (local build) Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Toshiba 2.5" HDD MK..56GSY Device Model: TOSHIBA MK1656GSY Serial Number: 60PKT43CT LU WWN Device Id: 5 000039 2919874b6 Firmware Version: LH013D User Capacity: 160 041 885 696 bytes [160 GB] Sector Size: 512 bytes logical/physical Device is: In smartctl database [for details use: -P show] ATA Version is: ATA8-ACS (minor revision not indicated) SATA Version is: SATA 2.6, 3.0 Gb/s Local Time is: Mon Jul 22 11:13:37 2013 CEST SMART support is: Available - device has SMART capability. SMART support is: Enabled # hdparm -i /dev/sda /dev/sda: Model=TOSHIBA MK1656GSY, FwRev=LH013D, SerialNo=60PKT43CT Config= < Fixed >RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0 BuffType=unknown, BuffSize=16384kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=312581808 IORDY=on/off, tPIO=, tDMA= PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: sdma0 sdma1 sdma2 mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 AdvancedPM=yes: unknown setting WriteCache=enabled Drive conforms to: Unspecified: ATA/ATAPI-3,4,5,6,7 * signifies the current active mode
As usual, check manpage for more options.