I have multiple hard disks which get connected to my server and I'm not sure which one is what in the view of sdXY. If I could see the serial numbers of my hard disks from terminal, I could easily identify them.

Is there any way I can get the serial numbers from the terminal?

  • expanding on this answer (I may not comment yet), you can even do it without grep and listing only the property value with ``` udevadm info --query=property --property=ID_SERIAL_SHORT --value --name=/dev/sda ```
    – j-hap
    Commented Jul 20, 2023 at 4:37

11 Answers 11


Another solution which does not require root privileges:

udevadm info --query=all --name=/dev/sda | grep ID_SERIAL

This is actually the library that lsblk, mentioned by don_crissti, leverages, but my version of lsblk does not include the option for printing the serial number.

See the man page of udevadm for more.

  • 2
    Best solution if your hard disk has died completely. Other methods don't work.
    – niieani
    Commented Mar 30, 2016 at 16:35
  • 2
    grep ID_SCSI_SERIAL may be what actually gives the serial number of the drive, as opposed to the world wide name (wwn) reported under ID_SERIAL.
    – ron
    Commented May 12, 2017 at 18:03
  • @ron Interesting! Do you have any references that define wwn?
    – Johann
    Commented May 12, 2017 at 18:13
  • only reference is my first hand experience with WD, Seagate, HGST hard drives comparing values at the terminal to what is written on the label. Hard drives are primarily enterprise/data center grade versus consumer desktop.
    – ron
    Commented May 15, 2017 at 17:14
  • 1
    @ron Just tested this again. My version of udevadm (systemd 229) reports an ID_WWN field. For the drives in my system, there is also no ID_SCSI_SERIAL nor anything analogous (no ID_ATA_SERIAL): E: ID_SERIAL=TOSHIBA-TR150_23SC51E8J2BI ... E: ID_SERIAL_SHORT=23SC51E8J2BI ... E: ID_WWN=0x5e83a97200463ff3 ... E: ID_WWN_WITH_EXTENSION=0x5e83a97200463ff3
    – Johann
    Commented Jun 19, 2017 at 5:25

In terminal type:

# hdparm -I /dev/sd? | grep 'Serial\ Number'

EDIT: You can also use lshw or smartctl

  • lshw

    # lshw -class disk

  • smartctl

    # smartctl -i /dev/sda

If you are missing those tools, just install following packages

# apt-get install hdparm
# apt-get install smartmontools
# apt-get install lshw
  • Thanks for the answer I have tested it. But its not giving the dev/sdXX . Please try to fix it. unless its good
    – Raja G
    Commented Mar 27, 2014 at 12:49
  • if you take out the 'grep' part, you will get the full info as in hdparm -I /dev/sd?
    – Loopo
    Commented Jan 20, 2016 at 13:46
  • 3
    Does not work if your hard disk has died completely and you're looking for the serial number of the faulty unit. Use @Johann's method instead.
    – niieani
    Commented Mar 30, 2016 at 16:40
  • I had to install the (apt-ly named) hdparm package on ARM (Raspbian on Raspberry Pi). Commented Dec 13, 2016 at 10:07
  • Use hdparm -I /dev/sd? | grep --before-context=4 'Serial\ Number' to correlate the serial number with the device. It looks like the original question requests that result.
    – s.co.tt
    Commented May 28, 2019 at 15:09

Device1 name and corresponding serial number:

lsblk --nodeps -o name,serial


sda  0000000012400917BA30
sdb  0000000012400917BA96

add -n if you don't want to print the header line:

lsblk -dno name,serial


sda  0000000012400917BA30
sdb  0000000012400917BA96

Pass device as argument to get only the serial number of a specific device:

lsblk -dno serial /dev/sda



Keep in mind lsblk lists information about all available (or the specified) block devices. Now, for those who do not know what that last term means:
In general, block devices are devices that store or hold data. Diskette drives, hard drives and CD-ROM drives are all block devices. But that's not a problem when using lsblk as you can simply add more columns e.g type (device type) and/or tran (device transport type) etc:

