Western Digital SN640 Firmware Updates R1110021 und R1410004

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Western Digital hat für SN640 NVMe SSDs die Firmware Updates R1110021 (SE/ISE Variante) und R1410004 (TCG Variante) veröffentlicht. Die Updates enthalten als Maintenance Release einerseits herkömmliche laufende Verbesserungen. Zudem enthalten die Firmware Updates auch einen Bugfix für Timeout Fehler, die zuvor in seltenen Fällen auftreten konnten.

Problembeschreibung

Mit früheren Firmware Versionen kann es in seltenen Fällen zu Timeouts der SSD kommen, die zu einem Ausfall der SSD führen können. Der folgende Log-Ausschnitt eines Proxmox Systems mit Ceph zeigt einen solchen Fall:

[...]
Mar 23 23:48:43 node03 kernel: nvme nvme2: I/O 512 QID 23 timeout, aborting
Mar 23 23:48:43 node03 kernel: nvme nvme2: I/O 513 QID 23 timeout, aborting
Mar 23 23:48:43 node03 kernel: nvme nvme2: I/O 514 QID 23 timeout, aborting
Mar 23 23:48:43 node03 kernel: nvme nvme2: I/O 515 QID 23 timeout, aborting
Mar 23 23:48:49 node03 ceph-osd[3189]: 2022-03-23T23:48:49.471+0100 7f9d339b1700 -1 osd.11 6687 heartbeat_check: no reply from 192.168.75.92:6808 osd.10 since back 2022-03-23T23:48:23.068194+0100 front 2022-03-23T23:48:23.068173+0100 (oldest deadline 2022-03-23T23:48:48.967935+0100)
Mar 23 23:48:50 node03 pvestatd[3341]: VM 213 qmp command failed - VM 213 qmp command 'query-proxmox-support' failed - got timeout
Mar 23 23:48:51 node03 pvestatd[3341]: status update time (6.489 seconds)
Mar 23 23:48:55 node03 pmxcfs[2768]: [dcdb] notice: data verification successful
Mar 23 23:49:14 node03 kernel: nvme nvme2: I/O 512 QID 23 timeout, reset controller
Mar 23 23:49:45 node03 kernel: nvme nvme2: I/O 0 QID 0 timeout, reset controller
Mar 23 23:50:25 node03 kernel: nvme nvme2: Device not ready; aborting reset, CSTS=0x1
Mar 23 23:50:25 node03 kernel: nvme nvme2: Abort status: 0x371
Mar 23 23:50:25 node03 kernel: nvme nvme2: Abort status: 0x371
Mar 23 23:50:25 node03 kernel: nvme nvme2: Abort status: 0x371
Mar 23 23:50:25 node03 kernel: nvme nvme2: Abort status: 0x371
Mar 23 23:50:35 node03 kernel: nvme nvme2: Device not ready; aborting reset, CSTS=0x1
Mar 23 23:50:35 node03 kernel: nvme nvme2: Removing after probe failure status: -19
Mar 23 23:50:46 node03 ceph-osd[3176]: 2022-03-23T23:50:46.250+0100 7f6ac4847700 -1 bdev(0x56336572e400 /var/lib/ceph/osd/ceph-10/block) _aio_thread got r=-5 ((5) Input/output error)
Mar 23 23:50:46 node03 ceph-osd[3176]: 2022-03-23T23:50:46.250+0100 7f6abd029700 -1 bdev(0x56336572ec00 /var/lib/ceph/osd/ceph-10/block) _sync_write sync_file_range error: (5) Input/output error
Mar 23 23:50:46 node03 ceph-osd[3176]: 2022-03-23T23:50:46.250+0100 7f6ac3044700 -1 bdev(0x56336572ec00 /var/lib/ceph/osd/ceph-10/block) _aio_thread got r=-5 ((5) Input/output error)
Mar 23 23:50:46 node03 ceph-osd[3176]: 2022-03-23T23:50:46.250+0100 7f6ac684b700 -1 osd.10 6687 get_health_metrics reporting 153 slow ops, oldest is osd_op(client.23432791.0:11226906 4.4c 4:3305dcbc:::rbd_data.fa14dd8c319a13.0000000000003910:head [sparse-read 0~4194304] snapc 0=[] ondisk+read+known_if_redirected e6687)
Mar 23 23:50:46 node03 kernel: nvme nvme2: Device not ready; aborting reset, CSTS=0x1
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 1308340248 op 0x1:(WRITE) flags 0x8800 phys_seg 32 prio class 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 1852155432 op 0x0:(READ) flags 0x0 phys_seg 32 prio class 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 2743651928 op 0x0:(READ) flags 0x0 phys_seg 32 prio class 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 1029435456 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
Mar 23 23:50:46 node03 kernel: nvme2n1: detected capacity change from 3750748848 to 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 1446553816 op 0x1:(WRITE) flags 0x800 phys_seg 2 prio class 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 690010880 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 1424451176 op 0x1:(WRITE) flags 0x8800 phys_seg 1 prio class 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 3461494728 op 0x1:(WRITE) flags 0x8800 phys_seg 3 prio class 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 1424458824 op 0x1:(WRITE) flags 0x8800 phys_seg 1 prio class 0
Mar 23 23:50:46 node03 kernel: blk_update_request: I/O error, dev nvme2n1, sector 1424458984 op 0x1:(WRITE) flags 0x8800 phys_seg 1 prio class 0
Mar 23 23:50:46 node03 kernel: Buffer I/O error on dev dm-1, logical block 180818971, lost async page write
Mar 23 23:50:46 node03 kernel: Buffer I/O error on dev dm-1, logical block 180818972, lost async page write
[...]

