Which hard disk drive is which?

52,318

Solution 1

hdparm -i /dev/sdX gives you the serial number, which is the simplest way I know of to tell apart hard disks of the same brand and size.

The serial number is normally printed on a label on the disk, so although you need to open the case to find it, there's no need disassemble the computer.

Example:

$ sudo hdparm -i /dev/sdb | grep -i serial
 Model=SAMSUNG HD253GJ, FwRev=1AJ10001, SerialNo=S24JJ90Z505435

If you want more info lshw -c storage -c disk gives the most readable output. It's pretty much the same data as Disk Utility, just in command line format.

Here is an annotated example from the most complex setup I have access to, with four disk controllers, seven hard disks, a DVD ROM and a USB disk.

The output has been cut down to size to focus on the interesting parts:

[server ~]$ sudo lshw -c storage -c disk
  *-storage   
  # a 2-port PCI-E SATA controller
       description: SATA controller
       product: 88SE9123 PCIe SATA 6.0 Gb/s controller
       vendor: Marvell Technology Group Ltd.
     *-disk
          description: ATA Disk
          product: WDC WD15EADS-00P
          vendor: Western Digital
  # 'physical id' corresponds to port number, first port is 0
          physical id: 0  
          logical name: /dev/sdg
          serial: WD-WMAVU0849124
          size: 1397GiB (1500GB)
     *-cdrom
          description: DVD reader
          product: BD-ROM BR-5100S
          vendor: Optiarc
          physical id: 1
          logical name: /dev/cdrom1
          logical name: /dev/dvd1
          logical name: /dev/scd0
          serial: [Optiarc BD-ROM BR-5100S 1.02 May20 ,2008
  *-storage
  # mobo controller for eSATA ports. Not used.
       description: SATA controller
       product: JMB362/JMB363 Serial ATA Controller
       vendor: JMicron Technology Corp.
  *-ide
  # mobo controller for IDE. Not used.
       description: IDE interface
       product: JMB362/JMB363 Serial ATA Controller
       vendor: JMicron Technology Corp.
  *-storage
  # the primary SATA controller, six ports
       description: SATA controller
       product: 82801JI (ICH10 Family) SATA AHCI Controller
       vendor: Intel Corporation
  # 'disk:0' means port 0, same as physical id
     *-disk:0
          description: ATA Disk
          product: WDC WD1600BEVS-0
          vendor: Western Digital
          physical id: 0
          logical name: /dev/sda
          serial: WD-WXEY08T58317
          size: 149GiB (160GB)
     *-disk:1
          description: ATA Disk
          product: ST32000542AS
          vendor: Seagate
          physical id: 1
          logical name: /dev/sdb
          serial: 5XW1RTDS
          size: 1863GiB (2TB)
     *-disk:2
          description: ATA Disk
          product: ST32000542AS
          vendor: Seagate
          physical id: 2
          logical name: /dev/sdc
          serial: 5XW23W0W
          size: 1863GiB (2TB)
     [...]
  *-scsi
  # the USB disk, as evidenced by the bus info 
       physical id: 1
       bus info: usb@1:1
       capabilities: emulated scsi-host
     *-disk
          description: SCSI Disk
          product: 10EAVS External
          vendor: WD
          physical id: 0.0.0
          logical name: /dev/sdh
          serial: WD-WCAU46029507
          size: 931GiB (1TB)

I think the Disk Utility is faster to read; the command line version has the advantage of being usable over ssh and in scripts.

And I still think the serial number is the most reliable solution :)

The "Physical ID" of each drive corresponds to where it is connected to the motherboard. and starts with 0. so a physical ID of 2 would mean that the drive is attached to the 3rd sata port of your mobo or other applicable device.

Solution 2

Disk Utility

This is a GUI application that will give you information about the model, size, serial number and device path of your drives. It is installed by default on Ubuntu Desktop. You can press the Ubuntu Dash button and search "disk utility" to find it, or run it in the terminal with palimpsest.

Disk Utility

Solution 3

Open the case and listen to the drives with a rolled up copy of "The Linux Journal". Then run a dd on each drive in turn to generate some disk noise.

Solution 4

You can get that information from /sys (or /dev, for that matter):

anthony@Zia:~$ ls -l /sys/block/ | grep sd.
lrwxrwxrwx 1 root root 0 Feb 25 13:30 sda -> ../devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0/block/sda
lrwxrwxrwx 1 root root 0 Feb 25 13:30 sdb -> ../devices/pci0000:00/0000:00:1f.2/host3/target3:0:0/3:0:0:0/block/sdb
lrwxrwxrwx 1 root root 0 Feb 25 13:30 sdc -> ../devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sdc
lrwxrwxrwx 1 root root 0 Feb 25 13:30 sdd -> ../devices/pci0000:00/0000:00:1f.2/host5/target5:0:0/5:0:0:0/block/sdd

