Guide d'administration Oracle Solaris ZFS

Restauration du pool racine ZFS ou des instantanés du pool racine

Les sections suivantes décrivent comment effectuer les tâches ci-dessous :

ProcedureRemplacement d'un disque dans le pool racine ZFS

Vous pouvez être amené à remplacer un disque dans le pool racine pour les raisons suivantes :

Dans le cadre d'une configuration de pool racine mise en miroir, vous pouvez tenter de remplacer le disque sans effectuer une initialisation à partir d'un autre média. Vous pouvez remplacer un disque défaillant en utilisant la commande zpool replace. Si vous disposez d'un autre disque, vous pouvez également utiliser la commande zpool attach. Pour savoir comment connecter un autre disque et déconnecter un disque de pool racine, reportez-vous à la procédure de cette section.

Avec certains composants matériels, vous devez déconnecter le disque et en supprimer la configuration avant de tenter d'utiliser la commande zpool replace pour remplacer le disque défectueux. Exemple :


# zpool offline rpool c1t0d0s0
# cfgadm -c unconfigure c1::dsk/c1t0d0
<Physically remove failed disk c1t0d0>
<Physically insert replacement disk c1t0d0>
# cfgadm -c configure c1::dsk/c1t0d0
# zpool replace rpool c1t0d0s0
# zpool online rpool c1t0d0s0
# zpool status rpool
<Let disk resilver before installing the boot blocks>
SPARC# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t0d0s0
x86# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0

Avec certains composants matériels, il n'est pas nécessaire de connecter le disque, ni de reconfigurer son remplacement après son insertion.

Vous devez identifier les chemins d'accès du périphérique d'initialisation du nouveau disque et du disque actuel afin de tester l'initialisation à partir du disque de remplacement et afin de pouvoir initialiser manuellement le système à partir du disque existant, en cas de dysfonctionnement du disque de remplacement. Dans l'exemple de la procédure suivante, le nom du chemin du disque de pool racine actuel (c1t10d0s0) est le suivant :


/pci@8,700000/pci@3/scsi@5/sd@a,0

Le nom du chemin du disque d'initialisation de remplacement (c1t9d0s0) est le suivant :


/pci@8,700000/pci@3/scsi@5/sd@9,0
  1. Connectez physiquement le disque de remplacement (nouveau disque).

  2. Confirmez que le nouveau disque possède une étiquette SMI et une tranche 0.

    Pour plus d'informations sur le nouvel étiquetage d'un disque destiné au pool racine, visitez le site suivant :

    http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide

  3. Associez le nouveau disque au pool racine.

    Exemple :


    # zpool attach rpool c1t10d0s0 c1t9d0s0
    
  4. Confirmez le statut du pool racine.

    Exemple :


    # zpool status rpool
      pool: rpool
     state: ONLINE
    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.
     scrub: resilver in progress, 25.47% done, 0h4m to go
    config:
    
            NAME           STATE     READ WRITE CKSUM
            rpool          ONLINE       0     0     0
              mirror-0     ONLINE       0     0     0
                c1t10d0s0  ONLINE       0     0     0
                c1t9d0s0   ONLINE       0     0     0
    
    errors: No known data errors
  5. Une fois la resynchronisation terminée, appliquez les blocs d'initialisation au nouveau disque.

    Utilisez une syntaxe semblable à la syntaxe suivante :

    • SPARC :


      # installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t9d0s0
      
    • x86 :


      # installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0
      
  6. Vérifiez que vous pouvez initialiser le système à partir du nouveau disque.

    Pour les systèmes SPARC, vous devez par exemple utiliser une syntaxe semblable à la syntaxe suivante :


    ok boot /pci@8,700000/pci@3/scsi@5/sd@9,0
    
  7. Si le système s'initialise à partir du nouveau disque, déconnectez l'ancien disque.

    Exemple :


    # zpool detach rpool c1t10d0s0
    
  8. Configurez le système pour qu'il puisse s'initialiser automatiquement à partir du nouveau disque, à l'aide de la commande eeprom ou de la commande setenv de la PROM d'initialisation SPARC, ou reconfigurez le BIOS du PC.

ProcedureCréation d'instantanés de pool racine

Vous pouvez créer des instantanés de pool racine à des fins de récupération. La meilleure façon de créer des instantanés de pool racine consiste à effectuer un instantané récursif du pool racine.

La procédure suivante crée un instantané de pool racine récursif et le stocke en tant que fichier dans un pool sur un système distant. En cas de défaillance du pool racine, le jeu de données distant peut être monté à l'aide de NFS et le fichier d'instantané peut être reçu dans le pool recréé. Vous pouvez également stocker les instantanés de pool racine en tant qu'instantanés réels dans un pool d'un système distant. L'envoi et la réception des instantanés à partir d'un système distant est un peu plus complexe, car vous devez configurer ssh ou utiliser rsh pendant que le système à réparer est initialisé à partir de la mini-racine du système d'exploitation Solaris.

Pour plus d'informations sur le stockage et la récupération d'instantanés de pool racine à distance et afin d'obtenir les informations les plus récentes sur la récupération de pool racine, visitez le site :

http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide

La validation des instantanés stockés à distance en tant que fichiers ou instantanés est une étape importante dans la récupération du pool racine. En appliquant l'une des deux méthodes, les instantanés doivent être recréés régulièrement, par exemple, lorsque la configuration du pool est modifiée ou lorsque le SE Solaris est mis à niveau.