Bei einem Neustartversuch kann es zu folgenden Fehlern kommen:

Beispiel für eine korrupte NVMe unter Proxmox

Lösung

Eine betroffene SSD kann durch Formatieren wiederhergestellt werden - siehe dazu Abschnitt SSD durch Formatieren wiederherstellen. Anschließend muss die Firmware aktualisiert werden, damit ein derartiges Problem nicht mehr auftritt. Die folgenden Firmware Versionen beheben das Problem, wir empfehlen das Update bei allen SN640 SSDs mit älteren Firmware Versionen einzuspielen:

Typ Firmware Version Veröffentlicht Download
Western Digital SN640 TCG R1410004 02/2022 hier
Western Digital SN640 SE R1110021 04/2021
Western Digital SN640 ISE R1110021 04/2021 hier

Das Firmware Update hat keine Auswirkungen auf die in der NVMe SSD gespeicherten Daten.

Firmware aktualisieren

Linux

Unter Linux bietet sich das Tool nvme-cli zum aktualisieren der Firmware an. Das Tool kann unter Debian und Ubuntu über den Paketmanager installiert werden. Die Installationsanleitung für weitere unterstützte Distributionen finden Sie auf GitHub. Die neue Firmware kann mit folgenden Befehlen eingespielt werden:

apt-get install nvme-cli
nvme fw-download /dev/nvmeXY --fw=FW.vpkg
nvme fw-commit /dev/nvmeXY -a 1

Die neue Firmware wird erst noch einen reboot des Servers aktiv.

Beispiel unter Proxmox

root@pve:~# apt-get install nvme-cli
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  nvme-cli
0 upgraded, 1 newly installed, 0 to remove and 86 not upgraded.
Need to get 0 B/247 kB of archives.
After this operation, 570 kB of additional disk space will be used.
Selecting previously unselected package nvme-cli.
(Reading database ... 46034 files and directories currently installed.)
Preparing to unpack .../nvme-cli_1.7-1_amd64.deb ...
Unpacking nvme-cli (1.7-1) ...
Setting up nvme-cli (1.7-1) ...
Processing triggers for man-db (2.8.5-2) ...

root@pve:~# nvme fw-download /dev/nvme0 --fw=DCSN640_GR_R1410004.vpkg
Firmware download success

root@pve:~# nvme fw-commit /dev/nvme0 -a 1
Success committing firmware action:1 slot:0

Firmware überprüfen

Nach dem reboot des Server kann mit "nvme list" geprüft werden, ob die neue Firmware aktiv ist.

root@jrag-pve-node02:~# nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev  
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     A06BFXYZ             WUS4BB019D7P3E4                          1           1.92  TB /   1.92  TB    512   B +  0 B   R1410004
/dev/nvme1n1     A06BFXYZ             WUS4BB019D7P3E4                          1           1.92  TB /   1.92  TB    512   B +  0 B   R1410004
/dev/nvme2n1     A06F1XYZ             WUS4BB019D7P3E4                          1           1.92  TB /   1.92  TB    512   B +  0 B   R1410004
/dev/nvme3n1     A06F1XYZ             WUS4BB019D7P3E4                          1           1.92  TB /   1.92  TB    512   B +  0 B   R1410004

