linux查看序列号命令 linux查看sn序列号

linux下怎么用c获取硬盘物理序列号

1、在Linux系统中通过C语言获取硬盘序列号,可以借助于ioctl()函数,该函数原型如下:

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名虚拟主机、营销软件、网站建设、晋源网站维护、网站推广。

int ioctl(int fd, unsigned long request, ...);

ioctl的第一个参数是文件标识符,用open()函数打开设备时获取。

ioctl第二个参数为用于获得指定文件描述符的标志号,获取硬盘序列号,一般指明为HDIO_GET_IDENTITY。

ioctl的第三个参数为一些辅助参数,要获取硬盘序列号,需要借助于struct hd_driveid结构体来保存硬盘信息 ,该结构体在Linux/hdreg.h中,struct hd_driveid的声明如下

struct hd_driveid {

unsigned short    config;        / lots of obsolete bit flags */

unsigned short    cyls;        /* Obsolete, "physical" cyls */

unsigned short    reserved2;    /* reserved (word 2) */

unsigned short    heads;        /* Obsolete, "physical" heads */

unsigned short    track_bytes;    /* unformatted bytes per track */

unsigned short    sector_bytes;    /* unformatted bytes per sector */

unsigned short    sectors;    /* Obsolete, "physical" sectors per track */

unsigned short    vendor0;    /* vendor unique */

unsigned short    vendor1;    /* vendor unique */

unsigned short    vendor2;    /* Retired vendor unique */

unsigned char    serial_no[20];    /* 0 = not_specified */

unsigned short    buf_type;    /* Retired */

unsigned short    buf_size;    /* Retired, 512 byte increments

* 0 = not_specified

*/

……

};

2、源代码如下

#include stdio.h

//ioctl()的声明头文件

#include sys/ioctl.h

//硬盘参数头文件, hd_driveid结构声明头文件

#include linux/hdreg.h

//文件控制头文件

#include sys/fcntl.h

int main()

{

//用于保存系统返回的硬盘数据信息

struct hd_driveid id;

//这里以第一块硬盘为例,用户可自行修改

//用open函数打开获取文件标识符,类似于windows下的句柄

int fd = open("/dev/sda", O_RDONLY|O_NONBLOCK);

//失败返回 

if (fd  0) {

perror("/dev/sda");

return 1; }

//调用ioctl()

if(!ioctl(fd, HDIO_GET_IDENTITY, id))

{

printf("Serial Number=%s\n",id.serial_no);

}

return 0;

}

编译完成后,执行效果如下:

Linux 查看硬盘序列号 命令

linux下怎样查看硬盘型号和硬盘序列号

hdparm

-i

/dev/hda

这个命令更多的参数

解释

如下

(以下内容来自互联网)

-a

获取/设置硬盘每个簇的大小,默认值是8(即每个簇大小为4kb)。

-a

禁用/开启ide驱动器的

read-lookahead(不懂)

特性(默认是打开的)。

-b

获取/设置

bus

state(不懂)。

-b

设置高级电源管理特性(apm),如果驱动器支持。一个较小的值意味着更省电?一个较大的值意味着更好的性能,将它设置为255将在指定驱动器上关闭apm。

-c

查询/开启

(e)ide

32位

i/o

支持。加上一个数值可以开启或关闭它。一般设置为0,即禁用32位数据传输,为1则开启32位数据传输,为3则开启32位数据传输和一个特别传输序列,但会消耗一些系统资源。

-c

检查当前ide电源模式,可以使用-s/-y/-y/-z等参数控制ide电源模式。

-d

禁用/开启dma。这个参加目前只能在并行ide和pci界面上,适当使用-x和-d1参数是个好主意,打开dma可以获得最好的磁盘性能和降低cpu占用率。

-d

禁用/开启坏扇区管理特性。

-e

设置光驱速度,这不是必需的,因为光驱会自动调速,但是你如果想用它,可以设置一个数值,通常设置为2或4。

-f

为设备退出时同步和填满缓冲区,这个参数也会做-t和-t所做的事。

-g

显示驱动器几何值(柱面,磁头,扇区)和开始扇区。

-h

简要显示此命令的帮助信息。

-i

显示驱动器的基本信息。

-i

显示驱动器的详细信息。

-k

获取/设置“在重启后保持设置”,使用这个参数将使驱动器在软重启后保持-dmu选项(后面还有一大堆,不懂)

-k

获取/设置“在重启后保持设置”,使用这个参数将使驱动器在软重启后保持-apswxz选项,不是所有驱动器都支持这样做。

-l

锁住驱动器?(不懂)

-m

获取/设置在驱动器上为多扇区i/o计算扇区,开启这个参数将减少cpu开支30-50%,在大多数系统上它也能增加数据生产量?5-50%,使用这个参数会使某些型号的驱动器(如wd鱼子酱系列)减慢速度,大多数驱动器支持的最小数值可以是2,4,8,或16,更大也可以,视情况而定,大多数系统设置为16或32比较理想,wd的硬盘推荐设置为4到8,用-i参数可以看到当前硬盘的设置,某些驱动器要求支持复合模式,但在某些设置下会丢失数据。

-m

获取/设置自动噪音管理。很多驱动器支持使用磁盘降速的方法降噪,这个数值可以设置为从0至254,设置为128最为静音(速度最低),设置为254速度最快(噪音最大),某些驱动器自己规定两个级别(静音/快速),虽然你使用128至254之间的数值。

-n

获取或设置“忽略写错误”,最好不要使用在...(不懂)

-p

尝试重新调整ide界面芯片指定的pio模式,或自动设置为驱动器支持的最佳pio模式,这个特性在内核中仅支持少数芯片,某些ide芯片在单驱动器时不允许调整pio模式,大多数ide芯片或多或少地支持0到5的pio模式。

