Auteur : Sébastien Reboux (sreboux)

Date : Juin 2007

Live Upgrade de Solaris 10 et RAID 1

Sommaire

  1. Introduction
  2. Configuration utiilisée
  3. Préliminaires
    1. Mise-à-jour de Live Upgrade
    2. Patchs
  4. Here we go
    1. Casser le RAID 1
    2. Upgrade
    3. Activation du BE cible
    4. Reboot
  5. C'est fait !
    1. Vérifications de base
    2. Reconstruction du RAID 1
  6. Galères
  7. Biblio

Prérequis

Afin d'aborder cet article, il est utile d'avoir des connaissances dans les domaines suivants :

1. Introduction

Upgrader Solaris se fait traditionnellement en réinstallant complètement l'OS. Solaris Live Upgrade (LU) propose une alternative puissante qui minimise les risques, permet un retour en arrière en cas d'erreur et réduit le temps d'interruption de service à un unique reboot.

L'idée générale est d'utiliser un disque dur libre (ou de l'espace disque inutilisé) pour :

Par exemple, une Sun possède 2 disques : 1 sous Solaris 9 et 1 inutilisé. On peut préparer le BE cible sur le disque libre, l'upgrader en Solaris 10, l'activer et rebooter dessus. Si tout va bien, on supprime Solaris 9 ; sinon, on réactive Solaris 9 et on reboote. Cette procédure est largement documentée.

Dans mon cas, ma Sun possède 2 disques en RAID 1 (miroir) sous Solaris Volume Manager (SVM), je n'ai pas de disque supplémentaire ni d'espace libre. Sun recommande et documente d'utiliser un troisième disque (même temporairement) pour upgrader le miroir. Ca ne me convient pas. La démarche que je décris ci-après consiste à :

Il s'agit seulement d'ajouter quelques étapes à un live upgrade classique. Le seul risque supplémentaire (hormis une erreur humaine due à la complexité accrue) est qu'un disque tombe pendant que le RAID 1 est cassé. À évaluer avec l'ami Murphy. Je déconseille cette manipulation les veilles de vacances et les vendredi soirs.

LU sait gérer SVM et ses metadevices, on n'aura à utiliser les commandes de SVM qu'à la dernière étape, et éventuellement en cas de galère.
À noter qu'à la date de cet article, LU ne sait pas upgrader un Solaris 10 comportant des zones, même arrêtées (voir Galères).

2. Configuration utilisée

La config que j'ai utilisée pour cet article est mon poste de travail de tous les jours (quassia) : une Sun Blade 1500 (Ultra SPARC IIIi) sous Solaris 10 3/5 avec 2 disques IDE en RAID 1. Le RAID est géré par SVM. Je l'ai upgradée en Solaris 10 11/6.

Ma configuration inclue un clavier et un écran, mais tout aurait pu être réalisé en console sans problème.

sreboux@quassia$

uname -a

SunOS quassia 5.10 Generic_118833-36 sun4u sparc SUNW,Sun-Blade-1500

sreboux@quassia$ cat /etc/release

                         Solaris 10 3/05 s10_74L2a SPARC

           Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.

                        Use is subject to license terms.

                            Assembled 22 January 2005

sreboux@quassia$ mount

/ on /dev/md/dsk/d0

/tmp on swap

/export/home on /dev/md/dsk/d7

[...]

sreboux@quassia$ metastat -p

d7 -m d27 d17 1

d27 1 1 c0t1d0s7

d17 1 1 c0t0d0s7

d1 -m d21 d11 1

d21 1 1 c0t1d0s1

d11 1 1 c0t0d0s1

d0 -m d20 d10 1

d20 1 1 c0t1d0s0

d10 1 1 c0t0d0s0

sreboux@quassia$ metadb

        flags           first blk       block count

     a m  p  luo        16              8192            /dev/dsk/c0t0d0s3

     a    p  luo        8208            8192            /dev/dsk/c0t0d0s3

     a    p  luo        16400           8192            /dev/dsk/c0t0d0s3

     a    p  luo        16              8192            /dev/dsk/c0t1d0s3

     a    p  luo        8208            8192            /dev/dsk/c0t1d0s3

     a    p  luo        16400           8192            /dev/dsk/c0t1d0s3

Les 2 disques sont c0t0d0 et c0t1d0. Le point de montage / correspond à d0, un miroir constitué de 2 metadevices d10 et d20. d10 est l'encapsulation de c0t0d0s0, d20 est l'encapsulation de c0t1d0s0.

d1 et d7 correspondent à swap et /export/home : ils ne seront pas touchés. La base de données de SVM est sur la slice 3 de chaque disque.

À noter que dans mon cas, /usr et /var sont dans /. Si ce n'est pas votre cas, reportez vous à la documentation de LU car les filesystèmes "critiques" sont /, /usr et /var. S'ils sont sur des slices séparées, il faut prévoir des paramètres supplémentaires à ajouter aux commandes LU. À noter également qu'il est possible de profiter d'une opération d'upgrade pour séparer ou fusionner des filesystèmes ; j'aurais pu par exemple en profiter pour "sortir" /usr et/ou /var de /.

Solaris 10 11/6 sera installé à partir d'un DVD original, que j'ai d'ailleur obtenu gratuitement via SunWizard.

3. Préliminaires

3.1 Mise à jour de LU

Les paquets Solaris de LU doivent être mis à jour avant toute chose. Ils sont fournis sur le DVD de Solaris.

root@quassia# pkgrm SUNWluu

root@quassia# pkgrm SUNWlur

root@quassia# pkgadd -d /cdrom/cdrom0/s0/Solaris_10/Product SUNWlur SUNWluu

[...]

## Executing postinstall script.

=========================================================================

IMPORTANT NOTICE

Patches Needed to Run Solaris Live Upgrade

Correct operation of Solaris Live Upgrade requires that a limited set of

patch revisions be installed for SunOS 5.10 for the sparc platform.

Before installing or running Live Upgrade, you are required to install a

limited set of patch revisions. Make sure you have the most recently

updated patch list by consulting sunsolve.sun.com. Search for the info doc

72099 on the SunSolve(tm) web site.

Live Upgrade may fail to work properly if the latest limited set

of patch revisions are not installed on this system.

=========================================================================

[...]

3.2 Patchs

Des patches peuvent être requis pour LU, j'ai du en passer quelque-uns. Je ne le décrit pas ici, à noter que ca m'a coûté un reboot supplémentaire, parce que je n'étais pas trop à jour. La note ci-dessus recommande d'aller voir sur SunSolve et de chercher la doc 72099.

4. Here we go

4.1 Casser le RAID 1 et préparer les BE source et cible

Cette double opération se fait en une seule commande LU.

Au préalable j'ai arbitrairement décidé que c0t1d0s0 serait le BE cible. c0t1d0s0 est encapsulé en d20 et fait partie du miroir d0. Une fois cassé, le demi-miroir d0 ne sera plus constitué que de d10 et deviendra le BE source.

Après l'upgrade, le miroir ne pourra pas être reconstruit sous le nom de metadevice d0, j'ai choisi arbitrairement le nom d120 comme futur point de montage pour /.

root@quassia# lustatus

ERROR: No boot environments are configured on this system

ERROR: cannot determine list of all boot environment names

lustatus, qui me servira tout au long de l'article, me dit qu'aucun BE n'est encore créé.

root@quassia# lucreate \

-C /dev/dsk/c0t0d0s0 \

-n sol10116 \

-m /:/dev/md/dsk/d120:ufs,mirror \

-m /:/dev/dsk/c0t1d0s0:detach,attach,preserve

Discovering physical storage devices

Discovering logical storage devices

Cross referencing storage devices with boot environment configurations

Determining types of file systems supported

Validating file system requests

Preparing logical storage devices

Preparing physical storage devices

Configuring physical storage devices

Configuring logical storage devices

Analyzing system configuration.

No name for current boot environment.

INFORMATION: The current boot environment is not named - assigning name

Current boot environment is named .

Creating initial configuration for primary boot environment .

The device is not a root device for any boot environment.

PBE configuration successful: PBE name PBE Boot Device .

Comparing source boot environment file systems with the file

system(s) you specified for the new boot environment. Determining which

file systems should be in the new boot environment.

Updating boot environment description database on all BEs.

Searching /dev for possible boot environment filesystem devices

Updating system configuration files.

The device is not a root device for any boot environment.

Creating configuration for boot environment .

Source boot environment is .

Creating boot environment .

Creating file systems on boot environment .

Preserving file system for on .

Mounting file systems for boot environment .

Calculating required sizes of file systems for boot environment .

Populating file systems on boot environment .

Checking selection integrity.

Integrity check OK.

Preserving contents of mount point .

Copying file systems that have not been preserved.

Creating shared file system mount points.

Creating compare databases for boot environment .

Creating compare database for file system .

Updating compare databases on boot environment .

Making boot environment bootable.

Setting root slice to Solaris Volume Manager metadevice .

Population of boot environment successful.

Creation of boot environment successful.

Les BE source et cible sont créés avec lucreate et quelques paramètres :

Si j'avais séparé /usr et /var, c'est ici que j'aurai du ajouter des paramètres -m à lucreate.

C'est cette série d'options qui rend LU si puissant, et en contrepartie c'est toute la difficulté de l'outil. Prenez bien le temps de tout comprendre, adaptez à votre configuration, lisez les documents (voir Biblio) pour comprendre les nombreux exemples. Malgrè tout, si LU ne fait pas ce que vous voulez, rien n'est perdu (voir Galères).

Les nombreux messages de lucreate reprennent mes explications. On note que c0t0d0s0/d10/d0 est nommé Boot Environment d0 par LU.

root@quassia# lustatus

Boot Environment Is Active Active Can Copy

Name Complete Now On Reboot Delete Status

-------------------------- -------- ------ --------- ------ ----------

d0 yes yes yes no -

sol10116 yes no no yes -

root@quassia# metastat -p

d120 -m d20 1

d20 1 1 c0t1d0s0

d7 -m d27 d17 1

d27 1 1 c0t1d0s7

d17 1 1 c0t0d0s7

d1 -m d21 d11 1

d21 1 1 c0t1d0s1

d11 1 1 c0t0d0s1

d0 -m d10 1

d10 1 1 c0t0d0s0

Pour vérifier ou on en est, lustatus indique que le BE source est d0, et que le BE cible est sol10116, ainsi que leur status.

metastat permet de confirmer que LU a bien cassé le miroir système : d0 n'est plus qu'un demi-miroir constitué du metadevice d10. LU a également créé le futur miroir d120 et lui a attaché d20. On a maintenant 2 demi-miroirs, 1 est actif (BE source) et l'autre est prêt à être upgradé. d120 n'étant pas monté, son filesystème est quiescent, ce qui est optimal pour une upgrade ou un passage de patches (autre utilisation courante de LU).

4.2 Upgrade

La biscotte est dans le mange-disque, le thé est dans la tasse : plug and pray !

root@quassia# luupgrade \

-u \

-n sol10116 \

-s /cdrom/cdrom0/s0

Validating the contents of the media .

The media is a standard Solaris media.

The media contains an operating system upgrade image.

The media contains version <10>.

Constructing upgrade profile to use.

Locating the operating system upgrade program.

Checking for existence of previously scheduled Live Upgrade requests.

Creating upgrade profile for BE .

Determining packages to install or upgrade for BE .

Performing the operating system upgrade of the BE .

CAUTION: Interrupting this process may leave the boot environment unstable or unbootable.

Upgrading Solaris: 2% completed

[...]

Upgrading Solaris: 100% completed

Installation of the packages from this media is complete.

Updating package information on boot environment .

Package information successfully updated on boot environment .

Adding operating system patches to the BE .

The operating system patch installation is complete.

INFORMATION: The file on boot

environment contains a log of the upgrade operation.

INFORMATION: The file on boot

environment contains a log of cleanup operations required.

INFORMATION: Review the files listed above. Remember that all of the

files

are located on boot environment . Before you activate boot

environment , determine if any additional system maintenance is

required or if additional media of the software distribution must be

installed.

The Solaris upgrade of the boot environment is complete.

Et voila ! L'upgrade s'est bien déroulée pendant que je continuais tranquillement à travailler sur ma Blade.

J'ai utilisé la commande luupgrade, avec quelques paramètres :

root@quassia# lustatus

Boot Environment Is Active Active Can Copy

Name Complete Now On Reboot Delete Status

-------------------------- -------- ------ --------- ------ ----------

d0 yes yes yes no -

sol10116 yes no no yes -

lustatus me dit que mes 2 BE sont toujours là.

4.3 Activation du BE cible

Par cette étape, on configure Solaris pour que le prochain reboot se fasse sur le BE cible. / sera monté sur d120 (c'est à dire d20, ou encore c0t1d0s0 ou encore sol10116 pour M. au fond, près du radiateur. Oui, vous, là. Votre nom je vous prie ?).

On note que /etc/vfstab est alors automatiquement mis à jour dans le BE cible. Dans le BE source, il ne change pas.

root@quassia# luactivate sol10116

**********************************************************************

The target boot environment has been activated. It will be used when you

reboot. NOTE: You MUST NOT USE the reboot, halt, or uadmin commands. You

MUST USE either the init or the shutdown command when you reboot. If you

do not use either init or shutdown, the system will not boot using the

target BE.

**********************************************************************

In case of a failure while booting to the target BE, the following process

needs to be followed to fallback to the currently working boot environment:

1. Enter the PROM monitor (ok prompt).

2. Change the boot device back to the original boot environment by typing:

setenv boot-device /pci@1e,600000/ide@d/disk@0,0:a

3. Boot to the original boot environment by typing:

boot

**********************************************************************

Activation of boot environment successful.

4.4 Reboot

C'est la dernière limite. Lisez bien les infos, notez bien les recommandations au cas ou Solaris ne boot pas, qui seront adaptées à votre configuration. Une dernière vérification avant le grand saut :

root@quassia# lustatus

Boot Environment           Is       Active Active    Can    Copy

Name                       Complete Now    On Reboot Delete Status

-------------------------- -------- ------ --------- ------ ----------

d0                         yes      yes    no        no     -

sol10116                   yes      no     yes       no     -

Cette fois sol10116 est activé. On peut encore revenir en arrière avec lucancel, mais on n'est pas des moules :

root@quassia# init 6

Je passe sur les messages de shutdown et reboot, je laisse mouliner le bouzin jusqu'à l'apparition du tout nouveau tout beau écran de dtlogin.

5. C'est fait !

    5.1 Vérifications de base

sreboux@quassia$ cat /etc/release

                         Solaris 10 11/06 s10s_u3wos_10 SPARC

           Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.

                        Use is subject to license terms.

                            Assembled 14 November 2006

On remarque que quassia tourne maintenant sous Solaris 10 11/06.

sreboux@quassia$ mount

/ on /dev/md/dsk/d120 read/write/setuid/devices/intr/largefiles/logging/xattr/onerror=panic/dev=1540078 on Thu Jun 7 13:52:24 2007

sreboux@quassia$ grep d120 /etc/vfstab

/dev/md/dsk/d120 /dev/md/rdsk/d120 / ufs 1 no -

[...]

/ est bien monté sur d120, vfstab est bien à jour.

root@quassia# lustatus

Boot Environment           Is       Active Active    Can    Copy

Name                       Complete Now    On Reboot Delete Status

-------------------------- -------- ------ --------- ------ ----------

d0                         yes      no     no        yes    -

sol10116                   yes      yes    yes       no     -

sol10116 (qui était le BE cible) est maintenant le BE actif. d0 (qui était le BE source) est inactif, il peut être supprimé.

À ce stade, il est toujours possible de revenir en arrière : il suffit de réactiver d0 avec luactivate et de rebooter. Si vraiment on n'est pas satisfait, on supprime d120 avec metaclear et on réattache d20 à d0 avec metattach, on vire sol10116 avec ludelete et on est revenu au debut.

less /var/sadm/install_data/upgrade_log

less /var/sadm/system/data/upgrade_cleanup

less /var/adm/messages

upgrade_log donne le détail des paquets mis à jour, pour information.

upgrade_cleanup est à lire absolument car il indique quels fichiers système ont (ou non) été modifiés. Cette étape manuelle est indispensable.

messages est étrangement désordonné, en tout cas chez moi : les entrées correspondant au reboot sont au milieu du fichier ! Mais elles sont là et n'indiquent pas d'erreur majeure.

sreboux@quassia$ uname -a

SunOS quassia 5.10 Generic_118833-33 sun4u sparc SUNW,Sun-Blade-1500

Je remarque que le niveau de paches kernel a regressé : il est passé de 118833-36 à 118833-33, qui était probablement la dernière révision de SunOS disponible à la date de pressage du DVD de Solaris. En gros je suis bon pour une nouvelle série de patches, ce qui me donnera l'occasion de refaire joujou avec LU.

5.2 Reconstruction du RAID 1

Je suis satisfait de mon upgrade, je reconstruits le miroir système.

root@quassia# ludelete d0

Determining the devices to be marked free.

Updating boot environment configuration database.

Updating boot environment description database on all BEs.

Updating all boot environment configuration databases.

Boot environment deleted.

root@quassia# lustatus

Boot Environment           Is       Active Active    Can    Copy

Name                       Complete Now    On Reboot Delete Status

-------------------------- -------- ------ --------- ------ ----------

sol10116                   yes      yes     yes      no     -

ludelete supprime le BE obsolète, ca n'était peut être pas utile. sol10116 reste visible, on ne peut pas supprimer le BE courant. Il servira de BE source pour une prochaine utilisation de LU, ce qui sera par exemple l'occasion de renommer le miroir en d0.

root@quassia# metaclear d0

root@quassia# metattach d120 d10/p>

metaclear et metattach reconstruisent le miroir en attachant d10 à d120. Les données sont copiées de c0t1d0s0 vers c0t0d0s0, ce que confirment l'activité des disques avec iostat.

root@quassia# vi /etc/lvm/md.tab

root@quassia$ metastat -p

d7 -m d27 d17 1

d27 1 1 c0t1d0s7

d17 1 1 c0t0d0s7

d120 -m d20 d10 1

d20 1 1 c0t1d0s0

d10 1 1 c0t0d0s0

d1 -m d21 d11 1

d21 1 1 c0t1d0s1

d11 1 1 c0t0d0s1

C'est une bonne pratique de tenir à jour /etc/lvm/md.tab, qui ne contient ni plus ni moins qu'une sortie de metastat -p. Ce fichier peut servir pour reconstruire totalement et rapidement une configuration de SVM.

6. Galères

Quelques contre-temps et blagues de LU m'ont permis de valider mes connaissances en SVM et de tester les multiples possibilités de reprise sur erreur de l'outil :

7. Biblio

Quelques saines lectures m'ont permises d'élaborer cet article :

Sébastien Reboux

Début de pageDébut de pageDébut de page

Dernière mise à jour de cette page : Mercredi 13 Juin 2007. Version : 1.00

[ Accueil | Editorial | Forums | Petites Annonces | Articles | Téléchargement | Sélection de Liens | Infos Site | ]

AntiRobot