Linux Skript

Im GitHub Repository SN640-FW-Update der Thomas-Krenn.AG wird ein Bash Skript zur Verfügung gestellt, welches genutzt werden kann um die Firmware bei allen SN640 NVMe SSDs zu aktualisieren. Das Skript erkennt anhand der Firmware Revision um welchen Typen es sich handelt bzw. ob eine ältere Firmware installiert ist.

root@pve:~# ./FW-Update_SN640.sh 
Installiere benoetigte Programme (unzip, nvme-cli).
nvme-cli is already the newest version (1.7-1).
0 upgraded, 0 newly installed, 0 to remove and 86 not upgraded.
Lade Firmware Dateien herunter
Download abgeschlossen


########################################
#Starte Updatevorgang - 5 NVMe gefunden#
########################################

------------------------------------------------------------------------------
Firmware bzw. NVMe ist nicht bekannt. Installierte FW: 0105
Verbleibende NVMe: 4

------------------------------------------------------------------------------
Firmware von /dev/nvme3n1 ist aktuell: R1410004
Verbleibende NVMe: 3

------------------------------------------------------------------------------
Firmware muss fuer /dev/nvme2n1 aktualisiert werden. Installierte FW: R1410002
Success activating firmware action:1 slot:0, but firmware requires conventional reset
Update auf /dev/nvme2n1 abgeschlossen
Verbleibende NVMe: 2
[...]
####################################################################
#Updates abgeschlossen. Aenderungen werden erst nach Neustart aktiv#
####################################################################

RAID-Controller / HBA

Wichtig: Bei veralteter Controller Firmware kann es zu Problemen während des Uploads/Aktivieren der Firmware kommen und sollte bei bedarf aktualisiert werden.

Ist die NVMe SSD an einem MegaRAID-Controller oder HBA von Broadcom angeschlossen, kann diese mit dem Tool storcli auf den aktuellen Firmwarestand gebracht werden. Dazu muss zuerst die Enclosure ID sowie der Slot ausfindig gemacht werden, damit die Datenträger angesprochen werden können. Hinweis: Bei Servern mit mehreren Controllern muss ggf. Parameter /c0 auf /c1, /c2 usw. angepasst werden.

storcli /c0 /eall /sall show

Es wird eine Liste aller angeschlossener Datenträger ausgegeben. Am Anfang der Zeile steht die Enclosure ID, gefolgt nach einen Doppelpunkt von der Slot ID. Im Beispiel würde die erste NVMe mit "98:4" auf Enclosure 98 und Slot 4 verweisen.

----------------------------------------------------------------------------------------------------
EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type
----------------------------------------------------------------------------------------------------
98:4 4 Onln 0 1.745 TB NVMe SSD Y N 4 KB WUS4BB019D7P3E4 U -
98:6 2 Onln 0 1.745 TB NVMe SSD Y N 4 KB WUS4BB019D7P3E4 U -
----------------------------------------------------------------------------------------------------

Nun kann der Update Prozess beginnen. Mit folgendem Befehl kann die Firmware auf die NVMe geladen werden:

storcli64 /cX/eXY/sX download src=/Pfad/zu/FW mode=E offline

Um diese zu aktivieren führen Sie folgenden Befehl aus:

storcli64 /cX/eXY/sX download mode=F offline

Die Parameter müssen an die zuvor ausgeben Werte angepasst werden:

eXY = Enclosure ID

sX = Slot ID

Beispiel

./storcli64 /c0/e98/s4 download src=/home/tk/DCSN640_GR_R1410004.vpkg mode=E offline
Starting microcode update .....please wait...
Flashing PD image .....please wait...
CLI Version = 007.2106.0000.0000 Feb 28, 2022
Operating system = Linux 5.4.0-113-generic
Controller = 0
Status = Success
Description = Firmware Download Succeeded.

./storcli64 /c0/e98/s4 download mode=F offline
Starting microcode update .....please wait...
Flashing PD image .....please wait...
CLI Version = 007.2106.0000.0000 Feb 28, 2022
Operating system = Linux 5.4.0-113-generic
Controller = 0
Status = Success
Description = Firmware Download Succeeded.

