failed command: READ FPDMA QUEUED

问题:

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硬盘的参数。

 

posted on 2020-11-26 15:01  裸睡的猪  阅读(9790)  评论(0编辑  收藏  举报