Remplacer un disque SATA à chaud (hot-plug)
Publié : 01 déc. 2020, 21:15
Retrait d'un disque
Avant de pouvoir débrancher physiquement un disque SATA, il faut :
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 :
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 :
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) :
Ce qui nous retournera, entre autres choses :
Ce fichier permet de signaler la suppression d'un disque, en écrivant un 1 dedans :
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) :
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
Code : Tout sélectionner
sudo lshw -c storage -c disk
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
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
Code : Tout sélectionner
ls -ahl /sys/class/scsi_host/host2/device/target2:0:0/2:0:0:0
Code : Tout sélectionner
--w------- 1 root root 4,0K déc. 1 19:55 delete
Code : Tout sélectionner
echo "1" > /sys/class/scsi_host/host2/device/target2:0:0/2:0:0:0/delete
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
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.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…