UFS nach ZFS migrieren mit Live Upgrade

Author: | Posted in Solaris 3 Comments

Seit Solaris 10 Update 6 ist es möglich, von ZFS zu booten und dieses für die Root Partition einzusetzen. In Verbindung mit Live Upgrade ist es möglich, eine relativ schmerzlose Migration von UFS nach ZFS zu bewerkstelligen. In folgendem Beispiel erkläre ich wie man ein mit SDS gespiegeltes System nach ZFS migriert.

Als Vorbereitung muss man, wie bei Live Upgrade üblich, zuerst die vorhandenen Pakete deinstalieren (falls vorhanden) und die aktuellste Version installieren.

# pkgrm SUNWlucfg SUNWluu SUNWlur
# pkgadd -d /path/to/Solaris SUNWlucfg SUNWluu SUNWlur

Anschliessend müssen die Patches gemäss dem Infodoc 206844 installiert werden.

Nachdem alles Patches installiert wurden und das System neu gestartet wurde, kann mit der eigentlichen Migration begonnen werden. Da für die Migration der Spiegel aufgebrochen werden muss, empfiehlt sich folgender Eintrag in der /etc/system, da Solaris nicht bootet, wenn weniger als 50% der metadbs verfügbar sind.

set md:mirrored_root_flag=1

Anschliessend kann damit begonnen werden, den Mirror aufzubrechen.

root@v240lu:~# metastat -c
d0               m   23GB d7 d8
    d7           s   23GB c1t0d0s0
    d8           s   23GB c1t1d0s0
d3               m  8.0GB d5 d6
    d5           s  8.0GB c1t0d0s3
    d6           s  8.0GB c1t1d0s3
d1               m  2.0GB d2 d4
    d2           s  2.0GB c1t0d0s1
    d4           s  2.0GB c1t1d0s1

root@v240lu:~# metadetach d0 d8
d0: submirror d8 is detached
root@v240lu:~# metadetach d3 d6
d3: submirror d6 is detached
root@v240lu:~# metadetach d1 d4
d1: submirror d4 is detached

root@v240lu:~# metaclear d8
d8: Concat/Stripe is cleared
root@v240lu:~# metaclear d6
d6: Concat/Stripe is cleared
root@v240lu:~# metaclear d4
d4: Concat/Stripe is cleared

Auch die metadb darf nicht vergessen werden:

root@v240lu:~# metadb
        flags           first blk       block count
     a m  p  luo        16              8192            /dev/dsk/c1t0d0s7
     a    p  luo        8208            8192            /dev/dsk/c1t0d0s7
     a    p  luo        16400           8192            /dev/dsk/c1t0d0s7
     a    p  luo        24592           8192            /dev/dsk/c1t0d0s7
     a    p  luo        16              8192            /dev/dsk/c1t1d0s7
     a    p  luo        8208            8192            /dev/dsk/c1t1d0s7
     a    p  luo        16400           8192            /dev/dsk/c1t1d0s7
     a    p  luo        24592           8192            /dev/dsk/c1t1d0s7

root@v240lu:~# metadb -d c1t1d0s7

Jetzt mus die zweite Disk, die c1t1d0 neu partitioniert werden. Um von ZFS booten zu können, wird ein SMI label auf der Disk benötigt. In diesem Beispiel habe ich mich entschieden, den Slice 0 auf die grösse der Disk zu setzen. In diesen Slice wird jetzt das neue ZFS erstellt.

root@v240lu:~# zpool create -f rpool c1t1d0s0

Im nächsten Schritt wird das Boot Environment erzeugt. Das alte Boot Environment wird hier s10su6 und das neue s10su7 benannt.

root@v240lu:~# lucreate -c s10su6 -n s10su7 -p rpool

Wenn das neue Boot Environment erfolgreich erzeugt wurde und die aktuelle Solaris installation auf die Disk kopiert wurde, sollte man folgende Situation haben:

root@v240lu:~# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
rpool              8.29G  24.9G  92.5K  /rpool
rpool/ROOT         4.29G  24.9G    18K  /rpool/ROOT
rpool/ROOT/s10su7  4.29G  24.9G  4.29G  /
rpool/dump            2G  26.9G    16K  -
rpool/swap         2.00G  26.9G    16K  -

