Oracle Solaris ZFS-Administrationshandbuch

Wiederherstellen von ZFS-Root-Pools oder Root-Pool-Snapshots

In den folgenden Abschnitten werden diese Vorgehensweisen beschrieben:

ProcedureSo ersetzen Sie eine Festplatte im ZFS-Root-Pool

Das Ersetzen einer Festplatte im Root-Pool kann aus folgenden Gründen erforderlich sein:

In einer gespiegelten Root-Pool-Konfiguration können Sie versuchen, eine Festplatte zu ersetzen, ohne von einem alternativen Medium zu booten. Sie können eine ausgefallene Festplatte ersetzen, indem Sie den Befehl zpool replace verwenden. Wenn Sie über eine zusätzliche Festplatte verfügen, können Sie auch den Befehl zpool attach verwenden. In diesem Abschnitt finden Sie ein Beispiel für das Verfahren zum Einbinden einer zusätzlichen Festplatte und zum Entfernen einer Root-Pool-Festplatte.

Bei mancher Hardware müssen Sie eine Festplatte zunächst deaktivieren und dekonfigurieren, bevor Sie versuchen können, eine ausgefallene Festplatte mithilfe des Vorgangs zpool replace zu ersetzen. Beispiel:


# 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

Bei mancher Hardware müssen Sie die Ersatzfestplatte, nachdem diese eingesetzt wurde, weder aktivieren noch neu konfigurieren.

Sie müssen die Pfadnamen des Boot-Geräts der aktuellen und der neuen Festplatte angeben, damit Sie das Booten von der Ersatzfestplatte testen und manuell von der vorhandenen Festplatte booten können, falls das Booten von der Ersatzfestplatte fehlschlägt. In dem Beispiel des folgenden Verfahrens lautet der Pfadname für die aktuelle Root-Pool-Festplatte c1t10d0s0:


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

Der Pfadname für die Ersatzfestplatte zum Booten (c1t9d0s0) lautet:


/pci@8,700000/pci@3/scsi@5/sd@9,0
  1. Verbinden Sie die Ersatzfestplatte (bzw. die neue Festplatte) physisch.

  2. Vergewissern Sie sich, dass die neue Festplatte ein SMI-Label und den Bereich 0 hat.

    Informationen zum Umbenennen einer für den Root-Pool bestimmten Festplatte finden Sie auf:

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

  3. Verbinden Sie die neue Festplatte mit dem Root-Pool.

    Beispiel:


    # zpool attach rpool c1t10d0s0 c1t9d0s0
    
  4. Überprüfen Sie den Status des Root-Pools.

    Beispiel:


    # 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. Wenden Sie nach Abschluss des Resilvering die Boot-Blöcke auf die neue Festplatte an.

    Verwenden Sie eine Syntax wie die folgende:

    • 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. Überprüfen Sie, ob Sie von der neuen Festplatte booten können.

    Auf einem SPARC-System würden Sie eine Syntax wie die folgende verwenden:


    ok boot /pci@8,700000/pci@3/scsi@5/sd@9,0
    
  7. Wenn das System von der neuen Festplatte bootet, entfernen Sie die alte Festplatte.

    Beispiel:


    # zpool detach rpool c1t10d0s0
    
  8. Richten Sie das System zum automatischen Booten von der neuen Festplatte ein, indem Sie den Befehl eeprom, den Befehl setenv am SPARC-Boot-PROM verwenden, oder das PC-BIOS neu konfigurieren.

ProcedureSo erstellen Sie Root-Pool-Snapshots

Sie können Root-Pool-Snapshots zur Wiederherstellung erstellen. Der beste Weg zum Erstellen von Root-Pool-Snapshots besteht darin, einen rekursiven Snapshot des Root-Pools zu erstellen.

Im folgenden Verfahren wird ein rekursiver Root-Pool-Snapshot erstellt und in einer Datei innerhalb eines Pools auf einem entfernten System gespeichert. Wenn ein Root-Pool ausfällt, kann das entfernte Dataset durch Verwendung von NFS eingehängt und die Snapshot-Datei im wiederhergestellten Pool gespeichert werden. Sie können Root-Pool-Snapshots stattdessen als die eigentlichen Snapshots in einem Pool auf einem entfernten System speichern. Das Senden und Empfangen von Snapshots über ein entferntes System ist etwas komplexer, da Sie ssh konfigurieren oder rsh verwenden müssen, während das zu reparierende System von der Miniroot des Solaris-Betriebssystems gebootet wird.