Dans la procédure suivante, le système est initialisé à partir de l'environnement d'initialisation zfsBE.

  1. Créez un pool et un système de fichiers sur un système distant pour stocker les instantanés.

    Exemple :


    remote# zfs create rpool/snaps
    
  2. Partagez le système de fichiers avec le système local.

    Exemple :


    remote# zfs set sharenfs='rw=local-system,root=local-system' rpool/snaps
    # share
    -@rpool/snaps   /rpool/snaps   sec=sys,rw=local-system,root=local-system   "" 
  3. Créez un instantané récursif du pool racine.


    local# zfs snapshot -r rpool@0804
    local# zfs list
    NAME                        USED  AVAIL  REFER  MOUNTPOINT
    rpool                      6.17G  60.8G    98K  /rpool
    rpool@0804                     0      -    98K  -
    rpool/ROOT                 4.67G  60.8G    21K  /rpool/ROOT
    rpool/ROOT@0804                0      -    21K  -
    rpool/ROOT/zfsBE           4.67G  60.8G  4.67G  /
    rpool/ROOT/zfsBE@0804       386K      -  4.67G  -
    rpool/dump                 1.00G  60.8G  1.00G  -
    rpool/dump@0804                0      -  1.00G  -
    rpool/swap                  517M  61.3G    16K  -
    rpool/swap@0804                0      -    16K  -
  4. Envoyez les instantanés du pool racine au système distant.

    Exemple :


    local# zfs send -Rv rpool@0804 > /net/remote-system/rpool/snaps/rpool.0804
    sending from @ to rpool@0804
    sending from @ to rpool/swap@0804
    sending from @ to rpool/ROOT@0804
    sending from @ to rpool/ROOT/zfsBE@0804
    sending from @ to rpool/dump@0804

ProcedureRecréation d'un pool racine ZFS et restauration d'instantanés de pool racine

Dans cette procédure, on suppose les conditions suivantes :

Toutes les étapes sont effectuées sur le système local.

  1. Initialisez le système à partir d'un CD/DVD ou du réseau.

    • SPARC : sélectionnez l'une des méthodes d'initialisation suivantes :


      ok boot net -s
      ok boot cdrom -s
      

      Si vous n'utilisez pas l'option -s, vous devrez quitter le programme d'installation.

    • x86 : initialisez le système à partir du DVD ou du réseau. Quittez ensuite le programme d'installation.

  2. Montez le jeu de données de l'instantané distant.

    Exemple :


    # mount -F nfs remote-system:/rpool/snaps /mnt
    

    Si vos services réseau ne sont pas configurés, il peut être nécessaire de spécifier l'adresse IP du système distant.

  3. Si le disque du pool racine est remplacé et ne contient aucune étiquette de disque pouvant être utilisée par ZFS, vous devez renommer le disque.

    Pour en savoir plus sur l'affectation d'un nouveau nom au disque, reportez-vous au site suivant :

    http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide

  4. Recréez le pool racine.

    Exemple :


    # zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=
    /etc/zfs/zpool.cache rpool c1t1d0s0
    
  5. Restaurez les instantanés du pool racine.

    Cette étape peut prendre un certain temps. Exemple :


    # cat /mnt/rpool.0804 | zfs receive -Fdu rpool
    

    L'utilisation de l'option -u implique que l'archive restaurée n'est pas montée à la fin de l'opération zfs receive.

  6. Vérifiez que les jeux de données du pool racine sont restaurés.

    Exemple :


    # zfs list
    NAME                        USED  AVAIL  REFER  MOUNTPOINT
    rpool                      6.17G  60.8G    98K  /a/rpool
    rpool@0804                     0      -    98K  -
    rpool/ROOT                 4.67G  60.8G    21K  /legacy
    rpool/ROOT@0804                0      -    21K  -
    rpool/ROOT/zfsBE           4.67G  60.8G  4.67G  /a
    rpool/ROOT/zfsBE@0804       398K      -  4.67G  -
    rpool/dump                 1.00G  60.8G  1.00G  -
    rpool/dump@0804                0      -  1.00G  -
    rpool/swap                  517M  61.3G    16K  -
    rpool/swap@0804                0      -    16K  -
  7. Définissez la propriété bootfs sur l'environnement d'initialisation du pool racine.

    Exemple :


    # zpool set bootfs=rpool/ROOT/zfsBE rpool
    
  8. Installez les blocs d'initialisation sur le nouveau disque.

    SPARC :


    # installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0
    

    x86 :


    # installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0
    
  9. Redémarrez le système.


    # init 6
    

ProcedureRestauration des instantanés d'un pool racine à partir d'une initialisation de secours

Cette procédure part du principe que les instantanés du pool racine existant sont disponibles. Dans l'exemple suivant, ils se trouvent sur le système local.


# zfs snapshot -r rpool@0804
# zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
rpool                      6.17G  60.8G    98K  /rpool
rpool@0804                     0      -    98K  -
rpool/ROOT                 4.67G  60.8G    21K  /rpool/ROOT
rpool/ROOT@0804                0      -    21K  -
rpool/ROOT/zfsBE           4.67G  60.8G  4.67G  /
rpool/ROOT/zfsBE@0804       398K      -  4.67G  -
rpool/dump                 1.00G  60.8G  1.00G  -
rpool/dump@0804                0      -  1.00G  -
rpool/swap                  517M  61.3G    16K  -
rpool/swap@0804                0      -    16K  -
  1. Arrêtez le système et initialisez-le en mode secours.


    ok boot -F failsafe
    ROOT/zfsBE was found on rpool.
    Do you wish to have it mounted read-write on /a? [y,n,?] y
    mounting rpool on /a
    
    Starting shell.
  2. Annulez (roll back) chaque instantané du pool racine.


    # zfs rollback rpool@0804
    # zfs rollback rpool/ROOT@0804
    # zfs rollback rpool/ROOT/zfsBE@0804
    
  3. Réinitialisez le système en mode multi-utilisateur.


    # init 6