lsblk -dno name,serial,type,tran
sda  0000000012400917BA30     disk sata
sdb  0000000012400917BA96     disk sata
sr0  4B583242334C453233353320 rom  usb
  • 10
    Note that this appears to require lsblk from util-linux version 2.24 or higher: github.com/karelzak/util-linux/commit/…
    – Johann
    Commented Jun 3, 2015 at 21:32
  • How to retrieve hard disk serial when I use a VM ubuntu? The above commands return nothing on this situation Commented Aug 7, 2019 at 12:20
  • @BenyaminJafari the whole point of a VM is to separate the OS from the host hardware.
    – localhost
    Commented Jan 6, 2021 at 0:21
  • 1
    this also works if you're using software raid, thanks.
    – Flo
    Commented Jan 4, 2023 at 7:52
  • May I ask why --nodeps is necessary?
    – midnite
    Commented Feb 26 at 9:19

By using hdparm you can see your Harddisk serial number from terminal.

Open your terminal and type as

 hdparm -I /dev/sd?|grep -E "Number|/dev"
  • Well, but you need to be superuser to use the -I option in hdparm. I would not want that either and prefer a way how to read out the ser # without root permissions. This is why I've upvoted don_crissti's solution only. – syntaxerror 57 secs ago Commented Mar 19, 2015 at 11:09