Informationen zum Speichern und Wiederherstellen von Root-Pool-Snapshots auf entfernten Systemen und die aktuellsten Informationen zur Wiederherstellung von Root-Pools finden Sie unter:

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

Das Validieren von Snapshots, die auf entfernten Systemen als Dateien oder Snapshots gespeichert sind, ist ein wichtiger Schritt bei der Wiederherstellung von Root-Pools. Bei beiden Methoden sollten Snapshots regelmäßig wiederhergestellt werden, zum Beispiel, wenn sich die Konfiguration des Pools verändert oder das Solaris-Betriebssystem aktualisiert wird.

Im folgenden Verfahren wird das System von der Boot-Umgebung zfsBE gebootet.

  1. Erstellen Sie ein Pool- und Dateisystem zum Speichern von Snapshots auf einem entfernten System.

    Beispiel:


    remote# zfs create rpool/snaps
    
  2. Geben Sie das Dateisystem für das lokale System frei.

    Beispiel:


    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. Erstellen Sie einen rekursiven Snapshot des Root-Pools.


    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. Senden Sie die Root-Pool-Snapshots an das entfernte System.

    Beispiel:


    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

ProcedureSo erstellen Sie einen ZFS-Root-Pool neu und stellen Root-Pool-Snapshots wieder her

In diesem Verfahren wird von folgenden Voraussetzungen ausgegangen:

Alle Schritte werden auf dem lokalen System ausgeführt.

  1. Booten Sie das System über CD/DVD oder das Netzwerk.

    • SPARC: Wählen Sie eine der folgenden Boot-Methoden:


      ok boot net -s
      ok boot cdrom -s
      

      Wenn Sie die Option -s nicht verwenden, müssen Sie das Installationsprogramm beenden.

    • x86: Wählen Sie die Option zum Booten über DVD oder das Netzwerk. Beenden Sie das Installationsprogramm.

  2. Hängen Sie das entfernte Snapshot-Dataset ein.

    Beispiel:


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

    Wenn Ihre Netzwerkservices nicht konfiguriert sind, müssen Sie eventuell die IP-Adresse des remote-system angeben.

  3. Wenn die Root-Pool-Festplatte ersetzt wird und keine Festplattenbezeichnung enthält, die von ZFS verwendet werden kann, müssen Sie die Festplatte umbenennen.

    Weitere Informationen zum Umbenennen der Festplatte finden Sie auf der folgenden Site:

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

  4. Erstellen Sie den Root-Pool neu.

    Beispiel:


    # zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=
    /etc/zfs/zpool.cache rpool c1t1d0s0
    
  5. Stellen Sie die Root-Pool-Snapshots wieder her.

    Dieser Schritt kann etwas Zeit beanspruchen. Beispiel:


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

    Durch Verwenden der Option -u wird das wiederhergestellte Archiv nach dem zfs receive-Vorgang nicht eingehängt.

  6. Überprüfen Sie, ob die Root-Pool-Datasets wiederhergestellt wurden.

    Beispiel:


    # 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. Legen Sie die Eigenschaft bootfs in der Root-Pool-BU fest.

    Beispiel:


    # zpool set bootfs=rpool/ROOT/zfsBE rpool
    
  8. Installieren Sie auf der neuen Festplatte die Boot-Blöcke.

    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. Starten Sie das System neu.


    # init 6
    

ProcedureSo erstellen Sie nach dem Booten im Failsafe-Modus ein Dateisystem im Zustand eines früheren Snapshots wieder her

Für dieses Verfahren wird vorausgesetzt, dass Root-Pool-Snapshots verfügbar sind. In diesem Beispiel befinden sie sich auf dem lokalen System.


# 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. Fahren Sie das System herunter und booten Sie im Failsafe-Modus.


    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. Stellen Sie jeden Root-Pool-Snapshot wieder her.


    # zfs rollback rpool@0804
    # zfs rollback rpool/ROOT@0804
    # zfs rollback rpool/ROOT/zfsBE@0804
    
  3. Booten Sie erneut im Mehrbenutzer-Modus.


    # init 6