Spiegeln der OpenSolaris Systemdisk

Während der Installation wurde vom Installer ein ZFS-Pool mit dem Namen rpool angelegt, den wir jetzt um eine zweite Disk erweitern. Ziel ist es die Redundanz zu erhöhen und bei einem Festplattenausfall das System nicht zu verlieren.

Erst schauen wir den Status des Pools an. Dieser sollte in etwa so aussehen:

thomas@srvt01:~$ zpool status rpool
  pool: rpool
 state: ONLINE
 scrub: scrub completed after 0h3m with 0 errors on Tue Jun 22 08:27:19 2010
config:

NAME         STATE     READ WRITE CKSUM
rpool        ONLINE       0     0     0
  c10t0d0s0  ONLINE       0     0     0

errors: No known data errors

Der Pool besteht also aktuell aus einer einzelnen Festplatte, bekannt unter dem Namen c10t0d0s0. Um die zweite Disk anzuhängen benötigen wir erst deren Namen. Das Tool ‚format‘ eignet sich dazu sehr gut.

thomas@srvt01:~$ pfexec format
Searching for disks...done

c4t0d0: configured with capacity of 232.87GB


AVAILABLE DISK SELECTIONS:
       0. c4t0d0 <SAMSUNG-SP2514N-0000 cyl 30399 alt 2 hd 255 sec 63>
          /pci@0,0/pci15d9,605@1d/hub@1/storage@2/disk@0,0
       1. c10t0d0 <DEFAULT cyl 7780 alt 2 hd 255 sec 63>
          /pci@0,0/pci15d9,605@1f,2/disk@0,0
       2. c10t2d0 <ATA-WDC WD15EADS-00R-0A01-1.36TB>
          /pci@0,0/pci15d9,605@1f,2/disk@2,0
       3. c10t3d0 <ATA-WDC WD15EADS-00P-0A01-1.36TB>
          /pci@0,0/pci15d9,605@1f,2/disk@3,0
       4. c10t4d0 <ATA-WDC WD20EARS-00M-AB50-1.82TB>
          /pci@0,0/pci15d9,605@1f,2/disk@4,0
       5. c10t5d0 <ATA-WDC WD20EARS-00M-AB50-1.82TB>
          /pci@0,0/pci15d9,605@1f,2/disk@5,0
Specify disk (enter its number): 

Testweise habe ich eine externe USB-HD angehängt, die auf Zeile 7 angezeigt wird. Wir werden nun also die Partitionierung von c10t0d0 auf c4t0d0 übertragen. Erst muss aber die Disk, in meinem Fall die Nummer 0, initialisiert werden. Dazu, noch immer in ‚format‘, die 0 eingeben und mit ‚fdisk‘ die Partitionierung starten. Sollte bereits eine Partition bestehen, diese hier löschen, fdisk beenden und gleich nochmals starten.

Bei einer leeren Disk fragt ‚fdisk‘ ob diese Partitioniert werden soll, dies bestätigen, danach mit dem Befehl ‚label‘ die Disk labeln. Jetzt sind die Vorbereitungen abgeschlossen und die Partitionierung kann übertragen werden mit:

thomas@srvt01:~$ pfexec prtvtoc /dev/rdsk/c10t0d0s2 | pfexec fmthard -s - /dev/rdsk/c4t0d0s2 
fmthard: Partition 2 specifies the full disk and is not equal
full size of disk.  The full disk capacity is 488343870 sectors.
fmthard:  New volume table of contents now in place.

Sollte hier eine Fehlermeldung erscheinen hat irgendetwas beim Formatieren nicht geklappt. Möglicherweise hilft es den ersten Teil zu wiederholen.

Nun die zweite Disk als Mirror dem Pool hinzufügen. Hierbei die vorhandene Disk (siehe ‚zpool status‘) als erstes Argument und die neue Disk als zweites Argument angeben.

thomas@srvt01:~$ pfexec zpool attach -f rpool c10t0d0s0 c4t0d0s0
Please be sure to invoke installgrub(1M) to make 'c4t0d0s0' bootable.
Make sure to wait until resilver is done before rebooting.

Den netten Hinweis ignorieren wir vorerst und schauen den Status des Pools an:

thomas@srvt01:~$ 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 for 0h6m, 22.91% done, 0h20m to go
config:

        NAME           STATE     READ WRITE CKSUM
        rpool          ONLINE       0     0     0
          mirror-0     ONLINE       0     0     0
            c10t0d0s0  ONLINE       0     0     0
            c4t0d0s0   ONLINE       0     0     0  3.63G resilvered

errors: No known data errors

Es hat geklappt, ZFS ist dabei die Daten zu übertragen, was auch bei meiner langsamen USB-Festplatte nur ca. 30 Minuten dauert. ZFS weiss welcher Bereich der Festplatte mit Daten gefüllt ist und synchronisiert nur diesen auf die zweite Festplatte. Natürlich können wir das System in dieser Zeit weiterhin nutzen und installieren auch gleich noch Grub auf der zweiten HD. Nur so ist diese später bootfähig:

thomas@srvt01:~$ pfexec installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c4t0d0s0 
stage1 written to partition 0 sector 0 (abs 16065)
stage2 written to partition 0, 273 sectors starting at 50 (abs 16115)

Nach einiger Zeit sollte die Synchronisation abgeschlossen sein und die Ausgabe von ‚zpool status rpool‘ dies auch bestätigen.

thomas@srvt01:~$ zpool status rpool
  pool: rpool
 state: ONLINE
 scrub: resilver completed after 0h19m with 0 errors on Sun Jun 27 17:58:57 2010
config:

        NAME           STATE     READ WRITE CKSUM
        rpool          ONLINE       0     0     0
          mirror-0     ONLINE       0     0     0
            c10t0d0s0  ONLINE       0     0     0
            c4t0d0s0   ONLINE       0     0     0  15.8G resilvered

errors: No known data errors

Wer ganz sicher gehen will kann mit Scrubbing (‚pfexec zpool scrub rpool‘) prüfen ob auch beide Disks problemlos die Daten lesen können und sämtliche Checksummen korrekt sind. Das dauert dann wieder eine Weile, der Fortschritt kann auch hier mit ‚zpool status rpool‘ überprüft werden.

Falls es irgendwelche Probleme gegeben hat liegt das vermutlich an fehlerhaft formatierten Festplatten. OpenSolaris scheint da sehr heikel zu sein.

In einem der nächsten Blog-Einträge geht es um das erstellen des RAID-Z für die Daten. Erst jedoch noch einige Einträge zu XVM.

Dieser Beitrag wurde unter OpenSolaris, OpenSolaris Fileserver veröffentlicht. Setze ein Lesezeichen auf den Permalink.
Warning: count(): Parameter must be an array or an object that implements Countable in /home/httpd/vhosts/blog-it.ch/httpdocs/wp-includes/class-wp-comment-query.php on line 405