LiveUpgrade est un outil conçu par Sun pour simplifier les mises à jour de Solaris, qu'il s'agisse d'un upgrade vers une version plus récente ou simplement d'appliquer des patchs. Le principe est simple : l'outil crée une copie du système (appelée ABE, pour Alternate Boot Environment), et applique toutes les modifications souhaitées à cette copie. Le gros intérêt est que cette opération peut s'effectuer sans arrêter ni modifier le système actif - le lecteur avisé en déduira aisément d'où provient le nom de l'outil. Il suffit de redémarrer sur le nouvel environnement une fois la mise à jour terminée, et, en cas de problème, il est toujours possible de repartir sur l'environnement initial, qui n'a pas été modifié. La seule contrainte associée à cette solution est le besoin d'espace disque : il est nécessaire de disposer au moins d'autant d'espace que ce qui est utilisé par le système, et souvent un peu plus, pour pouvoir appliquer les patchs, par exemple.

LiveUpgrade sait gérer les filesystems ufs et vxfs, mais pas zfs. Le corollaire immédiat est donc que, bien que l'outil soit capable de mettre à jour un système Solaris 10 incluant des zones non-globales, il ne sera pas adapté si celles-ci sont installées sur des filesystems zfs (en pratique, c'est possible, à condition de spécifier un autre type de filesystem comme cible dans l'ABE, et donc d'abandonner l'utilisation de zfs dans ces zones).

Cependant, même sur des filesystems ufs, l'outil peut générer des erreurs parfois difficiles à interpréter. Voici la transcription d'une tentative de création d'un environnement de boot alterné sur une de mes machines :

# lucreate -n s10patch -m /:/dev/dsk/emcpower11a:ufs -m /var:/dev/dsk/emcpower11d:ufs -m /var/crash:/dev/dsk/emcpower11e:ufs -m /zones:/dev/dsk/emcpower10a:ufs -m -:/dev/dsk/emcpower11b:swap 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. 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; cannot get BE ID. Creating configuration for boot environment . Source boot environment is . Creating boot environment . Creating file systems on boot environment . Creating file system for in zone on . Creating file system for in zone on . Creating file system for in zone on . Creating file system for in zone 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. Populating contents of mount point . Populating contents of mount point . Populating contents of mount point . Populating contents of mount point . Copying. Creating shared file system mount points. Copying root of zone . Creating compare databases for boot environment . Creating compare database for file system . Creating compare database for file system . Creating compare database for file system . Creating compare database for file system . Updating compare databases on boot environment . Making boot environment bootable. prtvtoc: /dev/rds2: No such file or directory sed: command garbled: s/^\([ ]*k/emcpower11a[ ][ ]*\)[^ ]*\(.*\)$/\12\2/g ERROR: Unable to write vtoc to device boot environment ID <2> BE . fmthard: Cannot stat device /dev/rds2 ERROR: Update of loader failed. ERROR: Unable to umount ABE : cannot make ABE bootable. Making the ABE bootable FAILED. ERROR: Unable to make boot environment bootable. ERROR: Unable to populate file systems on boot environment . ERROR: Cannot make file systems for boot environment .

L'environnement concerné est une machine connectée à une baie SAN EMC², utilisant PowerPath pour gérer la répartition de charge et la redondance des accès Fiber Channel au SAN, mais n'utilisant pas de gestionnaire de volumes (VxVM ou SVM). De ce fait, les noms de devices utilisés sont du type /dev/dsk/emcpowerX, et non /dev/dsk/cXtXdXsX. Et c'est bien de là que vient le problème!

Bien que ce ne soit pas documenté, l'outil LiveUpgrade est incapable de gérer les noms de devices de type emcpowerX. Le problème est connu chez Sun, mais il n'y a pas de BugID, seulement une RFE … et les RFE sont des documents internes, inaccessibles pour les utilisateurs.

La seule solution dans ce cas est d'utiliser les noms de devices en cXtXdXsX. Par exemple, pour le device emcpower11, trouvons les devices correspondant :

# /etc/powermt display dev=emcpower11 Pseudo name=emcpower11a Symmetrix ID=000290102498 Logical device ID=0FAD state=alive; policy=SymmOpt; priority=0; queued-IOs=0 ============================================================================== ---------------- Host --------------- - Stor - -- I/O Path - -- Stats --- ### HW Path I/O Paths Interf. Mode State Q-IOs Errors ============================================================================== 3072 pci@8,700000/SUNW,qlc@1,1/fp@0,0 c4t5006048452A73886d273s0 FA 7aA active alive 0 0 3072 pci@8,700000/SUNW,qlc@1,1/fp@0,0 c4t5006048452A73887d273s0 FA 8aA active alive 0 0

Je peux donc utiliser de manière totalement indifférente c4t5006048452A73886d273sX ou c4t5006048452A73887d273sX pour les slices du disque correspondant. Et là, paf, mon lucreate fonctionne.