Mettre à jour un firmware NVME

2020-03-15 06:45:48+01:00

Comment mettre à jour le firmware d'un SSD Toshiba sous Linux.

Update 2 (25/08/2020) : J'ai trouvé via ce guide pour hackintosh qu'il était possible de formatter le disque NVME pour avoir des secteurs de 512 octets ou de 4 kilo-octets. J'ai fait un reformattage pour avoir des secteur de 4 kilo-octets et depuis les performances sont redevenues normales ! Il suffit de faire :

$ nvme-format --lbaf=1 /dev/nvme0n1

L'indice indique la taille des secteurs, reportées par smartctl :

$ smartctl -a /dev/nvme0n1
Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
0 +     512       0         0
1 -    4096       0         0

ATTENTION, cela efface l'intégralité du disque ! Il n'est évidemment pas très sûr d'utiliser un SSD qui a déjà émis des signes d'instabilité (en perf pas en perte de données mais bon ...), cependant il se porte comme un charme depuis deux mois que je l'ai reformaté :-).

Update 1 (26/04/2020) : La mise à jour n'a fait que prolonger de quelques semaines la durée de vie du SSD. Aucune donnée n'a été perdue, ce sursis a au moins laisser le temps de vérifier le disque dur ! Il est néanmoins dangereux de mettre un jour un firmware, qui plus est sur un disque défectueux.

TLDR:

$ 7z x Toshiba\ KXG50ZNV256G_KXG50ZNV512G_KXG50ZNV1T02\ 7YXTM_ZPE.exe
$ 7z x XG5-AADA4107-64bit.exe
$ sudo nvme fw-download /dev/nvme0n1 --fw=AADA4107.sig
$ sudo nvme fw-commit /dev/nvme0n1 --slot=0 --action=1
$ reboot

Le Dell XPS 9360 saccade de plus en plus. Il semble que ce soit dû au SSD.

Changer le scheduler d'I/O de none à mq-deadline puis kyber réduit significativement la latence. Suffisamment pour naviguer le web mais pas pour regarder des vidéos.

Une recherche sur ce modèle de SSD révèle qu'il existe des mises à jours de son firmware : c'est un Toshiba KXG50ZNV256G avec le firmware AADA4102. Un tour sur le site de Dell permet de télécharger le firmware AADA4107 :

[Mise à jour du micrologiciel de disque SSD Toshiba pour KXG50ZNV256G](https://www.dell.com/support/home/fr/fr/frbsdt1/drivers/driversdetails?driverid=7yxtm)

Il n'est pas question de Linux sur ce site, heureusement les outils en ligne de commandes nvme-cli vont permettre de mettre à jour le firmware (un peu léger pour un portable vendu avec un premium pour bénéficier de Linux).

Obtenir le firmware

  1. Télécharger l’exécutable contenant la mise à jour

  2. Extraire le fichier "AADA4107.sig", ça a marché pour moi en ouvrant l’exécutable avec file-roller (le gestionnaire d'archives de gnome), puis en ouvrant le second exécutable contenu dedans. Vous pourrez vous en sortir aussi avec 7z:

    $ 7z x Toshiba\ KXG50ZNV256G_KXG50ZNV512G_KXG50ZNV1T02\ 7YXTM_ZPE.exe
    $ 7z x XG5-AADA4107-64bit.exe
    

Vous devez maintenant avoir le fichier "AADA4107.sig" :

$ stat AADA4107.sig 
  File: AADA4107.sig
  Size: 1601536

(Toshiba, Dell : dans un monde meilleur, pourquoi ne pas nous laisser directement télécharger ce fichier ?)

Charger le firmware dans le SSD

Une petite introduction à l'outil nvme-cli:

La mise à jour se fait en deux étapes : on charge le firmware avec fw-download et on l'active avec fw-commit.

$ nvme fw-download /dev/nvme0n1 --fw=AADA4107.sig
$ nvme fw-commit /dev/nvme0n1 --slot=0 --action=1

Il n'y a plus qu'à rebooter l'ordinateur et fw-log devrait vous indiquer que la version AADA4107 est maintenant installée :

$ nvme fw-log /dev/nvme0n1
Firmware Log for device:nvme0n1
afi  : 0x1
frs1 : 0x3730313441444141 (AADA4107)
frs2 : 0x3230313441444141 (AADA4102)