UFS nach ZFS migrieren mit Live Upgrade
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 -
Hei chef-duderino
hat wunderbar geklappt…Sol-10-U7 blöderweise ohne ZFS boot installiert und schnell den Ihsi-blog abgerufen. 2h später ist’s ZFS-booted wieder hochgekommen.
you’re N.E.R.D !!!
Hey Ihsan,
schöne Zusammenfassung, bin gerade durch einen Kollegen drauf aufmerksam geworden, der das durchexerziert hat. Kleine Ergänzung: IMHO fehlt nach dem abschließenden attach noch das Schreiben des Bootblocks auf c01t0d0s0. Leider macht attach das nicht automatisch und weißt auch nicht darauf hin. Andernfalls kann von der Disk nicht gebootet werden.
zpool attach Command Does Not Copy bootblock Information (6668666)
http://docs.sun.com/app/docs/doc/820-5245/ghgph?l=en_US&a=view
Booting From an Alternate Disk in a Mirrored ZFS Root Pool
http://docs.sun.com/app/docs/doc/819-5461/ggpco?a=view#ggtia
Sebastian