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.