Remplacer un disque mort dans un zpool

30

J'exécute Ubuntu Server 13.04 64 bits en utilisant ZFS natif. J'ai un zpool composé de 4 disques durs dont l'un est mort hier et est maintenant non reconnu par le système d'exploitation ou le BIOS.

Malheureusement, je n'ai vu le problème qu'après le prochain redémarrage, maintenant l'étiquette du lecteur est manquante et je ne peux pas remplacer le disque en utilisant les instructions officielles ici et ici .

zpool status hermes -x

imprime

[email protected]:~# zpool status hermes -x
  pool: hermes
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  UNAVAIL      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

J'ai déjà remplacé le disque par un nouveau disque (qui porte le label /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ )

L'une des commandes

zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X

échoue avec

[email protected]:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool

parce que l’étiquette du lecteur qui est mort n’existe plus dans le système. J'ai également essayé les commandes ci-dessus en omettant le chemin de l’étiquette du lecteur en vain.

Comment puis-je remplacer le disque "fantôme"?

    
posée Marcus 09.06.2013 - 01:25
la source

4 réponses

34

Après avoir creusé sans fin cette nuit, j'ai finalement trouvé la solution. La réponse courte est que vous pouvez utiliser les GUID des disques (qui persistent même après avoir déconnecté un lecteur) avec la commande zpool .

Réponse longue: J'ai obtenu le GUID du disque en utilisant la commande zdb qui m'a donné la sortie suivante

[email protected]:/dev# zdb
hermes:
    version: 28
    name: 'hermes'
    state: 0
    txg: 162804
    pool_guid: 14829240649900366534
    hostname: 'zeus'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 14829240649900366534
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5355850150368902284
            nparity: 1
            metaslab_array: 31
            metaslab_shift: 32
            ashift: 9
            asize: 791588896768
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 11426107064765252810
                path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
                phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 15935140517898495532
                path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
                phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 7183706725091321492
                path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
                phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17196042497722925662
                path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
                phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
    features_for_read:

Le GUID que je cherchais est 15935140517898495532 ce qui m'a permis de faire

[email protected]:/dev# zpool offline hermes 15935140517898495532
[email protected]:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  OFFLINE      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

puis

[email protected]:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
[email protected]:/dev# zpool status
  pool: hermes
 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 Sun Jun  9 01:44:36 2013
    408M scanned out of 419G at 20,4M/s, 5h50m to go
    101M resilvered, 0,10% done
config:

        NAME                            STATE     READ WRITE CKSUM
        hermes                          DEGRADED     0     0     0
          raidz1-0                      DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP     ONLINE       0     0     0
            replacing-1                 OFFLINE      0     0     0
              ata-ST3300831A_5NF0552X   OFFLINE      0     0     0
              ata-ST3500320AS_9QM03ATQ  ONLINE       0     0     0  (resilvering)
            ata-ST3200822A_5LJ1CHMS     ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C     ONLINE       0     0     0

errors: No known data errors

Après avoir terminé le rechapage, tout a bien fonctionné. Il aurait été intéressant d'inclure ces informations, de pouvoir utiliser le GUID d'un disque obtenu via zdb avec la commande zpool , avec la page de manuel de zpool.

Modifier

Comme indiqué par durval sous la commande zdb peut ne rien produire. Ensuite, vous pouvez essayer d'utiliser

zdb -l /dev/<name-of-device>

pour lister explicitement les informations sur le périphérique (même s'il est déjà absent du système).

    
réponse donnée Marcus 09.06.2013 - 11:41
la source
3

Le problème est que les disques sont référencés par des identifiants et non par périphérique.

Voici une solution de contournement qui devrait fonctionner:

ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

Edit: j'avais 30 secondes de retard ...

    
réponse donnée jlliagre 09.06.2013 - 11:41
la source
2

@Marcus: Merci d'avoir posté cette excellente réponse à votre propre question, cela m'a beaucoup aidé.

L’autre jour, j’ai trouvé une torsion qui pourrait vous intéresser (et toute autre personne qui viendra ici a-googler à l’avenir): j’avais un périphérique de cache qui avait été déposé du pool (et marqué "UNAVAIL") cette même erreur (ZFS-8000-4J, "libellé manquant ou invalide"), et en essayant de déconnecter / supprimer / remplacer, a échoué avec exactement le même message "aucun périphérique de ce type dans le pool".

MAIS, lorsque j'ai essayé d'appliquer votre solution, "zdb" (sans aucun argument) ne pas listait le périphérique, et encore moins son GUID.

Après quelques recherches, j'ai trouvé que "zdb -l / dev / DEVICENAME" listait le GUID (en le prenant directement depuis le périphérique, et non depuis les enregistrements du pool), et en utilisant ce GUID, j'ai pu faire le remplacement J'ai fait un "zpool offline" suivi d'un "zpool remove" puis d'un "zpool add", qui a parfaitement fonctionné).

    
réponse donnée durval 31.01.2015 - 14:15
la source
0

J'ai eu un problème similaire:

Le lecteur a échoué de telle manière qu’il ne s’enregistre plus dans le BIOS (totalement mort). Le zpool status a indiqué qu'il s'agissait de UNAVAILABLE .

Je mets un lecteur de capacité similaire, et je suis parvenu à l’allouer sous la forme d’un nouveau spare qui était INUSE et qui permettait de redistribuer le lecteur. Mais, cela ne faisait pas vraiment partie du zpool, mais la piscine avait un souvenir du disque manquant, pensant qu’elle reviendrait un jour.

La solution consistait d'abord à supprimer le lecteur manquant du serveur zpool:

[[email protected] ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094  

Ensuite, déposez le lecteur marqué spare-1 INUSE également:

[[email protected] ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094

Une fois cela fait, il semble que FreeNAS ait compris sans avoir à faire une commande replace , cependant si votre système ne le trouve pas lui-même, la commande suivante devrait remplacer un périphérique par un autre:

zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}

Par exemple:

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • Les gptids provenaient de ma commande zpool status .
réponse donnée Frood 21.11.2016 - 18:52
la source

Lire d'autres questions sur les étiquettes