Unter gewissen Bedingungen kann es beim aktivieren der Firmware zu folgender Fehlermeldung kommen:

Description = Firmware Download Failed.

Detailed Status :
===============

-----------------------------------------------------
Drive Status ErrCd ErrMsg
-----------------------------------------------------
/c0/e98/s4 Failure 12 Failed in standard Inquiry.
-----------------------------------------------------

Diese Meldung ist unproblematisch. Die neue Firmware ist im Regelfall bereits aktiv. Sie können dies mit dem Tool wdckit-raid überprüfen:

wdckit show

wdckit Version 2.12.1.0
Copyright (C) 2019-2022 Western Digital Technologies, Inc.
Western Digital ATA/SCSI/NVMe command line utility.
06/17/2022 11:15:02

DUT Device Port Capacity State BootDevice Serial Number Model Number Firmware Lnk Spd Cap/Cur
--- -------------- ---- ------------- ------------- ---------- -------------------------------- -------------------------- -------- ---------------------------
0 /dev/sda SCSI 1.91 TB unretrievable No 00cba433812b133f2a40b19507b26200 MR9460-8i 5.21 unretrievable/unretrievable
1 /dev/sdb SATA 480 GB Good Yes S1YJNYAG700549 SAMSUNG MZ7LM480HCHP-00003 GXT3003Q Gen3/Gen3
2 /dev/sg0 SCSI unretrievable unretrievable No 300062B20709B140 VirtualSES 03 unretrievable/unretrievable
3 megaraid:0.0.2 NVMe 1.92 TB Good No A06A3718 WUS4BB019D7P3E4 R1410004 unretrievable/unretrievable
4 megaraid:0.0.4 NVMe 1.92 TB Good No A06BFA7F WUS4BB019D7P3E4 R1410004 unretrievable/unretrievable

Windows

Unter Windows Betriebssystemen kann die neue Firmware der NVMe mit dem von Western Digital entwickelten Tool "wdckit" eingespielt werden. Das Tool erhalten Sie auf Nachfrage bei unserem Support.

wdckit update diskX -z -f FW.vpkg 
wdckit update diskX z -a -s 2 -c 1

Die neue Firmware wird erst noch einen reboot des Servers aktiv. Mit

wdckit show

kann abschließend geprüft werden, ob die neue Firmware Version aktiv ist.

SSD durch Formatieren wiederherstellen

Ist der beschriebene "Format Corrupt" bei einer NVMe eingetreten, kann diese durch eine Formatierung des Namespaces wieder einsatzbereit gemacht werden.

Hinweis: Durch das Formatieren des Namespaces werden keine Daten wiederhergestellt. Diese müssen durch ein Backup/Rebuild usw. erneut aufgespielt werden.
nvme format /dev/nvmeXY

Beispiel

root@pve:~# nvme format /dev/nvme0
Success formatting namespace:ffffffff

Ist die Formatierung erfolgreich, werden im dmesg Log nach dem "rescanning" keine weiteren I/O errors mehr angezeigt. Die NVMe kann wieder benutzt und in das System eingebunden werden.

[...]
[  110.099335] blk_update_request: I/O error, dev nvme0n1, sector 0 op 0x0:(READ) flags 0x0 phys_seg 10 prio class 0
[  119.176576] blk_update_request: I/O error, dev nvme0n1, sector 0 op 0x0:(READ) flags 0x0 phys_seg 32 prio class 0
[  119.223403] blk_update_request: I/O error, dev nvme0n1, sector 0 op 0x0:(READ) flags 0x0 phys_seg 17 prio class 0
[  128.716407] nvme nvme0: rescanning namespaces.


Foto Florian Sebald.jpg

Autor: Florian Sebald

Florian Sebald ist seit 2018 bei Thomas-Krenn tätig und schloss im Technischen Support seine Ausbildung zum Fachinformatiker Systemintegration ab. Neben seinen Tätigkeiten im Support spezialisiert sich Florian auf das Thema VMware.


Das könnte Sie auch interessieren

Drive-Resize von Western Digital NVME SSDs
Western Digital CL SN720 M.2 NVMe SSD
Western Digital SN640 TCG U.2 NVMe SSDs