TUTO : Remplacer un disque défectueux sur SERVERware
Si un des disques de votre SERVERware tombe en panne, zpool sera dans l’état : DEGRADED, sur le serveur primaire.
zpool status # zpool status pool: NETSTOR state: DEGRADED status: One or more devices are faulted in response to persistent errors. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the faulted device, or use 'zpool clear' to mark the device repaired. scan: scrub repaired 0 in 0h0m with 0 errors on Tue Dec 6 15:10:59 2016 config: NAME STATE READ WRITE CKSUM NETSTOR DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 SW3-NETSTOR-SRV1-1 ONLINE 0 0 0 SW3-NETSTOR-SRV2-1 FAULTED 3 0 0 too many errors errors: No known data errors Tout d’abord, vous devez vos assurer que le disque endommagé se trouve sur un serveur secondaire et non primaire.
dans ce cas, vous pouvez le découvrir à partir de la ligne ci-dessus :
SW3-NETSTOR-SRV2-1 FAULTED
SRV2 cela signifie que le serveur n°2 a un disque endommagé.
Si c’est le cas, vous pouvez passer à l’étape suivante.
Si le disque endommagé se trouve sur le serveur primaire SRV1, vous devez d’abord effectuer une prise de contrôle manuelle et le basculer sur le serveur secondaire.
Pour le faire manuellement, connectez-vous au serveur secondaire et exécutez la commande suivante :
killall -SIGUSR1 sysmonit Ensuite, vous devrez remplacer physiquement le disque endommagé dans le serveur.
Dans le retour de la commande zpool status, vous pouvez voir que SW3-NETSTOR-SRV2-1 est corrompu, par exemple :
SW3-NETSTOR-SRV2-1 FAULTED 3 0 0 too many errors Si c’est le cas, vous devez remplacer le disque étiqueté SW3-NETSTOR-SRV2-1 par un nouveau et l’ajouter au miroir zpool.
Tout d’abord, retirez physiquement le disque défectueux du serveur et remplacez-le par un nouveau disque.
Après le remplacement, vous devriez voir un nouveau disque dans le répertoire /dev/disk/by-id/ (exemple sur la ligne 15) :
# ls -lah /dev/disk/by-id total 0 drwxr-xr-x 2 root root 480 Srp 27 08:57 . drwxr-xr-x 7 root root 140 Srp 27 08:13 .. lrwxrwxrwx 1 root root 9 Srp 27 08:13 ata-INTEL_SSDSC2CW060A3_CVCV308402M3060AGN -> ../../sde lrwxrwxrwx 1 root root 10 Srp 27 08:13 ata-INTEL_SSDSC2CW060A3_CVCV308402M3060AGN-part1 -> ../../sde1 lrwxrwxrwx 1 root root 10 Srp 27 08:13 ata-INTEL_SSDSC2CW060A3_CVCV308402M3060AGN-part2 -> ../../sde2 lrwxrwxrwx 1 root root 10 Srp 27 08:13 ata-INTEL_SSDSC2CW060A3_CVCV308402M3060AGN-part9 -> ../../sde9 lrwxrwxrwx 1 root root 9 Srp 27 08:13 ata-ST31000520AS_5VX0BZN0 -> ../../sda lrwxrwxrwx 1 root root 10 Srp 27 08:13 ata-ST31000520AS_5VX0BZN0-part1 -> ../../sda1 lrwxrwxrwx 1 root root 9 Srp 27 08:13 ata-WDC_WD10JFCX-68N6GN0_WD-WX61A465TH1Y -> ../../sdc lrwxrwxrwx 1 root root 10 Srp 27 08:13 ata-WDC_WD10JFCX-68N6GN0_WD-WX61A465TH1Y-part1 -> ../../sdc1 lrwxrwxrwx 1 root root 9 Srp 27 08:13 ata-WDC_WD10JFCX-68N6GN0_WD-WX81EC512Y4H -> ../../sdd lrwxrwxrwx 1 root root 10 Srp 27 08:13 ata-WDC_WD10JFCX-68N6GN0_WD-WX81EC512Y4H-part1 -> ../../sdd1 lrwxrwxrwx 1 root root 9 Srp 27 08:57 ata-WDC_WD10JFCX-68N6GN0_WD-WXK1E6458WKX -> ../../sdb lrwxrwxrwx 1 root root 9 Srp 27 08:13 wwn-0x10076999618641940481x -> ../../sdd lrwxrwxrwx 1 root root 10 Srp 27 08:13 wwn-0x10076999618641940481x-part1 -> ../../sdd1 lrwxrwxrwx 1 root root 9 Srp 27 08:13 wwn-0x11689569317835657217x -> ../../sdc lrwxrwxrwx 1 root root 10 Srp 27 08:13 wwn-0x11689569317835657217x-part1 -> ../../sdc1 lrwxrwxrwx 1 root root 9 Srp 27 08:57 wwn-0x11769037186453098497x -> ../../sdb lrwxrwxrwx 1 root root 9 Srp 27 08:13 wwn-0x12757853320186451405x -> ../../sde lrwxrwxrwx 1 root root 10 Srp 27 08:13 wwn-0x12757853320186451405x-part1 -> ../../sde1 lrwxrwxrwx 1 root root 10 Srp 27 08:13 wwn-0x12757853320186451405x-part2 -> ../../sde2 lrwxrwxrwx 1 root root 10 Srp 27 08:13 wwn-0x12757853320186451405x-part9 -> ../../sde9 lrwxrwxrwx 1 root root 9 Srp 27 08:13 wwn-0x7847552951345238016x -> ../../sda lrwxrwxrwx 1 root root 10 Srp 27 08:13 wwn-0x7847552951345238016x-part1 -> ../../sda1 Maintenant que vous disposez d’un nom de périphérique en bloc, vous pouvez créer une table, une partition et préparer le lecteur pour son utilisation.
Pour créer une table de partition, utilisez parted :
parted /dev/ --script -- mktable gpt Créez un nouveau libellé :
IMPORTANT : le libellé doit être nommé dans le format suivant : SW3-NETSTOR-SRVx-y.
Où “SRVx” correspond au numéro du serveur et “-y” au numéro du disque.
Ainsi, dans notre exemple (SW3-NETSTOR-SRV2-1) :
- SW3-NETSTOR-SRV2 – c’est le disque virtuel sur le SERVEUR 2
- 1 – est le numéro du disque (disque 1)
Ajoutez maintenant un libellé au nouveau disque.
Créez la partition avec le nom correspondant à notre partition défectueuse sur le serveur. Ce nom nous vient de ce qui précède :
SW3-NETSTOR-SRV2-1 FAULTED 3 0 0 too many errors
La commande dans ce cas sera :
parted /dev/ --script -- mktable ~# parted /dev/ --script -- mkpart "SW3-NETSTOR-SRV2-1" 1 -1 Vous avez maintenant ajouté une nouvelle partition et créé un libellé.
Pour remplacer le disque, vous pouvez utiliser les commandes sw-nvme qui sont énumérées ci-dessous :
| Commande | Description |
|---|---|
| sw-nvme list | Liste tous les dispositifs connectés avec /dev/nvme-fabrics |
| sw-nvme discover | Découvre tous les dispositifs exportés sur l’hôte distant avec l’IP et le port donnés |
| sw-nvme connect | Importe le dispositif distant à partir de l’IP, du port et du nqn donnés |
| sw-nvme disconnect | Supprime le dispositif importé de l’hôte |
| sw-nvme disconnect-all | Supprime tous les dispositifs importés de l’hôte |
| sw-nvme import | Pour le fichier donné au format JSON approprié, importe des dispositifs distants |
| sw-nvme reload-import | Pour le fichier donné au format JSON approprié, importe des dispositifs distants après avoir déconnecté toutes les importations actuelles |
| sw-nvme enable-modules | Cette commande active les modules noyau nécessaires pour NVMe/TCP |
| sw-nvme enable-namespace | Active l’espace de noms avec l’identifiant donné |
| sw-nvme disable-namespace | Désactive l’espace de noms avec l’identifiant donné |
| sw-nvme load | Pour le fichier donné au format JSON approprié, exporte des dispositifs distants |
| sw-nvme store | Si les dispositifs sont exportés manuellement, store sauvegarde la configuration système au format JSON approprié |
| sw-nvme clear | Cette commande supprime le dispositif exporté de la configuration système. Si spécifiée avec ‘all’, elle supprimera toutes les configurations |
| sw-nvme export | Pour le paramètre d’URL donné, exporte le dispositif sur le port avec le nqn |
| sw-nvme export-stop | Supprime le dispositif en cours d’exportation sur le port avec l’identifiant |
| sw-nvme reload-configuration | Pour le fichier donné au format JSON approprié, exporte des dispositifs distants après avoir supprimé toutes les exportations actuelles |
| sw-nvme replace-disk | Cette commande combine ‘clear all’ et reload-configuration pour faciliter la procédure de remplacement de disque sur SERVERware |
| sw-nvme expand-pool | Cette commande met à jour la configuration d’exportation et ajoute un nouvel espace de noms dans le sous-système sw-mirror pour SERVERware |
À présent, vous devrez effectuer le remplacement du disque ancien par le nouveau en utilisant la commande suivante :
sw-nvme replace-disk --old /dev/disk/by-id/old_disk_id --new /dev/disk/by-id/new_disk_id Pour trouver l’identifiant du disque ancien dans, utilisez la commande sw-nvme show.
Exemple (ligne 16) :
~#sw-nvme show { "config": "/sys/kernel/config/nvmet", "hosts": [ "3cc5c2aa47825e608570a938971bcd7c" ], "subsystems": { "sw-mirror": { "acl": [ "3cc5c2aa47825e608570a938971bcd7c" ], "namespaces": [ { "id": 1, "device": "/dev/disk/by-id/ata-KINGSTON_SA400S37120G_50026B73804B902A", "enabled": true } ], "allow_any_host": false } }, "ports": { "1": { "address": "1.1.1.31", "port": 4420, "address_family": "ipv4", "trtype": "tcp", "subsystems": "sw-mirror" } } } Maintenant que vous avez l’identifiant de l’ancien disque et du nouveau disque, votre commande pour le remplacement du disque sera :
~#sw-nvme replace-disk --old /dev/disk/by-id/ata-KINGSTON_SA400S37120G_50026B73804B902A --new /dev/disk/by-id/ata-WDC_WD10JFCX-68N6GN0_WD-WXK1E6458WKX Ceci marque la fin de la procédure sur le serveur secondaire.
Ensuite, sur le serveur principal, ajoutez un disque virtuel nouvellement créé au pool ZFS.
Ensuite, exécutez :
partprobe Vous pouvez voir l’état zpool :
~# zpool status pool: NETSTOR state: DEGRADED status: One or more devices are faulted in response to persistent errors. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the faulted device, or use 'zpool clear' to mark the device repaired. scan: scrub repaired 0 in 0h0m with 0 errors on Tue Dec 6 15:10:59 2016 config: NAME STATE READ WRITE CKSUM NETSTOR DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 SW3-NETSTOR-SRV1-1 ONLINE 0 0 0 SW3-NETSTOR-SRV2-1 FAULTED 3 0 0 too many errors errors: No known data errors Le résultat est le suivant :
SW3-NETSTOR-SRV2-1 présente un état FAULTED, indiquant un problème avec le disque secondaire.
Vous devez à présent procéder au remplacement du GUID de l’ancien disque par celui du nouveau, afin que zpool puisse identifier ce dernier.
Pour effectuer cette modification dans le zpool, vous devez d’abord identifier le nouveau GUID. Vous pouvez utiliser la commande zdb à cette fin (lignes 35 & 36) :
~# zdb NETSTOR: version: 5000 name: 'NETSTOR' state: 0 txg: 15 pool_guid: 14112818788567273316 errata: 0 hostname: 'HydraA-1' vdev_children: 1 vdev_tree: type: 'root' id: 0 guid: 14112818788567273316 children[0]: type: 'mirror' id: 0 guid: 17350955661294397060 metaslab_array: 34 metaslab_shift: 33 ashift: 12 asize: 1000164294656 is_log: 0 create_txg: 4 children[0]: type: 'disk' id: 0 guid: 11541101181530606692 path: '/dev/disk/by-partlabel/SW3-NETSTOR-SRV1-1' whole_disk: 1 create_txg: 4 children[1]: type: 'disk' id: 1 guid: 12365645279327980714 path: '/dev/disk/by-partlabel/SW3-NETSTOR-SRV2-1' whole_disk: 1 create_txg: 4 features_for_read: com.delphix:hole_birth com.delphix:embedded_data Notez la ligne importante pour la sortie de zdb :
guid: 12365645279327980714 path: '/dev/disk/by-partlabel/SW3-NETSTOR-SRV2-1' La partie guid doit être mise à jour dans le zpool.
Vous pouvez mettre à jour le guid avec la commande :
zpool replace NETSTOR -f Par exemple :
zpool replace NETSTOR 12365645279327980714 /dev/disk/by-partlabel/SW3-NETSTOR-SRV2-1 -f Vérifiez maintenant l’état zpool :
~# zpool status pool: NETSTOR state: DEGRADED status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Tue Dec 6 16:12:53 2016 591M scanned out of 728M at 65,6M/s, 0h0m to go 590M resilvered, 81,14% done config: NAME STATE READ WRITE CKSUM NETSTOR DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 SW3-NETSTOR-SRV1-1 ONLINE 0 0 0 replacing-1 UNAVAIL 0 0 0 old UNAVAIL 0 0 0 corrupted data SW3-NETSTOR-SRV2-1 ONLINE 0 0 0 (resilvering) errors: No known data errors Vous devez désormais attendre que le zpool ait terminé sa réversibilité et votre remplacement de disque sera opérationnel.

