Solved Hard Drive Serial Number

BytesUnknown

New Member


Messages: 3

How can I grab the hard drive serial number in C on a machine running FreeBSD? The hard drive in question is an mSATA SSD. Specifically the TS256GMSA370.

In my searching I found the following on this forum: Thread 9548

I receive the error 'Inappropriate ioctl for device' when running the following:
PHP:
ioctl(fd, IOCATAGPARM, &atap);
From my understanding, this code is for ATA devices. When running camcontrol I receive the following:
Code:
camcontrol identify /dev/ada0
protocol         ATA/ATAPI-9 SATA 3.x
device model     TS256GMSA370
Now, I can, as a last resort, execute the camcontrol command within C and extract the serial this way. However, I'd prefer to grab the serial natively in C.

Is there an ioctl command that will allow me to grab the serial from an mSATA SSD, or perhaps another method besides ioctl?

Solution
/usr/src/usr.sbin/diskinfo/diskinfo.c has
Code:
...
if (ioctl(fd, DIOCGIDENT, ident) == 0)
...
 

getopt

Aspiring Daemon

Reaction score: 407
Messages: 609

dmesg | grep -B1 'Serial Number'
geom disk list where ident is the serial.
sysctl kern.geom.confxml | grep -B20 -A10 ident might give you a hint to hex addresses.
 

SirDice

Administrator
Staff member
Administrator
Moderator

Reaction score: 7,764
Messages: 30,893

All drives, including ATA, are accessed through cam(4) these days. So there's no difference between SCSI and ATA anymore.
 
OP
OP
B

BytesUnknown

New Member


Messages: 3

dmesg | grep -B1 'Serial Number'
geom disk list where ident is the serial.
sysctl kern.geom.confxml | grep -B20 -A10 ident might give you a hint to hex addresses.
Thank you. geom seems like a nice alternative to using cammodel.

All drives, including ATA, are accessed through cam(4) these days. So there's no difference between SCSI and ATA anymore.
Thank you. Doing some searching led me to Chapter 12. Common Access Method SCSI Controllers. I'll do some reading on this manual to see if I can come up with a way to extract the serial using cam.
 

lme@

Administrator
Staff member
Administrator
Moderator
Developer

Reaction score: 295
Messages: 769

/usr/src/usr.sbin/diskinfo/diskinfo.c has
Code:
...
if (ioctl(fd, DIOCGIDENT, ident) == 0)
...
 
OP
OP
B

BytesUnknown

New Member


Messages: 3

/usr/src/usr.sbin/diskinfo/diskinfo.c has
Code:
...
if (ioctl(fd, DIOCGIDENT, ident) == 0)
...
Thank you! DIOCGIDENT indeed grabs the serial for the drive. I'm still going to finish reading up on CAM, as I'm still in the middle of that, but I shall use DIOCGIDENT as it's exactly what I was looking for.
 
Top