硬盘S.M.A.R.T技术原理与使用_hard disk s.m.a.r.t需要开启吗-程序员宅基地

技术标签: 希捷  产品  ibm  服务器配置优化  velocity  工作  windows  

2008-12-31

早在上个世纪九十年代,人们就意识到数据的宝贵性胜于硬盘自身价值,渴望有种技术能对硬盘故障进行预测并实现相对安全的数据保护,因此S.M.A.R.T技术应运而生。目前,虽然大多数硬盘的平均无故障时间(MTBF)已达30000~50000小时以上,然而对于不少用户,特别是商业用户而言,一次普通的硬盘故障便足以造成灾难性后果,所以时至今日,S.M.A.R.T技术仍为我们所用。
    一、S.M.A.R.T究竟是什么?
    S.M.A.R.T的全称为“Self-Monitoring,Analysis and Reporting Technology”,即“自我监测、分析及报告技术”。支持S.M.A.R.T技术的硬盘可以通过硬盘上的监测指令和主机上的监测软件对磁头、盘片、马达、电路的运行情况、历史记录及预设的安全值进行分析、比较。当出现安全值范围以外的情况时,就会自动向用户发出警告。
    该技术由Compaq公司率先开发,IBM、希捷、富士通、昆腾等硬盘厂商参与修正,并融合了Compaq公司的IntelliSafe诊断技术和IBM的PFA检测技术特点。
    1995年5月,Compaq公司向Small Form Factor(SFF)委员会提交了IntelliSafe的技术标准报告(SFF-8035i);1996年1月进行1.0版的修正(SFF-8035R2);1996年6月进行了1.3版的修正(SFF-8055),并联合IBM等公司向SFF正式申请将IntelliSafe技术加入到ATA-3的行业标准中,正式更名为S.M.A.R.T。
    作为行业标准,S.M.A.R.T规定了硬盘制造厂商应遵循的标准。满足S.M.A.R.T标准的条件主要包括:在设备制造期间完成S.M.A.R.T需要的各项参数、属性的设定;在特定系统平台下,能够正常使用S.M.A.R.T;通过BIOS检测,能够识别设备是否支持S.M.A.R.T并可显示相关信息,而且能辨别有效和失效的S.M.A.R.T信息;允许用户自由开启和关闭S.M.A.R.T功能;在用户使用过程中,能提供S.M.A.R.T的各项有效信息,确定设备的工作状态,并能发出相应的修正指令或警告。在硬盘以及操作系统都支持S.M.A.R.T.技术并且该技术默认开启的的情况下,在不良状态出现时S.M.A.R.T.技术能够在屏幕上显示英文警告信息:“WARNING:IMMEDIATLY BACKUP YOUR DATA AND REPLACE YOUR HARD DISK DRIVE,A FAILURE MAY BE IMMINENT.” (警告:立刻备份你的数据同时更换硬盘驱动器,可能有错误出现。)
    二、S.M.A.R.T在何处?如何工作? 
    S.M.A.R.T信息保留在硬盘的系统保留区(service area)内,这个区域一般位于硬盘0物理面的最前面几十个物理磁道,由厂商写入相关内部管理程序。除了S.M.A.R.T信息表外还包括低级格式化程序、加密解密程序、自监控程序、自动修复程序等。监测软件通过一个名为“SMART RETURN STATUS”的命令(命令代码为:B0h)对S.M.A.R.T信息进行读取,且不允许最终用户对信息进行修改。
    三、S.M.A.R.T信息表由什么组成?
    S.M.A.R.T标准中采用二进制代码作为S.M.A.R.T的基本指令,并规定写入标准的寄存器中,形成特定的S.M.A.R.T信息表,以供正常检测和运行。S.M.A.R.T指令分主指令(Command)和次指令(Subcommands)。主指令主要提供设备是否支持S.M.A.R.T或忽略某一次指令特征的信息。而次指令则提供支持S.M.A.R.T设备的检测信息。这些指令主要由设备厂商写入,一些专业硬盘维修软件可以通过这些代码进行设备的检测。
    四、通过软件查看硬盘的健康状况
    S.M.A.R.T技术的原理是通过侦测硬盘各属性,如数据吞吐性能、马达起动时间、寻道错误率等属性值和标准值进行比较分析,推断硬盘的故障情况并给出提示信息,帮助用户避免数据损失。S.M.A.R.T因此规定了专门的检测参数,由于硬盘结构、性能和定位上的不同,除了ATA-3标准规定的参数外,厂商可以根据自己产品的特性提供不同的S.M.A.R.T检测参数。普通用户则可以通过常用的系统工具(如AIDA32)来查看,并通过这些参数了解硬盘的“健康”状况。
