Page 1 sur 1

Remplacer un disque SATA à chaud (hot-plug)

Publié : 01 déc. 2020, 21:15
par phil
Retrait d'un disque
Avant de pouvoir débrancher physiquement un disque SATA, il faut :
  • Démonter toutes les partitions du disque
  • Identifier l'emplacement du disque dans la chaine SATA
  • Indiquer au système qu'on enlève un disque
Afin d'identifier l'emplacement du disque, on peut utiliser la commande :

Code : Tout sélectionner

sudo lshw -c storage -c disk
Cette commande retournera toutes les informations matérielles sur le stockage et les disques. Il faut trouver le bloc correspondant au disque que l'on souhaite retirer, par exemple en trouvant son nom de device grâce à la ligne "logical name". Ensuite, la ligne "bus info" nous donnera l'emplacement physique du disque.
Par exemple, sur mon système actuel, j'obtiens ceci :

Code : Tout sélectionner

physical id: 0.0.0
bus info: scsi@2:0.0.0    # <host>:<physical id>
logical name: /dev/sde
Ce qui signifie que mon disque sde est sur le host SATA 2, et que son ID physique est 0.0.0.
On va donc aller dans /sys/class/scsi_host/host<n° de host>
A partir de là, les commandes sont à faire en tant que root (sudo n'a pas suffit chez moi).
On peut également garder une fenêtre de monitoring sur les logs du noyau :

Code : Tout sélectionner

tail -f /var/log/kern.log
On peut vérifier que l'on a bien un fichier permettant de signaler le retrait du disque (la commande est à adapter en fonction de l'emplacement du disque) :

Code : Tout sélectionner

ls -ahl /sys/class/scsi_host/host2/device/target2:0:0/2:0:0:0
Ce qui nous retournera, entre autres choses :

Code : Tout sélectionner

--w------- 1 root root 4,0K déc.   1 19:55 delete
Ce fichier permet de signaler la suppression d'un disque, en écrivant un 1 dedans :

Code : Tout sélectionner

echo "1" > /sys/class/scsi_host/host2/device/target2:0:0/2:0:0:0/delete
On voit dans les logs du noyau que le système supprime le disque et ses partitions.
On peut dès lors débrancher physiquement le disque.

Ajout d'un disque
On commence par connecter physiquement le disque en SATA (alimentation + données).
Il faut, là aussi, connaître le host sur lequel on connecte le nouveau disque. Dans le cadre du remplacement de disque, on admettra que l'on utilisera le même que celui dont on a retiré le disque ci-dessus (host 2 dans cet exemple).
Cette fois-ci, on va envoyer une commande au bus SCSI pour lui demander d'exécuter un scan (attention au numéro de host) :

Code : Tout sélectionner

echo "- - -" >/sys/class/scsi_host/host2/scan
Quelques explications : les 3 « – » sont en fait normalement les numéros de bus de channel et de lun qui doivent être scannés. Ces numéros viennent du monde SCSI où l’on pouvait avoir plusieurs périphériques par canal. Ainsi, on pouvait rescanner un seul canal ou un seul lun en faisant :

echo "1 3 2" >/sys/class/scsi_host/host0/scan

pour rescanner le bus 1 channel 3 lun 2 de l’hôte 0…

En SATA c’est bien souvent inutilisé, donc nous utilisons « – – – » qui demande… de tout rescanner…
Si le disque a bien été branché, les logs du noyau indiquent que ce dernier a bien détecté le disque, qui est donc disponible à l'utilisation.
Sources :
https://www.octopuce.fr/comment-changer ... ous-linux/