So, you can see my four disks are on ports (hosts/targets) 2 through 5.

You can also do the ls -l on /dev/disk/by-path and see it there.

Solution 5

I recommend hwinfo --disk.

This will list all relevant information for your hard disks. If you need more information about your partitions you can use hwinfo --partition.

You can combine both of the above with the --short option to get a shorter representation.

Share:
52,318

Related videos on Youtube

djeikyb
Author by

djeikyb

Updated on September 17, 2022

Comments

  • djeikyb
    djeikyb over 1 year

    I want to know which hard disk drive corresponds to which device path. It's trivial to match the hard disk stats (brand, size) with the dev path, but I want more. I want to know which drive is which inside my case. What's a good way to go about getting this info?

    Constraints

    • I am lazy. I don't want to tear apart my server to remove all the drives, then add back one by one.
    • Reboots are acceptable.
    • The drives are inconveniently scrunched together in the case. The label information is hidden.
    • The case can be opened. Most disks are SATA, so theoretically hot swappable. Unplugging cables is fair game.

    Bonus

    I'll award answer to the best/easiest gui or cli answer, and give a bounty to the next-best answer of the other kind. I prefer a cli answer, but understand that a lot of other folks will appreciate a good point-and-click method.

  • Allan
    Allan about 13 years
    and you only need to use one hand and finger thats what I call energy conservation "save the planet use disk utility"
  • djeikyb
    djeikyb about 13 years
    I think this will be the answer, with "Location: Port X of SATA Host Adapter" being the killer feature. I'd love to see some cli answers too though. Octavian & faustus have interesting solutions along those lines
  • djeikyb
    djeikyb about 13 years
    Interesting. The serial/label is nice to have, but in my scenario the disks are crammed in a holder that blocks the sticker from view. The best I can do is trace the cables. I didn't see anything in hdparm -i immediately useful, but I'll have to read through the man page to see if I can't get more info out of it.
  • djeikyb
    djeikyb about 13 years
    This looks most promising, especially the SysFS and Device Files lines, but I'm not sure how to translate them into english.
  • Jeremy
    Jeremy about 13 years
    Stethoscope ftw
  • djeikyb
    djeikyb about 13 years
    Haha, the serial is indeed most reliable, but this gives the useful map of linux device recognition -> physical hookups...through a command line interface. Thanks!
  • djeikyb
    djeikyb about 13 years
    Love this answer. I prefer the technical output of palimpsest and lshw, but this is a close third.
  • djeikyb
    djeikyb about 13 years
    +1 for accessing the basic info from /sys and /dev. I still like the aggregate info from the accepted solutions better, but knowing how to get and read the base info is invaluable. This is a missing part of the larger answer that @j-g-faustus and @Allan gave
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy over 7 years
    SSDs don't generate noise. Also, the solution won't work if you have more than one drive and there's other processes which read from two drives simultaneously.
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy over 7 years
    In fact, if you run strace -e trace=open lsblk and strace -e trace=open lsblk, that's exactly the data that's being read. This answer deserves more upvotes.
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy over 7 years
    Also , this won't help if you're working with a remote server via ssh or RDP
  • Audrius Gailius
    Audrius Gailius over 7 years
    What could that "whooshing" sound be?
  • djeikyb
    djeikyb over 7 years
    There's lots of good info here. But your dev/sys fs advice begs the question: "how do I know which physical disk has a partition with this uuid". Which is what I asked in the first place.
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy over 7 years
    @djeikyb That's actually one of the things that I was solving while working on the indicator I mentioned, and udisksctl is probably simplest approach - you can filter it with grep for the device + UUID lines. I'll edit it into my question. As for custom solutions, that of course it can be scripted with perl or python or even shell script, where you traverse /dev/disk/by-id and match it with symlinks in /dev/disk/by-uuid.
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy over 7 years
    @djeikyb So, you basically want to know which connectors are used by which drive , right ? and without knowing the model or the hard drive ?
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy over 7 years
    @djeikyb I've read that, and they focus on the serial number of each disk . . .which is what I also provided in udisksctl status part.
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy over 7 years
    @djeikyb Interesting. Default Disks Utility, palimpset, has apparently been renamed as gnome-disks-utility, but it doesn't have the "Location" anymore. At least not in 16.04 that I'm running
  • djeikyb
    djeikyb over 7 years