图2:Active S.M.A.R.T检测到的硬盘S.M.A.R.T信息
    小知识:S.M.A.R.T技术是否能侦测磁头飞行高度?
    有些厂商的S.M.A.R.T参数中有“Fly Height(磁头飞行高度)”一项。不过,准确地说,硬盘无法侦测到磁头的飞行高度,因为硬盘中没有任何装置可以测试到磁头的飞行高度。虽然硬盘生产厂商可以根据磁头读取到的磁信号强度来推测磁头飞行高度,但这种推测出的磁头飞行高度很多时候与实际情况相比有较大偏差,所以只能作为参考。
接下来,我们以希捷硬盘的S.M.A.R.T检测参数为例,具体分析主要参数的含义。如图2所示,S.M.A.R.T检测参数分为7列,分别是ID检测代码、属性描述、阈值、属性值、最大错误值、实际值和属性状态。
图3:希捷硬盘的S.M.A.R.T检测参数示意图
    1.ID检测代码
    ID检测代码不是唯一的,厂商可以根据需要,使用不同的ID代码或根据检测参数的多少增减ID代码的数量。例如,西数公司的产品ID检测代码为“04”,检测的参数是Start/Stop Count(加电次数),而富士通公司同样代码的检测参数却为“Number of times the spindle motor is activated”(电机激活时间)。
    2.属性描述(Attribute Description)
    属性描述(Attribute Description)即检测项目名称。可由厂商自定义增减,由于ATA标准不断更新,有时候同一品牌的不同型号产品也会有所不同。但必须确保S.M.A.R.T规定的几个主要检测项目(虽然不同厂商对检测项目都有特定的命名规则,但这些监测项目的实质其实是一样的)。