-p

为驱动器的内部预读装置设置最大扇区,不是所有的驱动器都支持。

-q

(不懂)。在使用-i

或-v或-t或-t时无效。

-q

设置标记队列深度(1或更大),或关闭标记队列深度。这只能在2.5.xx或更新的内核中使用,目前还只有很少的驱动器支持它。

-r

获取/设置设备为只读模式,设置之后设备将不能允许写入。

-r

注册一个ide界面,危险。要获得更多信息,看一下-u选项。

-s

设置驱动器等待超时,这个参数决定硬盘在多久未响应之后关闭主轴电机以省电,这个数值设置为0则关闭这个功能,设置为1至240时,时间将为5秒的倍数,即5秒至20分钟,设置为241至251时,时间将为30分钟的1-11倍,即30分钟到5.5小时,设置为252象征着21分钟,253为?(不懂),255即为21分15秒。

-t

测试读缓存的速度。

-t

也是测速度的。

-u

获取/设置???(不懂,晕)

-u

注销一个ide界面,危险!

-v

显示使用-i未显示出的所有设置。

-w

执行设备重启(危险),一般不要用这个参数。

-w

禁用/开启ide驱动器的写缓冲特性,默认设置为设备制造商指定的值。

-x

(看不懂,危险)。

-x

为较新的(e)ide/ata驱动器设置ide传输模式,与-d1参数一起使用,使用-x

mdma2将开启多字dma模式2传输,使用-x

sdma1将开启单字dma模式1传输,使用-x

udma2将开启ultradma模式传输(需要芯片组支持)。现在很多ide设备在启动时就已经自动调整到最佳的pio模式,要使用此参数应该调整好-p参数,严重警告!这个数据是pio模式值+8,即设置为09代表传输模式为pio模式1,10即pio模式2,11即pio模式3,设置为00则恢复默认pio模式,01代表禁用iordy(什么是iordy啊,晕),要开启mdma,这个数值是mdma模式值+32,要开启udma,这个数值是udma模式值+64,即66为udma2(ata33),68为udma4(ata66),69为udma5(ata100,那么70应该是udma6即ata133了?我猜测的)

-y

使ide驱动器立即进入低耗电等待模式,用-c参数可以检查当前的耗电模式。

-y

使ide驱动器立即进入低耗电睡眠模式,用-c参数可以检查当前的耗电模式。

-z

让内核重新读取指定设备上的分区表。

-z

禁用segate驱动器的自动省电功能(st3xxx型号),防止它们在一定时间后闲置。

linux下怎样查看硬盘序列号

root@localhost:~# fdisk -l

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes

255 heads, 63 sectors/track, 243201 cylinders, total 3907029168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

Device Boot Start End Blocks Id System

/dev/sda1 1 3907029167 1953514583+ ee GPT

root@localhost:~# hdparm -i /dev/sda1

/dev/sda1:

Model=WDC WD2003FYYS-02W0B1, FwRev=01.01D02, SerialNo=WD-WMAY04598673

Config={ HardSect NotMFM HdSw15uSec SpinMotCtl Fixed DTR5Mbs FmtGapReq }

RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50

BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16

CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=3907029168

IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}

PIO modes: pio0 pio3 pio4

DMA modes: mdma0 mdma1 mdma2

UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6

AdvancedPM=yes: unknown setting WriteCache=enabled

Drive conforms to: Unspecified: ATA/ATAPI-1,2,3,4,5,6,7

* signifies the current active mode

LINUX如何查询工作站多硬盘的硬盘序列号

LINUX查询工作站多硬盘的硬盘序列号方法:

1、确认安装yaourt hdparm

2、运行下面命令查看共有多少硬盘

[root@myhost detect]# fdisk -l

Disk /dev/sda: 320.1 GB, 320072933376 bytes

255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

Device Boot Start End Blocks Id System

/dev/sda1 * 63 385559 192748+ 83 Linux

/dev/sda2 385560 4385744 2000092+ 82 Linux swap / Solaris

/dev/sda3 4385745 14378174 4996215 83 Linux

/dev/sda4 14378175 625137344 305379585 5 Extended

/dev/sda5 14378238 34379099 10000431 83 Linux

/dev/sda6 34379163 44371529 4996183+ 83 Linux

/dev/sda7 44371593 75617954 15623181 83 Linux

/dev/sda8 75618018 106864379 15623181 83 Linux

/dev/sda9 106864443 126865304 10000431 83 Linux

/dev/sda10 126865368 625137344 249135988+ 83 Linux

由上可见,只有一个硬盘sda,其中,sda1到sda10是说该硬盘共有十个分区。

多个硬盘的话会看到sdb、sdc等;

3、查看sda硬盘的序列号,

[root@myhost detect]# hdparm -i /dev/sda

/dev/sda:

Model=ST3320418AS, FwRev=CC66, SerialNo=6VMDEMJM

Config={ HardSect NotMFM HdSw15uSec Fixed DTR10Mbs RotSpdTol.5% }

RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4

BuffType=unknown, BuffSize=16384kB, MaxMultSect=16, MultSect=16

CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=625142448

IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}

PIO modes: pio0 pio1 pio2 pio3 pio4

DMA modes: mdma0 mdma1 mdma2

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

AdvancedPM=no WriteCache=enabled

Drive conforms to: unknown: ATA/ATAPI-4,5,6,7

由上可见,sda硬盘的序列号为6VMDEMJM。

同理查看其它硬盘序列号。


当前文章:linux查看序列号命令 linux查看sn序列号
文章出自:http://scyanting.com/article/dogodpi.html