Upgrade zpool

Cada vez que se parchea un servidor o se sube la release es muy probable que exista una nueva versión de ZFS. Por ello, si queremos tener las nuevas características y funcionalidades deberemos actualizar nuestros zpools. Para ello basta con lanzar el comando zpool upgrade . Podemos ver en la ayuda las diferentes versiones que disponemos en nuestro sistema:


root@server1 # zpool help upgrade

usage:
        upgrade
        upgrade -v
        upgrade [-V version]

root@server1 # zpool upgrade -v
This system is currently running ZFS pool version 32.

The following versions are supported:

VER  DESCRIPTION
—  ——————————————————–
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit
 15  user/group space accounting
 16  stmf property support
 17  Triple-parity RAID-Z
 18  Snapshot user holds
 19  Log device removal
 20  Compression using zle (zero-length encoding)
 21  Reserved
 22  Received properties
 23  Slim ZIL
 24  System attributes
 25  Improved scrub stats
 26  Improved snapshot deletion performance
 27  Improved snapshot creation performance
 28  Multiple vdev replacements
 29  RAID-Z/mirror hybrid allocator
 30  Reserved
 31  Improved ‘zfs list’ performance
 32  One MB blocksize

For more information on a particular version, including supported releases,
see the ZFS Administration Guide.
Si utilizamos únicamente el comando zpool upgrade nos muestra la versión que está corriendo actualmente y la versión con la que se creó el pool, con lo que será posible actualizarlo:

root@server1 # zpool upgrade 
This system is currently running ZFS pool version 32.

The following pools are out of date, and can be upgraded.  After being
upgraded, these pools will no longer be accessible by older software versions.

VER  POOL
—  ————
29   test-zpool

Use ‘zpool upgrade -v’ for a list of available versions and their associated
features.

Para actualizar el pool lo haremos de la siguiente forma:

root@server1 # zpool upgrade -V 32 test-zpool
This system is currently running ZFS pool version 32.

Successfully upgraded ‘test-zpool’ from version 29 to version 32
Se puede verificar que todos los pools están a la última versión:

root@server1 # zpool upgrade 
This system is currently running ZFS pool version 32.

All pools are formatted using this version.
Anuncios

Identificar zona global

En Solaris es posible crear zonas que no son mas que “particiones” del sistema operativo. Desde la zona Global, el equivalente a un ESXi en VMware, puede acceder a los procesos y sistemas de ficheros de las zonas. No así desde una zona, que están aisladas unas de otras y es imposible acceder a la zona global desde una zona. Es mas, es muy difícil identificar la zona global sobre la que esta corriendo una zona en concreto.

Para hacer mas fácil esta identificación he montado un script que lo que hace es generar un fichero /etc/GLOBALZONE en cada una de las zonas con el nombre de la zona:

#!/usr/bin/python

#
# zoneadm list output
# zoneadm list -cv
#  ID NAME             STATUS     PATH                           BRAND    IP    
#   0 global           running    /                              native   shared
#   5 zona1      running    /zonas/zona1             native   shared
#   7 zona2      running    /zonas/zona2             native   shared
#   – zona3      installed  /zonas/zona3             native   shared
#
#
from subprocess import *

p = Popen([‘hostname’], stdout=PIPE, stderr=PIPE)
hostname, err = p.communicate() 

p = Popen([‘zoneadm’, ‘list’, ‘-cv’], stdout=PIPE, stderr=PIPE)
zoneList, err = p.communicate()

for zone in zoneList.splitlines():
name = zone.split()[1]
if (name ==’NAME’) or (name == ‘global’): continue
cfgfile = “/zonas/%s/root/etc/GLOBALZONE” % name
try:
f = open(cfgfile, “w”)
f.write(hostname)
f.close()
except:
pass
El script lo he configurado en el cron para que se ejecute cada hora por ejemplo. De esta forma, si creo alguna zona nueva, o si muevo una zona de un servidor a otro, este fichero se actualizará.

También se puede modificar el perfil del usuario, de modo que el nombre de la zona global aparezca en la variable PS1:
PS1 = "\u@\h \w (`cat /etc/GLOBALZONE`) $ "