Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 15 de enero de 2009 - Jueves
En un artículo anterior movimos nuestras máquinas a ZFS "root"/"boot". Una de las consecuencias es que todas las particiones del sistema operativo primitivo bajo UFS residen ahora bajo un único "dataset" ZFS. Esto incluye el directorio "/var".
Sería interesante separar dicho directorio en su propio "dataset" ZFS, de forma que se le pueda fijar una cuota máxima de disco, por ejemplo. O comprimirlo al vuelo con GZIP (mi "/var" mide unos 6 gigabytes). O, por motivos de seguridad, no permitir ejecutables SUID o DEVICES en el mismo.
Durante una instalación desde cero de Solaris 10 Update 6, el instalador permite separar "/var", pero si estamos haciendo un "Live Upgrade" no podemos hacerlo. A menos que lo hagamos a mano.
Hay un par de hilos al respecto en las listas de correo de OpenSolaris. En concreto, una respuesta interesante de la propia Lori Art, que fue la persona de SUN a cargo de desarrollar la tecnología ZFS "root"/"boot". En dicho mensaje se explica cómo separar "/var" en su propio "dataset". Lo hace con el "Boot Environment" corriendo, lo que no solo me parece peligroso, sino que nos deja sin opciones si tenemos problemas y queremos dar marcha atrás.
Yo voy a crear un nuevo "Boot Enviroment", para no correr ningún riesgo. Si tenemos problemas, basta con activar el BE antiguo durante el arranque del equipo.
Lo primero que hacemos es crear un BE nuevo:
[root@tesalia z]# lustatus Boot Environment Is Active Active Can Copy Name Complete Now On Reboot Delete Status -------------------------- -------- ------ --------- ------ ---------- Solaris10u6ZFS yes yes yes no - Solaris10u6ZFS_BACKUP yes no no yes - [root@tesalia z]# lucurr Solaris10u6ZFS [root@tesalia z]# lucreate -n Solaris10u6 Checking GRUB menu... System has findroot enabled GRUB Analyzing system configuration. Comparing source boot environment <Solaris10u6ZFS> 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. Updating system configuration files. The device </dev/dsk/c5t0d0s0> is not a root device for any boot environment; cannot get BE ID. Creating configuration for boot environment <Solaris10u6>. Source boot environment is <Solaris10u6ZFS>. Creating boot environment <Solaris10u6>. Cloning file systems from boot environment <Solaris10u6ZFS> to create boot environment <Solaris10u6>. Creating snapshot for <datos/ROOT/Solaris10u6ZFS> on <datos/ROOT/Solaris10u6ZFS@Solaris10u6>. Creating clone for <datos/ROOT/Solaris10u6ZFS@Solaris10u6> on <datos/ROOT/Solaris10u6>. Setting canmount=noauto for </> in zone <global> on <datos/ROOT/Solaris10u6>. Saving existing file </boot/grub/menu.lst> in top level dataset for BE <Solaris10u6> as <mount-point>//boot/grub/menu.lst.prev. Saving existing file </boot/grub/menu.lst> in top level dataset for BE <Solaris10u6ZFS_BACKUP> as <mount-point>//boot/grub/menu.lst.prev. File </boot/grub/menu.lst> propagation successful Copied GRUB menu from PBE to ABE No entry for BE <Solaris10u6> in GRUB menu Population of boot environment <Solaris10u6> successful. Creation of boot environment <Solaris10u6> successful. [root@tesalia z]# lustatus Boot Environment Is Active Active Can Copy Name Complete Now On Reboot Delete Status -------------------------- -------- ------ --------- ------ ---------- Solaris10u6ZFS yes yes yes no - Solaris10u6ZFS_BACKUP yes no no yes - Solaris10u6 yes no no yes -
Crear el nuevo BE nos lleva menos de un minuto. ¡¡Bien por ZFS!! (y sus "snapshots" y clones :-)).
Ahora montamos los "datasets" del BE recién creado, creamos el "dataset" nuevo y movemos los datos. A diferencia del mensaje indicado, nosotros utilizaremos el "/var" del nuevo BE, no del BE activo en este momento. Me parece menos arriesgado.
[root@tesalia z]# zfs set mountpoint=/mnt datos/ROOT/Solaris10u6 [root@tesalia z]# zfs mount datos/ROOT/Solaris10u6 [root@tesalia z]# cd /mnt [root@tesalia mnt]# mv var var2 [root@tesalia mnt]# zfs create -o canmount=noauto datos/ROOT/Solaris10u6/var [root@tesalia mnt]# zfs mount datos/ROOT/Solaris10u6/var [root@tesalia mnt]# d | grep -i var drwxr-xr-x 2 root root 2 Jan 15 22:52 var drwxr-xr-x 50 root sys 50 Nov 3 20:09 var2 [root@tesalia mnt]# chgrp sys var [root@tesalia mnt]# d | grep -i var drwxr-xr-x 2 root sys 2 Jan 15 22:52 var drwxr-xr-x 50 root sys 50 Nov 3 20:09 var2 [root@tesalia mnt]# zfs set compression=gzip-9 datos/ROOT/Solaris10u6/var [root@tesalia mnt]# cd var2 [root@tesalia var2]# mv * ../var [root@tesalia var2]# d total 6 drwxr-xr-x 2 root sys 2 Jan 15 23:18 . drwxr-xr-x 57 root root 119 Jan 15 22:53 .. [root@tesalia var2]# cd .. [root@tesalia mnt]# rmdir var2 [root@tesalia mnt]# cd [root@tesalia /]# zfs umount datos/ROOT/Solaris10u6/var [root@tesalia /]# zfs umount datos/ROOT/Solaris10u6 [root@tesalia /]# zfs get all datos/ROOT/Solaris10u6/var | head NAME PROPERTY VALUE SOURCE datos/ROOT/Solaris10u6/var type filesystem - datos/ROOT/Solaris10u6/var creation Thu Jan 15 23:39 2009 - datos/ROOT/Solaris10u6/var used 5.13G - datos/ROOT/Solaris10u6/var available 56.1G - datos/ROOT/Solaris10u6/var referenced 5.13G - datos/ROOT/Solaris10u6/var compressratio 1.28x - datos/ROOT/Solaris10u6/var mounted yes - datos/ROOT/Solaris10u6/var quota none default datos/ROOT/Solaris10u6/var reservation none default [root@tesalia /]# luactivate Solaris10u6 System has findroot enabled GRUB Generating boot-sign, partition and slice information for PBE <Solaris10u6ZFS> A Live Upgrade Sync operation will be performed on startup of boot environment <Solaris10u6>. Generating boot-sign for ABE <Solaris10u6> Generating partition and slice information for ABE <Solaris10u6> Copied boot menu from top level dataset. Generating multiboot menu entries for PBE. Generating multiboot menu entries for ABE. Disabling splashimage Re-enabling splashimage No more bootadm entries. Deletion of bootadm entries is complete. GRUB menu default setting is unaffected Done eliding bootadm entries. ********************************************************************** 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. Boot from Solaris failsafe or boot in single user mode from the Solaris Install CD or Network. 2. Mount the Parent boot environment root slice to some directory (like /mnt). You can use the following command to mount: mount -Fzfs /dev/dsk/c5t0d0s0 /mnt 3. Runutility with out any arguments from the Parent boot environment root slice, as shown below: /mnt/sbin/luactivate 4. luactivate, activates the previous working boot environment and indicates the result. 5. Exit Single User mode and reboot the machine. ********************************************************************** Modifying boot archive service Propagating findroot GRUB for menu conversion. File </etc/lu/installgrub.findroot> propagation successful File </etc/lu/stage1.findroot> propagation successful File </etc/lu/stage2.findroot> propagation successful File </etc/lu/GRUB_capability> propagation successful Deleting stale GRUB loader from all BEs. File </etc/lu/installgrub.latest> deletion successful File </etc/lu/stage1.latest> deletion successful File </etc/lu/stage2.latest> deletion successful Activation of boot environment <Solaris10u6> successful. [root@tesalia /]# lustatus Boot Environment Is Active Active Can Copy Name Complete Now On Reboot Delete Status -------------------------- -------- ------ --------- ------ ---------- Solaris10u6ZFS yes yes no no - Solaris10u6ZFS_BACKUP yes no no yes - Solaris10u6 yes no yes no -
Creamos un nuevo "dataset" para "/var" y le damos los permisos y los atributos apropiados. Luego movemos los datos necesarios al nuevo "dataset". Desmontamos los "datasets" y activamos el nuevo BE.
Ahora reiniciamos y arrancamos el BE nuevo:
[root@tesalia /]# lucurr Solaris10u6 [root@tesalia /]# lustatus Boot Environment Is Active Active Can Copy Name Complete Now On Reboot Delete Status -------------------------- -------- ------ --------- ------ ---------- Solaris10u6ZFS yes no no yes - Solaris10u6ZFS_BACKUP yes no no yes - Solaris10u6 yes yes yes no -
Todo parece ir bien. Ya solo queda actualizar los scripts de backup para que tengan en cuenta la nueva situación.
El otro detalle a tener en cuenta es que cuando hagamos "snapshots" del BE, hay que recordar hacerlo en los dos "datasets".
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS