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.