root@v240lu:~# lustatus
Boot Environment           Is       Active Active    Can    Copy
Name                       Complete Now    On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
s10su6                     yes      yes    yes       no     -
s10su7                     yes      no     no        yes    -

Jetzt kann mit dem Upgrade begonnen werden:

root@v240lu:~# luupgrade -n s10su7 -u -s /path/to/solaris

Wenn dies ebenfalls erfolgreich abgeschlossen wurde, kann das neue Boot Environment aktiviert werden:

root@v240lu:~# luactivate s10su7

Falls dies mit folgender Fehlermeldung abbrechen sollte, ist man Opfer des Bugs 6824589 geworden.

/usr/sbin/luactivate: /etc/lu/DelayUpdate/: cannot create

Als Workaround muss die Variable BOOT_MENU_FILE gesetzt werden und luactivate erneut ausgeführt werden.

root@v240lu:~# export BOOT_MENU_FILE="menu.lst"
root@v240lu:~# luactivate s10su7

Anschliessend kann das System neu gestartet werden.

root@v240lu:~# init 6

Das System sollte jetzt mit dem aktualisierten Solaris auf ZFS booten. Sofern der Upgrade geglückt ist, kann das alte Boot Environment sowie die verbleibende Hälfte des Mirrors gelöscht werden. Wichtig ist dabei, dass die Reihenfolge eingehalten wird und das Boot Environment zuerst gelöscht wird.

root@v240lu:~# ludelete s10su6

Und wie folgt den verbleibenden Mirror und die Metadbs entfernen:

root@v240lu:~# metastat -c
d0               m   23GB d7
    d7           s   23GB c1t0d0s0
d3               m  8.0GB d5
    d5           s  8.0GB c1t0d0s3
d1               m  2.0GB d2
    d2           s  2.0GB c1t0d0s1

root@v240lu:~# metaclear d0
d0: Mirror is cleared
root@v240lu:~# metaclear d3
d3: Mirror is cleared
root@v240lu:~# metaclear d1
d1: Mirror is cleared
root@v240lu:~# metaclear d7
d7: Concat/Stripe is cleared
root@v240lu:~# metaclear d5
d5: Concat/Stripe is cleared
root@v240lu:~# metaclear d2
d2: Concat/Stripe is cleared

root@v240lu:~# metadb
        flags           first blk       block count
     a m  pc luo        16              8192            /dev/dsk/c1t0d0s7
     a    pc luo        8208            8192            /dev/dsk/c1t0d0s7
     a    pc luo        16400           8192            /dev/dsk/c1t0d0s7
     a    pc luo        24592           8192            /dev/dsk/c1t0d0s7

root@v240lu:~# metadb -fd c1t0d0s7

Abschliessend wir die gerade vom SDS befreite Disk in den Zpool eingebunden. Beachten sollte man dabei, dass es sich hier um eine Boot Disk mit einem SMI Label handelt und diese von der bereits vorhandenen Disk kopiert werden sollte.

root@v240lu:~# prtvtoc /dev/rdsk/c1t1d0s2 | fmthard -s – /dev/rdsk/c1t0d0s2
root@v240lu:~# zpool attach rpool c1t1d0s0 c1t0d0s0

Jetzt sollte man folgenden Stand haben:

root@v240lu:~# zpool status
  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 0h0m, 0.33% done, 0h55m to go
config:

        NAME          STATE     READ WRITE CKSUM
        rpool         ONLINE       0     0     0
          mirror      ONLINE       0     0     0
            c1t1d0s0  ONLINE       0     0     0
            c1t0d0s0  ONLINE       0     0     0

errors: No known data errors

root@v240lu:~# lustatus
Boot Environment           Is       Active Active    Can    Copy
Name                       Complete Now    On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
s10su7                     yes      yes    yes       no     -
Comments
  1. Posted by Matthias Staehli
  2. Posted by rmu
  3. Posted by Sebastian Kayser

Add Your Comment