問題:
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硬盤的參數。