问题:
failed command: READ FPDMA QUEUED
failed command: WRITE FPDMA QUEUED
1、关闭NCQ
vim /boot/efi/EFI/centos/grub.cfg
添加libata.force=noncq到启动项中;
linuxefi /vmlinuz-3.10.0-957.21.3.el7.x86_64 root=UUID=2b1d8b5c-9ca4-4c87-a8b4-5db40d08ac4f ro
crashkernel=auto biosdevname=0 net.ifnames=0 console=ttyS0,115200 LANG=en_US.UTF-8 libata.force=noncq
2、重启
reboot
3、延伸1
SCSI/SATA information: [root@liberty ~]# lsscsi -kk [0:0:0:0] disk ATA WDC WD10EURX-73F 01.0 /dev/sda [1:0:0:0] disk ATA WDC WD30EFRX-68A 80.0 /dev/sdb [4:0:0:0] disk ATA WDC WD5003ABYX-0 01.0 /dev/sdc [5:0:0:0] cd/dvd Optiarc DVD RW AD-5280S 1.01 /dev/sr0 [6:0:0:0] disk hp USB Flash Drive 3276 /dev/sdd Controller: [root@liberty ~]# lspci | grep SATA 00:1f.2 SATA controller: Intel Corporation 6 Series/C200 Series Chipset Family SATA AHCI Controller (rev 05)
4、延伸2
fsck -f /dev/sdc 磁盘修复 echo 1 > /sys/block/sdb/device/queue_depth 关闭对应磁盘NCQ特性 smartctl -a /dev/sdb |grep -i crc 检测CRC错误 cat /proc/scsi/scsi 查看磁盘信息 smartctl -a <device> 检查该设备是否已经打开SMART技术。 smartctl -s on <device> 如果没有打开SMART技术,使用该命令打开SMART技术。 smartctl -t short <device> 后台检测硬盘,消耗时间短; smartctl -t long <device> 后台检测硬盘,消耗时间长; smartctl -C -t short <device> 前台检测硬盘,消耗时间短; smartctl -C -t long <device> 前台检测硬盘,消耗时间长。其实就是利用硬盘SMART的自检程序。 smartctl -X <device> 中断后台检测硬盘。 smartctl -l selftest <device> 显示硬盘检测日志。 smartctl -l error <device> 显示硬盘错误汇总。 smartctl -i /dev/sda 确认硬盘是否打开了SMART支持。 smartctl -H /dev/sda 查看硬盘的健康状况。 smartctl -A /dev/sda 查看硬盘的详细信息 ls
read error rate 错误读取率:记录读取数据错误次数(累计),非0值表示硬盘已经或者可能即将发生坏道; throughput performance 磁盘吞吐量:平均吞吐性能(一般在进行了人工 Offline S.M.A.R.T. 测试以后才会有值。); spinup time 主轴电机到达要求转速时间(毫秒/秒); start/stop count 电机启动/停止次数(可以当作开机/关机次数,或者休眠后恢复,均增加一次计数。全新的硬盘应该小于10); reallocated sectors count 重分配扇区计数:硬盘生产过程中,有一部分扇区是保留的。当一些普通扇区读/写/验证错误, 则重新映射到保留扇区,挂起该异常扇区,并增加计数。随着计数增加,io性能骤降。 如果数值不为0,就需要密切关注硬盘健康状况;如果持续攀升,则硬盘已经损坏; 如果重分配扇区数超过保留扇区数,将不可修复; seek error rate 寻道错误率:磁头定位错误一次,则技术增加一次。如果持续攀升,则可能是机械部分即将发生故障; seek timer performance 寻道时间:寻道所需要的时间,越短则读取数据越快,但是如果时间增加,则可能机械部分即将发生故障; power-on time 累计通电时间:指硬盘通电时间累计值。(单位:天/时/分/秒。休眠/挂起不计入?新购入的硬盘应小于100hrs); spinup retry count 电机启动失败计数:电机启动到指定转速失败的累计数值。如果失败,则可能是动力系统产生故障; power cycle count 电源开关计数:每次加电增加一次计数,新硬盘应小于10次; g-sensor error rate 坠落计数:异常加速度(例如坠落,抛掷)计数——磁头会立即回到landing zone,并增加一次计数; power-off retract count 异常断电次数:磁头在断电前没有完全回到landing zone的次数,每次异常断电则增加一次计数; load/unload cycle count 磁头归位次数:指工作时,磁头每次回归landing zone的次数。(ps:流言说某个linux系统——不点名, 在使用电池时候,会不断强制磁头归为,而磁头归位次数最大值约为600k次,所以认为linux会损坏硬盘,实际上不是这样的); temperature 温度:没嘛好说的,硬盘温度而已,理论上比工作环境高不了几度。(sudo hddtemp /dev/sda) reallocetion event count 重映射扇区操作次数:上边的重映射扇区还记得吧?这个就是操作次数,成功的,失败的都计数。 成功好说,也许硬盘有救,失败了,也许硬盘就要报废了; current pending sector count 待映射扇区数:出现异常的扇区数量,待被映射的扇区数量。 如果该异常扇区之后成功读写,则计数会减小,扇区也不会重新映射。读错误不会重新映射,只有写错误才会重新映射; uncorrectable sector count 不可修复扇区数:所有读/写错误计数,非0就证明有坏道,硬盘报废; SSD固态硬盘多出的Attributes 信息解释: 其中我们比较关注的有以下四点: 1、Media_Wearout_Indicator: 使用耗费,100为没有任何耗费; 表示SSD上NAND的擦写次数的程度,初始值为100,随着擦写次数的增加, 开始线性递减,递减速度按照擦写次数从0到最大的比例。一旦这个值降低到 1,就不再降了, 同时表示SSD上面已经有NAND的擦写次数到达了最大次数。这个时候建议需要备份数据,以及更换SSD。 上面的机器为099,按照100滴血算,目前只耗了1滴血 2、Reallocated_Sector_Ct: 出厂后产生的坏块个数, 初始值为100,如果有坏块,从1开始增加,每4个坏块增加1 这里offer的机器还没有任何坏块 3、Host_Writes_32MiB: 已写32MiB, 每写入65536个扇区raw value增加1。这个扇区还是个数量单位,512字节 比如:这块盘就是 1284966 * 65536 * 512 = 40155.1875 GB 注意到每个机器都有一块盘写的比较少,这块盘就是hotspare盘。 每台机器我们有7块ssd盘。其中6块盘做的raid 5,第7块盘做的hotspare。 4、Available_Reservd_Space: SSD上剩余的保留空间, 初始值为100,表示100%,阀值为10,递减到10表示保留空间已经不能再减少 backblaze 建议主要监控以下五个属性的 RAW_VALUE 的值: SMART 5 – Reallocated_Sector_Count. SMART 187 – Reported_Uncorrectable_Errors. SMART 188 – Command_Timeout. SMART 197 – Current_Pending_Sector_Count. SMART 198 – Offline_Uncorrectable. 如果发现该五项值中有大于0的情况,就说明该磁盘应该对它进行持续的关注了, 因为根据其经验这5项S.M.A.R.T.指标的增长表明即将发生磁盘驱动器故障。 smart参数详解: https://www.cnblogs.com/york-hust/p/3380928.html
badblocks命令可以检查磁盘装置中损坏的区块。执行该指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。 语法:badblocks [-svw][-b ][-o ][磁盘装置][磁盘区块数][启始区块] 参数: -b 指定磁盘的区块大小,单位为字节。 -o 将检查的结果写入指定的输出文件。 -s 在检查时显示进度。 -v 执行时显示详细的信息。 -w 在检查时,执行写入测试。 [磁盘装置] 指定要检查的磁盘装置。 [磁盘区块数] 指定磁盘装置的区块总数。 [启始区块] 指定要从哪个区块开始检查。 badblocks -s//显示进度 -v//显示执行详细情况 /dev/sda1 # badblocks -s -v /dev/sda 正在检查从 0 到 244198583的块 Checking for bad blocks (read-only test): ^C0.10% done, 0:04 elapsed Interrupted at block 272896 $badblocks -s//显示进度 -w//以写去检测 -v//显示执行详细情况 /dev/sda2 # badblocks -w -s -v /dev/sda1 Checking for bad blocks in read-write mode From block 0 to 25607577 Testing with pattern 0xaa: ^C0.73% done, 0:03 elapsed 注意,不能以写的方式检测已经挂载的硬盘 使用hdparm测试 测试硬盘读写速度 # hdparm -Tt /dev/sda /dev/sda: Timing cached reads: 1918 MB in 2.00 seconds = 959.62 MB/sec Timing buffered disk reads: 184 MB in 3.00 seconds = 61.26 MB/sec hdparm可检测,显示与设定IDE或SCSI硬盘的参数。