How do I find out what hard disks are in the system?
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.
How about
lshw -class disk