Read Error Rate 错误读取率
Start/Stop Count 启动/停止次数(又称加电次数)
Relocated Sector Count 重新分配扇区数
Spin up Retry Count 旋转重试次数(即硬盘启动重试次数)
Drive Calibration Retry Count 磁盘校准重试次数
ULTRA DMA CRC Error Rate (ULTRA DMA奇偶校验错误率)
Multi-zone Error Rate 多区域错误率
Vendor-specific 厂商特性
    需要注意的是,不同厂商、不同类型产品的属性描述不尽相同。对用户而言,无须深入了解它们的具体含义,只需了解属性监测值的含义即可。
    3.阈值(Threshold)
    又称门限值。是由硬盘厂商指定的可靠的属性值,通过特定公式计算而得。如果有一个属性值低于相应的阈值,就意味着硬盘将变得不可靠,保存在硬盘里的数据也很容易丢失。可靠属性值的组成和大小对不同硬盘来说是有差异的。这里需要注意的是,ATA标准中只规定了一些S.M.A.R.T参数,它没有规定具体的数值,“Threshold”的数值是厂商根据自己产品特性而确定的。因此,用厂商自己提供的检测软件往往会跟Windows下的检测软件(例如AIDA32)的检测结果有较大出入。这里,我们推荐以厂商软件的检测结果为标准,因为Windows环境下,系统要求硬盘的启动程序比DOS下多得多,这可能导致硬盘S.M.A.R.T值比DOS环境下检测的波动更大。以参数Raw ErrorRate(错误读取率)为例:该参数的计算公式为10×log10(主机和硬盘之间所传输数据的扇区数)×512×8/重读的扇区数。其中 “512×8”是把扇区数转化为所传输的数据位(bits),这个值只在所传输的数据位处于10^10~10^12范围时才作计算,而当Windows系统启动后,主机和硬盘之间所传输的数据扇区大于或等于10^12时,此值将重新复位。这就是为什么有些值在不同的操作环境、不同检测程序下时波动较大的原因。
    4.属性值(Attribute value)
    属性值是指硬盘出厂时预设的最大正常值,一般范围为1~253。通常,最大的属性值等于100(适用于IBM、昆腾、富士通)或253(适用于三星)。当然,也有例外的时候,比如由西部数据公司生产的部分型号硬盘,就用了两个不同的属性值,最初生产时属性值设为200,但后来生产的硬盘属性值又改为100。
     5.最大出错值(Worst)
    最大出错值是硬盘运行中曾出现过的最大的非正常值。它是对硬盘累计运行的计算值,根据运行周期,该数值会不断地刷新,并且会非常接近阈值。S.M.A.R.T分析和判定硬盘的状态是否正常,就是根据这个数值和阈值的比较结果而定。新硬盘开始时有最大的属性值,但随着日常使用或出现错误,该值会不断减小。因此,较大的属性值意味着硬盘质量较好而且可靠性较高,而较小的属性值则意味着故障发生的可能性增大。
    6.实际值(Date)
    是硬盘各检测项目运行中的实际数值,很多项目是累计值。例如:图3中的Start/Stop Count(启停次数),累计的实际值是436,即该硬盘从开始到现在累计加电启停436次。
    7.属性状态(Status)
    这是S.M.A.R.T针对前面的各项属性值进行比较分析后,提供的硬盘各属性目前的状态,也是我们直观判断硬盘“健康”状态的重要信息。根据S.M.A.R.T的规定,这种状态一般有正常、警告和报告故障或错误等3种状态。S.M.A.R.T判定出这3个状态与S.M.A.R.T的 Pre-failure/advisory BIT(预知错误/发现位)参数的赋值密切相关。
    当Pre-failure/advisory BIT=0,并且可靠属性值远大于阈值的情况下,为正常提示“OK”标志。当Pre-failure/advisory BITt=0,并且可靠属性值大于阈值但接近阈值临界值时,为警告提示“!”标志;当Pre-failure/advisory BITt=1,并且可靠属性值小于阈值时,为报告故障或错误提示“!!!”标志。
    在图2中,我们发现出现“OK”标志的正常状态下有“值正常”(Value is Normal)和“总是略过”(Always Passing)两个状态说明。它们的区别是:“值正常”表明此项S.M.A.R.T值是正常的,硬盘没有故障;“永远略过”则表明此项只是某参数的记录,没有合格与不合格的标准,如“Power on time count”,这个参数只是记录了硬盘已经加电工作的时间,这个参数应当永远合格,它不用来衡量硬盘的性能,因此显示为“OK:Value is Normal”。
    下面我们以ID为“04”的Start/Stop Count(加电次数)检测参数为例,完整地来理解这7列参数的意义:从图2中我们看到此参数规定的属性正常值(Attribute value)为“100”,这个正常值是通过计算公式:“100-硬盘正常使用寿命期间的加电次数/1024”而给出的。而最大出错值是硬盘运行的累计计算值。例如如果是新硬盘,则加电次数为0,因此为100-0/1024=100,最大出错值=属性正常值。随着加电次数的增加,该最大出错值不断变化。厂商规定的阈值为20,即当硬盘的开关电次数达到81920次时(100-81920/1024=20),最大出错值=阈值,系统就会提示用户备份数据。因此,加电次数在81920次范围之内,并且最大出错值始终大于阈值20的状态下,均为正常。图中的加电次数(Date实际值)为107次,因此最大出错值近似为100,状态显示为“OK:Value is Normal(值正常)”。需要特别注意的是:每一个参数所给出的值都是经过一些特定的计算公式而给出的。作为用户,只要观察“Worst”和“Threshold”值的关系,并注意状态提示属性状态信息即可大致了解硬盘的健康状况。
 
五、SCSI系统中的S.M.R.A.T技术
    由于目前硬盘领域存在ATA和SCSI两种标准,所以不可否认,S.M.A.R.T技术是同时支持这两个系列的产品的,只是在一些参数设定上存在一些差异,在关键参数上SCSI比ATA硬盘更为复杂。但在实际运作中,由于用户和使用环境不同,S.M.A.R.T对ATA/IDE系统的干预比SCSI系统要多一些,而对SCSI故障的判定更为专业和准确些。SCSI硬盘的S.M.A.R.T技术与ATA硬盘的S.M.A.R.T技术相比更为复杂,以下仅列举SCSI硬盘所特有参数中的一部分。
Primary  Temp:硬盘盘体的工作温度
Secondary Temp:PCB板周围的工作温度
Min and Max Temp:在一段时间内硬盘盘体的最高和最低工作温度
Velocity Observer Count:在一段时间内伺服寻道时偏离指定磁道的次数
12V:12V供电电压值
5V:5V供电电压值
MR Res:MR磁头牡缱柚?
Sectors Read:在一段时间内从硬盘中读取的扇区数
Sectors Written:在一段时间内数据写入硬盘中的扇区数
    在ATA/IDE环境下,由主机上的软件对S.M.A.R.T“报告状态”命令生成的、来自硬盘的报警信号进行解读。主机对硬盘进行查询,以检查这一命令的状态,如果显示马上要发生故障,就将告警信号送至最终用户或系统管理员。系统管理员就安排关机时间,以备份数据和更换硬盘。主系统除对来自硬盘的“报告状态”命令进行评估外,还可对属性和告警报告进行评估。在SCSI环境下,S.M.A.R.T则只报告“状况完好”或“出现故障”。由硬盘进行故障判断,再由主机通知用户采取措施。在SCSI标准中有一个检测位,当硬盘确定可靠性出现问题时,检测位就打上标记并通知最终用户或系统管理员,采取相应措施。
    六、S.M.A.R.T的预测效果究竟如何?
    通常我们面对的硬盘故障可以分为两大类:不可预测和可预测。
    不可预测故障,通常指不可预料的电子和机械故障,这类故障发生在瞬间,如硬盘加电状态意外碰撞导致硬盘磁头撞击盘片,或瞬间电流过大引起的芯片或电路故障。通常是在S.M.A.R.T反映出性能下降之前,硬盘就已经不能工作。而这些只可通过质量、设计、工艺、制造等方面的改进以及使用过程中规范操作来降低不可预测故障的发生率(例如硬盘防震技术的开发和进展,有效降低了硬盘震动物理故障的概率)。
    可预测故障具有在硬盘完全不能工作前,其相应的参数会随时间发生变化的特点。根据这一特点,可以通过S.M.A.R.T此类实时信息检测技术监测其属性来进行故障预测、分析和提供建议,从而加以防范。此类故障中包括软件故障和硬件故障。例如许多机械故障都被看作是典型的可预测故障,S.M.A.R.T技术对于此类故障就有了用武之地,在发生故障之前,可以发出提醒用户备份数据的通知,保护用户的数据。
    据研究数据表明,利用S.M.A.R.T技术可预测的硬盘故障中,60%为机械性质的,40%左右则是对软性故障的有效预测。随着S.M.A.R.T技术及相关技术的渐渐成熟,可预测出的故障种类将越来越多,对故障的防范措施也会变得越来越有效。当然,对不想开启S.M.A.R.T技术的读者而言,也可以在BIOS设置的“Advanced BIOS Set Up”选项中将其关闭(图4)。
    七、对一些特殊问题的解答
    1.组建RAID之后,S.M.A.R.T是否仍然生效?
    用户组建RAID之后,S.M.A.R.T功能仍然有效,但是这需要RAID卡控制芯片支持S.M.A.R.T功能。实际上,RAID卡的S.M.A.R.T报警功能与硬盘在常规状态下的报错信息并无太大差别。报警时,相应模块所对应的硬盘指示灯(通常为红色)会长亮以起到警示作用。
    2.为什么监测不到USB接口外置硬盘的S.M.A.R.T状态?
    对于一个USB接口外置硬盘而言,系统将它判定为一个USB设备,监测不到S.M.A.R.T信息是因为USB标准中没有此项规定。此时虽然硬盘自身仍然在记录S.M.A.R.T状态,但由于它是USB外设,系统就不会监测它的S.M.A.R.T状态。
    3.S.M.A.R.T功能对系统性能是否有影响?
    硬盘记录S.M.A.R.T信息有两种方式,第一种是“在线(On-line)”收集,所谓在线收集就是硬盘在工作时,根据硬盘的实际工作状态收集到的信息,硬盘实时或在指定时间段内更新自身的S.M.A.R.T数据。举例来说,如果一个ATA硬盘在写入数据到一个扇区时,遇到一个不可修正的错误,硬盘会及时把这个信息更新到SMART数据中;对于SCSI硬盘,如果它设定的S.M.A.R.T更新周期是4分钟,则它会把在4分钟内收集到的相关S.M.A.R.T信息更新到S.M.A.R.T数据区,然后再开始下一个周期的跟踪。在线收集状态对系统性能没有影响。
    第二种是“离线(off-line)”收集,离线收集是硬盘收到主机发来的一些特定指令时而进行自检测试,此时硬盘会处于“idel”状态或错误修正状态,在这类情况下,硬盘自身将作大量动作以测试健康状态,导致硬盘对主机发出的正常要求产生延迟。所以离线收集状态会造成系统性能的下降。
    4.S.M.A.R.T技术对相关信息的记录是否有周期性?
    对于SCSI硬盘而言,记录S.M.A.R.T信息有周期性,一般情况下周期处于4分钟~120分钟之间。这个值在硬盘出厂时就已设定,并且只能通过专业软件进行修改;而对于ATA硬盘,S.M.A.R.T信息的记录则没有周期性。
    八、写在最后
    经过近9年的发展,S.M.A.R.T技术已成为ATA/SCSI规范中不可或缺的部分。目前,硬盘厂商关于数据保护技术的开发和研究,也基本是建立在S.M.A.R.T技术基础上的。通过本文的分析可以看出,S.M.A.R.T具有被动性的检测、预警功能,被新兴的数据保护技术衍生为可主动修复的功能。随着硬盘技术的更新,我们有理由相信,S.M.A.R.T技术将给用户的数据提供更多保障。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lanyd/article/details/5908045

智能推荐

pytorch与matlab,Pytorch安装 与入门链接-程序员宅基地

文章浏览阅读568次。Pytorch安装 与入门链接发布时间:2018-03-13 15:07,浏览次数:586, 标签:PytorchPytorch安装1)先是Anaconda安装配置,参照原来一篇博客2)Git Clone源代码进入虚拟环境后,采用conda安装:conda install pytorch torchvision -c soumith如果不成功则:那么最后还有一个选择,install from so..._matlab安装pytorch

SpingMVC IReport多数据源交叉报表示例_jaspersoft ireport designer 多数据源-程序员宅基地

文章浏览阅读8.8k次,点赞5次,收藏8次。开始本示例之前,有必要先阅读我先前发布的《SpringMVC与iReport(JasperReports) 5.6整合开发实例》这篇博文,只有熟悉了SpringMVC与iReport的整合基础之后,才能更容易上手本示例教程,因为本示例的重点在于iReport报表_jaspersoft ireport designer 多数据源

angr_angr re-程序员宅基地

文章浏览阅读1k次。angr_angr re

mysql中limit和offset的用法详细介绍_mysql limit offset-程序员宅基地

文章浏览阅读2.2w次,点赞29次,收藏129次。有的时候我们在学习或者工作中会使用到SQL语句,那么介绍一下limit和offset的使用方法。mysql里分页一般用limit来实现,例如:1、select* from user limit 3表示直接取前三条数据2、select * from user limit 1,3;表示取1后面的第2,3,4三条条数据3、select * from user limit 3 offset 1;表示取1后面第2,3,4三条条数据解释:1、当 limit后面跟一个参数的时候,该参数表示要取的数据的数_mysql limit offset

OpenCV3学习(10.1)背景分离 (帧间差分法、背景差分法)_opencv 背景差分-程序员宅基地

文章浏览阅读1.4w次,点赞7次,收藏105次。 背景提取是在视频图像序列中提取出背景,背景就是场景中静止不动的景物。因为摄像机不动,因此图像中的每个像素点都有一个对应的背景值,在一段时间内,这个背景值是比较固定的。背景提取的目标就是根据视频图像序列,找出图像中每一点的背景值。 背景提取有很多算法。针对静止摄像机的帧间差分法、高斯背景差分法,还有针对运动摄像机的光流法等。 一. 帧间差分法相邻帧间图像差分思想:检测出了相邻两帧..._opencv 背景差分

磁共振计算机都是量子技术吗,IBM利用磁共振对单个原子成像,未来用于量子计算机...-程序员宅基地

文章浏览阅读105次。导读:虽然并非是最漂亮的科学设备,这台显微镜能够利用磁共振技术对单个原子成像凤凰网科技讯北京时间 7 月 2 日消息,随着我们的设备尺寸越来越小,越来越复杂,用来制造它们的材料也越来越复杂。这意味着我们必须仔细地开发设计新材料。不同的显微技 ......虽然并非是最漂亮的科学设备,这台显微镜能够利用磁共振技术对单个原子成像凤凰网科技讯北京时间 7 月 2 日消息,随着我们的设备尺寸越来越小,越来越..._核磁共振中运用了量子科技吗

随便推点

solr总结详解教程_key=solr.jvm%3aos.processcpuload&key=solr.node%3ac-程序员宅基地

文章浏览阅读5.6k次,点赞2次,收藏15次。Solr调研总结开发类型全文检索相关开发Solr版本4.2文件内容本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示、拼写检查、搜索建议、分组统计、拼音检索等功能的使用方法。版本作者/修改人日期V1.0gzk2013-06-04 1. Solr 是什么?Solr它是一种开放源码的、基于 Lucene..._key=solr.jvm%3aos.processcpuload&key=solr.node%3acontainer.fs.coreroot.usabl

cocos2d-x ndk adt mac 路径配置_cocos2dx 怎么设置sdk 路径-程序员宅基地

文章浏览阅读1.4k次。export PATH=/bin:/sbin:/usr/local/mysql/binexport PATH=$PATH:/Applications/MacVim-snapshot-68export PATH=$HOME/.rbenv/bin:$PATHexport CLICOLOR=1export LSCOLORS=GxFxCxDxBxegedabagacedexpo_cocos2dx 怎么设置sdk 路径

linux usb声卡 无声音,记一次解决在Ubuntu 18.04下声卡没有声音的经历-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏5次。电脑的主板是华硕的B150-PLUS,声卡是瑞昱的intel ALC 887,从Ubuntu 16.04升级到Ubuntu 18.04系统,使用一切正常,但是声卡没有声音。经过查找资料,得出了解决该问题的答案,如果你的Ubuntu 18.04系统也没有声音,可以参考下方的解决方案处理。解决方案1.在Ubuntu 18.04终端中运行以下命令:sudo apt-get remove --purge ..._alc887声卡驱动ubuntu

微信支付-电商收付通开发-02.获取平台证书与图片上传_java实现微信电商收付通get 获取平台证书列表-程序员宅基地

文章浏览阅读3.4k次。文章目录1. 配置类与工具类1.1 okhttp3工具类1.2 微信支付配置类1.3 微信支付工具类2. 获取平台证书与图片上传接口3. 参考链接1. 配置类与工具类引入gradle依赖subprojects { dependencies { ... //微信的apache-httpclient扩展 compile 'com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.1.5' _java实现微信电商收付通get 获取平台证书列表

queue()方法_queue()-程序员宅基地

文章浏览阅读2.5k次。queue()方法是一个遍历方法,作用是显示或操作在匹配元素上执行的函数队列。刚开始使用这个方法是用它来遍历匹配元素以使用它带有的回调函数来对匹配元素进行操作,在了解到这个方法真正的作用后有点杀鸡用牛刀的感觉。他真正的作用是操作匹配元素上执行的函数队列,其中一点就是在队列末端中放置一个新函数,这点作用正好就被我用来杀鸡了。请注意,当通过 .queue() 添加函数时,我们应当确保最终调用了..._queue()

python3---对windows系统的文件夹与文件属性为隐藏、只读等。os.chdir、os.getcwd、win32api、win32con_python 设置文件 隐藏 只读属性-程序员宅基地

文章浏览阅读4.2k次。python3—对windows系统的文件夹与文件隐藏 参考:python3.4对应下载https://www.jb51.net/softs/416131.html确认是否安装成功,如下:C:\Python34>pythonPython 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (In..._python 设置文件 隐藏 只读属性

推荐文章

热门文章

相关标签