$ ls -al /dev/disk/by-id/*sda*

This will show you the serial number against the familiar disk name.

  • This is a clever approach but doesn't work on my virtual box. It looks like the contents of the by-id dir are just symlinks, so ls -al /dev/disk/by-id/ will show you what you need anyway.
    – Wildcard
    Commented Nov 15, 2015 at 18:59
  • 1
    This also worked for me on a debian live boot system, while all the other tools are not available from scratch, without setting up internet and apt-getting them.
    – hoijui
    Commented Sep 30, 2017 at 8:58
  • even this fails on my system as mentioned above, then using the basic, as @Wildcard mentioned you can see my SCSI card may just be having a bad day.. $ ls -al /dev/disk/by-id | grep sdh lrwxrwxrwx. 1 root root 9 Nov 14 22:21 scsi-350000c0f01e63ff0 -> ../../sdh lrwxrwxrwx. 1 root root 10 Nov 14 22:21 scsi-350000c0f01e63ff0-part1 -> ../../sdh1 lrwxrwxrwx. 1 root root 10 Nov 14 22:21 scsi-350000c0f01e63ff0-part9 -> ../../sdh9 lrwxrwxrwx. 1 root root 9 Nov 14 22:21 wwn-0x50000c0f01e63ff0 -> ../../sdh ... Commented Nov 16, 2021 at 21:14

Easiest way I know (does not require root):

inxi -Dplxx

That outputs all disks, their serials, and any extra info. -p adds partitions. -l adds labels. -u adds UUID for the partitions.

Plus it's a lot easier to remember, heh.


inxi -Dxx
Drives:    HDD Total Size: 810.2GB (42.9% used)
           ID-1: /dev/sdc model: ST3160827AS size: 160.0GB serial: 5MT2HMH6
           ID-2: /dev/sdb model: WDC_WD3200JD size: 320.1GB serial: WD-WCAMR1302926
           ID-3: /dev/sda model: ST380817AS size: 80.0GB serial: 4MR2EWBE
           ID-4: /dev/sdd model: ST3250824AS size: 250.1GB serial: 9ND08GKX

Note that this filters out optical drives. To see optical data:

inxi -Dxxd 
Drives:    HDD Total Size: 810.2GB (42.9% used)
           ID-1: /dev/sdc model: ST3160827AS size: 160.0GB serial: 5MT2HMH6
           ID-2: /dev/sdb model: WDC_WD3200JD size: 320.1GB serial: WD-WCAMR1302926
           ID-3: /dev/sda model: ST380817AS size: 80.0GB serial: 4MR2EWBE
           ID-4: /dev/sdd model: ST3250824AS size: 250.1GB serial: 9ND08GKX
           Optical-1: /dev/sr0 model: LITE-ON DVDRW SOHW-1693S
           rev: KS09 dev-links: dvd,dvdrw
           Features: speed: 48x multisession: yes
           audio: yes dvd: yes rw: cd-r,cd-rw,dvd-r state: running
           Optical-2: /dev/sr1 model: LITE-ON LTR-52327S rev: QS0C dev-links: cdrom,cdrw
           Features: speed: 52x multisession: yes
           audio: yes dvd: no rw: cd-r,cd-rw state: running

Note that on my Debian system, lsblk does not show anything for serials, whether as root or user. Which is why inxi uses a much more reliable method to get that data.

lsblk --nodeps -o name,serial

lsblk --version
lsblk from util-linux 2.25.2

As you can see, to lsblk, it thinks that an optical drive and floppy drive are also disks, which in a sense they are, though not really, since they don't become disks until a disk is inserted. And it shows nothing for serial, it also by the way shows nothing for other values, like label. Definitely a bug since this data is available to the system, that's where inxi gets it, direct.

  • 3
    The last part of your post is wrong, lsblk does not think they're disks, it simply lists all block devices. See my updated post for a clarification. As to not showing information - this is because you're using debian which is notorius for their lsblk behaviour. It works absolutely fine on archlinux so definitely not a bug. Also, inxi is just a bash script that uses other commands to get that info; it doesn't get anything "directly". Commented Nov 15, 2015 at 19:11
  • Technically correct, but in the realm of normal speech, disks is a decent way to communicate this concept. A behavior failing is of course a bug, it's irrelevant what causes is, so your comment that a buggy lsblk isn't a bug makes basically no sense. Whether the bug is debian created or not doesn't alter the fact it's a bug. Directly means without mediation, ie, from the file system, which is where inxi gets serial information. An answer should reflect the overall gnu/linux landscape, so saying for example lsblk works except in debian/buntu has no value since most users will see it not work.
    – Lizardx
    Commented Nov 15, 2015 at 20:59
  • 1
    This part of the answer is incorrect: lsblk, it thinks that an optical drive and floppy drive are also disks. In fact, lsblk lists block devices (which include hard disks, SSDs, floppy disk drives, optical disk drives, LVM logical volumes etc.), and lsblk doesn't distinguish between disks and non-disks.
    – pts
    Commented Apr 23, 2018 at 22:31
  • 1
    FYI on Debian buster, lsblk --nodeps -o name,serial does display the serial numbers, I can't reproduce the bug.
    – pts
    Commented Apr 23, 2018 at 22:34
  • lsblk is improving, but there are still some subtle issues, I'm still not going to use it as a primary data source for tools I make, but I am using it now as a secondary source, but we've already encountered inexplicable bugs using it, working on one now.
    – Lizardx
    Commented Apr 23, 2018 at 23:58

I also like using ls -l /dev/disk/by-id because it'll show a disk's WWN if available. The WWN is usually printed on the disk's label, so it's easy to identify.

root@server (16:27:58):~# ls -l /dev/disk/by-id
total 0
lrwxrwxrwx 1 root root  9 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N -> ../../sda
lrwxrwxrwx 1 root root 10 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N-part2 -> ../../sda2
lrwxrwxrwx 1 root root  9 Dec 20 01:51 wwn-0x50014ee25ffd0a5c -> ../../sdc
lrwxrwxrwx 1 root root  9 Dec 20 01:51 wwn-0x50014ee2b554c0b4 -> ../../sdb
lrwxrwxrwx 1 root root  9 Dec 20 01:51 wwn-0x5002538d427700f0 -> ../../sda
  • this was best for me as it helped ID the drives within my RAID array so when one fails I know which one to pull
    – sdjuan
    Commented Mar 26, 2023 at 18:17
ls -al /dev/disk/by-id/ | grep sdX | grep wwn | awk '{print $9'}

This will show the wwn-id for the disk. The awk filter may need to be adjusted depending on the OS distribution and version. I needed a scripted solution to read the wwn-id, which is needed for Pacemaker disk fencing. If partitions (/dev/sdX1 e.g.) have already been created another grep is needed to filter the output:

ls -al /dev/disk/by-id/ | grep sdX | grep wwn | grep -v sdX1 | awk '{print $9'}
  • maybe issue with my SCSI card? $ ls -al /dev/disk/by-id/ | grep sdh | grep wwn | awk '{print $9'} 56 } wwn-0x50000c0f01e63ff0 57 wwn-0x50000c0f01e63ff0-part1 58 #adata wwn-0x50000c0f01e63ff0-part9 Commented Nov 16, 2021 at 21:16

On FreeBSD, one could find that information in /var/run/dmesg.

On systems with ATA/SATA disks, look for ada devices:

$ grep ^ada /var/run/dmesg.boot  | grep -i serial
ada0: Serial Number WD-WMC1S5694795
ada1: Serial Number WD-WMC1S5688675

On other systems, disk devices may be found as da devices, so grep ^da .... instead.

Rather more comprehensive output can be found via diskinfo, but each disk device must be queried explicitly:

$ diskinfo -v ada0
    512             # sectorsize
    1000204886016   # mediasize in bytes (932G)
    1953525168      # mediasize in sectors
    4096            # stripesize
    0               # stripeoffset
    1938021         # Cylinders according to firmware.
    16              # Heads according to firmware.
    63              # Sectors according to firmware.
    WDC WD10EZEX-75ZF5A0    # Disk descr.
    WD-WMC1S5694795 # Disk ident.
    ahcich0         # Attachment
    id1,enc@n3061686369656d30/type@0/slot@1/elmdesc@Slot_00 # Physical path
    No              # TRIM/UNMAP support
    Unknown         # Rotation rate in RPM
    Not_Zoned       # Zone Mode

Although each disk must be named explicitly, globbing is allowed, such as diskinfo ada{0,1}.

strings /sys/block/${dev_name}/device/vpd_pg80 | tr -d '\040\011\012\015'

Attach the 'Device Identification' VPD page (0x83) and the 'Unit Serial Number' VPD page (0x80) to a SCSI device structure. This information can be used to identify the device uniquely.



none of the existing answers addresses the condition when you have a RAID card in the system, when /dev/sda is actually not a disk, and many of the commands in the answers above will give you the serial number or information specifically about the RAID card.

In this case this is the only solution I know of that works, in order to navigate through the RAID card and access each disk, which requires root :

I have a Dell server with a PERC (poweredge raid controller) and there are 8 sssd's in this particular server, the first two are raid-0 and is what redhat is installed on. The remaining 6 ssd's are raid-5 and is /dev/sdb1 mounted as 20tb of /data.

smartctl --scan

  /dev/sda -d scsi # /dev/sda, SCSI device
  /dev/sdb -d scsi # /dev/sdb, SCSI device
  /dev/bus/0 -d megaraid,0 # /dev/bus/0 [megaraid_disk_00], SCSI device
  /dev/bus/0 -d megaraid,1 # /dev/bus/0 [megaraid_disk_01], SCSI device
  /dev/bus/0 -d megaraid,2 # /dev/bus/0 [megaraid_disk_02], SCSI device
  /dev/bus/0 -d megaraid,3 # /dev/bus/0 [megaraid_disk_03], SCSI device
  /dev/bus/0 -d megaraid,4 # /dev/bus/0 [megaraid_disk_04], SCSI device
  /dev/bus/0 -d megaraid,5 # /dev/bus/0 [megaraid_disk_05], SCSI device
  /dev/bus/0 -d megaraid,6 # /dev/bus/0 [megaraid_disk_06], SCSI device
  /dev/bus/0 -d megaraid,7 # /dev/bus/0 [megaraid_disk_07], SCSI device

smartctl -a -d megaraid,0 | grep "Serial Number" /dev/sda
smartctl -a -d megaraid,1 | grep "Serial Number" /dev/sda
smartctl -a -d megaraid,2 | grep "Serial Number" /dev/sdb
smartctl -a -d megaraid,3 | grep "Serial Number" /dev/sdb
smartctl -a -d megaraid,4 | grep "Serial Number" /dev/sdb
smartctl -a -d megaraid,5 | grep "Serial Number" /dev/sdb
smartctl -a -d megaraid,6 | grep "Serial Number" /dev/sdb
smartctl -a -d megaraid,7 | grep "Serial Number" /dev/sdb

# note: the '/dev/sd?' is not important when the -d megaraid,# is specified,
#       it is the megaraid # that navigates you to the disk
#   grep on anything desired that's outputted by smartctl --all or -xall output

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .