Guía de administración de Oracle Solaris ZFS

Capítulo 10 Temas avanzados de Oracle Solaris ZFS

En este capítulo se describen los volúmenes de ZFS, el uso de ZFS en un sistema Solaris con zonas instaladas, agrupaciones raíz alternativas de ZFS y perfiles de derechos de ZFS.

Este capítulo se divide en las secciones siguientes:

Volúmenes de ZFS

Un volumen ZFS es un conjunto de datos que representa un dispositivo de bloques. Los volúmenes ZFS se identifican como dispositivos en el directorio /dev/zvol/{dsk,rdsk}/pool.

En el ejemplo siguiente, se crea un volumen de ZFS de 5 GB, tank/vol:


# zfs create -V 5gb tank/vol

Al crear un volumen, automáticamente se reserva espacio para el tamaño inicial del volumen, a fin de evitar imprevistos. Por ejemplo, si disminuye el tamaño del volumen, los datos podrían dañarse. El cambio del volumen se debe realizar con mucho cuidado.

Además, si crea una instantánea de un volumen que cambia de tamaño, podría provocar incoherencias en el sistema de archivos al intentar restaurar una versión anterior de la instantánea o crear un clon de ésta.

Para obtener información sobre las propiedades de sistemas de archivos que se pueden aplicar a volúmenes, consulte la Tabla 6–1.

Si utiliza un sistema Solaris con zonas instaladas, los volúmenes de ZFS no se pueden crear ni clonar en una zona no global. Cualquier intento de hacerlo, fallará. Para obtener información sobre el uso de volúmenes de ZFS en una zona global, consulte Adición de volúmenes de ZFS a una zona no global.

Uso de un volumen de ZFS como dispositivo de volcado o intercambio

Durante la instalación de un sistema de archivos raíz ZFS o una migración desde un sistema de archivos raíz UFS, se crea un dispositivo de intercambio en un volumen ZFS de la agrupación raíz ZFS. Por ejemplo:


# swap -l
swapfile                  dev    swaplo   blocks     free
/dev/zvol/dsk/rpool/swap 253,3        16  8257520  8257520

Durante la instalación de un sistema de archivos raíz ZFS o una migración desde un sistema de archivos raíz UFS, se crea un dispositivo de volcado en un volumen ZFS de la agrupación raíz ZFS. Después de configurarse, no hace falta administrar el dispositivo de volcado. Por ejemplo:


# dumpadm
      Dump content: kernel pages
       Dump device: /dev/zvol/dsk/rpool/dump (dedicated)
Savecore directory: /var/crash/t2000
  Savecore enabled: yes

Si necesita modificar el área de intercambio o el dispositivo de volcado tras instalar o actualizar el sistema, utilice los comandos swap y dumpadm como en las versiones anteriores de Solaris. Para crear un área de intercambio adicional, cree un volumen ZFS de un tamaño específico y permita el intercambio en dicho dispositivo. Por ejemplo:


# zfs create -V 2G rpool/swap2
# swap -a /dev/zvol/dsk/rpool/swap2
# swap -l
swapfile                   dev  swaplo blocks   free
/dev/zvol/dsk/rpool/swap  256,1      16 2097136 2097136
/dev/zvol/dsk/rpool/swap2 256,5      16 4194288 4194288

No intercambie a un archivo en un sistema de archivos ZFS. La configuración de archivos de intercambio ZFS no es posible.

Para obtener información sobre cómo ajustar el tamaño de los volúmenes de intercambio y volcado, consulte Ajuste del tamaño de los dispositivos de intercambio y volcado ZFS.

Uso de un volumen de ZFS como objetivo iSCSI de Solaris

Puede crear fácilmente un volumen de ZFS como objetivo iSCSI estableciendo la propiedad shareiscsi en el volumen. Por ejemplo:


# zfs create -V 2g tank/volumes/v2
# zfs set shareiscsi=on tank/volumes/v2
# iscsitadm list target
Target: tank/volumes/v2
    iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a
    Connections: 0

Tras crear el objetivo iSCSI, configure el iniciador iSCSI. Para obtener más información sobre objetivos e iniciadores iSCSI de Solaris, consulte el Capítulo 14, Configuring Oracle Solaris iSCSI Targets and Initiators (Tasks) de System Administration Guide: Devices and File Systems.


Nota –

Los objetivos iSCSI de Solaris también se pueden crear y administrar con el comando iscsitadm. Si se establece la propiedad shareiscsi en un volumen de ZFS, no utilice el comando iscsitadm para crear el mismo dispositivo de destino. De lo contrario, se creará información de destino duplicada para el mismo dispositivo.


Un volumen de ZFS como objetivo iSCSI se administra de la misma manera que cualquier otro conjunto de datos de ZFS. Sin embargo, las funciones rename, export e import son algo distintas en los objetivos iSCSI.

Toda la información de configuración de objetivos iSCSI se guarda con el conjunto de datos. Al igual que un sistema de archivos NFS compartido, un objetivo iSCSI que se importa a otro sistema se comparte correspondientemente.

Uso de ZFS en un sistema Solaris con zonas instaladas

Las secciones siguientes explican cómo utilizar ZFS en un sistema con zonas de Oracle Solaris:

Para obtener información sobre cómo configurar zonas en un sistema con un sistema de archivos raíz ZFS que se va a migrar o al que se aplicarán parches con Actualización automática de Solaris, consulte Uso de Actualización automática de Oracle Solaris para migrar o actualizar un sistema con zonas (Solaris 10 10/08) o Uso de Actualización automática de Oracle Solaris para migrar o actualizar un sistema con zonas (al menos Solaris 10 5/09).

Al asociar conjuntos de datos de ZFS con zonas, hay que tener en cuenta los puntos siguientes:

En las secciones siguientes, un conjunto de datos de ZFS hace referencia a un sistema de archivos o un clon.

La adición de un conjunto de datos permite que la zona no global comparta espacio en el disco con la zona global, si bien el administrador de zona no puede controlar las propiedades ni crear sistemas de archivos en la jerarquía de sistemas de archivos subyacente. Es lo mismo que agregar cualquier otro sistema de archivos a una zona; es aconsejable utilizarlo si la finalidad principal es compartir espacio.

ZFS permite también la delegación de conjuntos de datos a una zona no global, con lo cual el administrador de zona dispone de control absoluto sobre el conjunto de datos y todos sus conjuntos de datos secundarios. El administrador de zona puede crear y destruir sistemas de archivos o clones de ese conjunto de datos, así como modificar las propiedades de los conjuntos de datos. El administrador de zona no puede incidir en los conjuntos de datos que no se hayan agregado a la zona ni sobrepasar las cuotas de nivel superior establecidas en el conjunto de datos delegado.

Al utilizar ZFS en un sistema con zonas Oracle Solaris instaladas hay que tener en cuenta los puntos siguientes:

Adición de sistemas de archivos ZFS a una zona no global

Un sistema de archivos ZFS se puede agregar como sistema de archivos genérico si la finalidad es compartir espacio con la zona global. Un sistema de archivos ZFS agregado a una zona no global debe tener la propiedad mountpoint establecida en legacy.

Un sistema de archivos ZFS puede agregarse a una zona no global mediante el comando zonecfg y el subcomando add fs.

En el ejemplo siguiente, un administrador de zona global agrega a la zona no global un sistema de archivos ZFS desde la zona global:


# zonecfg -z zion
zonecfg:zion> add fs
zonecfg:zion:fs> set type=zfs
zonecfg:zion:fs> set special=tank/zone/zion
zonecfg:zion:fs> set dir=/export/shared
zonecfg:zion:fs> end

Esta sintaxis agrega el sistema de archivos ZFS tank/zone/zion a la zona ya configurada zion, montada en /export/shared. La propiedad mountpoint del sistema de archivos se debe establecer en legacy y el sistema de archivos ya no se puede montar en otra ubicación. El administrador de zona puede crear y destruir archivos en el sistema de archivos. El sistema de archivos no se puede volver a montar en una ubicación distinta; el administrador de zona tampoco puede modificar propiedades del sistema de archivos, por ejemplo atime, readonly o compression. El administrador de zona global se encarga de configurar y controlar las propiedades del sistema de archivos.

Para más información sobre el comando zonecfg y la configuración de tipos de recursos con zonecfg, consulte la Parte II, Zonas de Guía de administración de sistemas: administración de recursos y contenedores de Oracle Solaris y zonas de Oracle Solaris.

Delegación de conjuntos de datos a una zona no global

Para cumplir el objetivo principal, que es delegar la administración del almacenamiento a una zona, ZFS permite agregar conjuntos de datos a una zona no global mediante el comando zonecfg y el subcomando add dataset.

En el ejemplo siguiente, un administrador de zona global delega a la zona no global un sistema de archivos ZFS desde la zona global:


# zonecfg -z zion
zonecfg:zion> add dataset
zonecfg:zion:dataset> set name=tank/zone/zion
zonecfg:zion:dataset> end

A diferencia de agregar un sistema de archivos, esta sintaxis hace que el sistema de archivos ZFS tank/zone/zion quede visible en la zona ya configurada zion. El administrador de zona puede establecer las propiedades del sistema de archivos, así como crear sistemas de archivos descendientes. Además, puede crear instantáneas y clones, y controlar toda la jerarquía del sistema de archivos.

Si utiliza Actualización automática Oracle de Solaris para actualizar el entorno de inicio de ZFS con zonas no globales, suprima en primer lugar cualquier conjunto de datos delegado. De lo contrario, Actualización automática Oracle de Solaris fallará por un error de sistema de archivos de sólo lectura. Por ejemplo:


zonecfg:zion>
zonecfg:zion> remove dataset name=tank/zone/zion
zonecfg:zion1> exit

Para obtener más información sobre las acciones factibles en las zonas, consulte Administración de propiedades de ZFS en una zona.

Adición de volúmenes de ZFS a una zona no global

Los volúmenes de ZFS no se pueden agregar a una zona no global mediante el comando zonecfg y el subcomando add dataset. Sin embargo, pueden agregarse volúmenes a una zona utilizando el comando zonecfg y el subcomando add device.

En el ejemplo siguiente, un administrador de zona global agrega a la zona no global un volumen ZFS desde la zona global:


# zonecfg -z zion
zion: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zion> create
zonecfg:zion> add device
zonecfg:zion:device> set match=/dev/zvol/dsk/tank/vol
zonecfg:zion:device> end

Esta sintaxis añade el volumen tank/vol a la zona zion. Agregar un volumen sin formato a una zona conlleva riesgos en la seguridad, incluso si el volumen no se corresponde con un dispositivo físico. En particular, el administrador de zona podría crear sistemas de archivos incorrectamente formados que causen confusión en el sistema al intentar un montaje. Para obtener más información sobre cómo agregar dispositivos a zonas y sus riesgos en la seguridad, consulte Interpretación de la propiedad zoned.

Para obtener más información sobre cómo añadir dispositivos a zonas, consulte la Parte II, Zonas de Guía de administración de sistemas: administración de recursos y contenedores de Oracle Solaris y zonas de Oracle Solaris.

Uso de agrupaciones de almacenamiento de ZFS en una zona

Las agrupaciones de almacenamiento de ZFS no se pueden crear ni modificar en una zona. El modelo de administración delegada centraliza el control de dispositivos de almacenamiento físicos en la zona global y el control de almacenamiento virtual en zonas no globales. Aunque un conjunto de datos de agrupación se puede agregar a una zona, en una zona no se permite ningún comando que modifique las características físicas de la agrupación, por ejemplo crear, agregar o eliminar dispositivos. Aunque se agreguen dispositivos físicos a una zona mediante el comando zonecfg y el subcomando add device, o aunque se utilicen archivos, el comando zpool no permite la creación de agrupaciones en la zona.

Administración de propiedades de ZFS en una zona

Tras delegar un conjunto de datos a una zona, el administrador de zona puede controlar determinadas propiedades del conjunto. Cuando un conjunto de datos se delega a una zona, todos sus antecesores se ven como conjuntos de datos de sólo lectura, mientras que el conjunto de datos agregado y todos sus descendientes se pueden escribir. Por ejemplo, tenga en cuenta la configuración siguiente:


global# zfs list -Ho name
tank
tank/home
tank/data
tank/data/matrix
tank/data/zion
tank/data/zion/home

Si tank/data/zion se agrega a una zona, cada conjunto de datos tendrá las propiedades siguientes.

Conjunto de datos 

Visible 

Escribible 

Propiedades invariables 

tank

Sí 

No 

tank/home

No 

tank/data

Sí 

No 

tank/data/matrix

No 

tank/data/zion

Sí 

Sí 

sharenfs, zoned, quota, reservation

tank/data/zion/home

Sí 

Sí 

sharenfs, zoned

Cada conjunto primario de tank/zone/zion es visible como de sólo lectura, todos los descendientes se pueden escribir y los conjuntos de datos que no forman parte de la jerarquía superior no se ven. El administrador de zona no puede cambiar la propiedad sharenfs porque las zonas no globales no son válidas como servidores NFS. El administrador de zona tampoco puede cambiar la propiedad zoned; de lo contrario, habría un riesgo en la seguridad, como se explica en la sección siguiente.

Los usuarios con privilegios en la zona pueden cambiar otras propiedades configurables, excepto quota y reservation. Este comportamiento permite que el administrador de zona global controle la ocupación de espacio en el disco de todos los conjuntos de datos utilizados por la zona no global.

Asimismo, el administrador de zona global no puede modificar las propiedades sharenfs y mountpoint después de que un conjunto de datos se haya delegado a una zona no global.

Interpretación de la propiedad zoned

Si un conjunto de datos se delega a una zona no global, se debe marcar de modo especial para que determinadas propiedades no se interpreten en el contexto de la zona global. Tras haber delegado un conjunto de datos a una zona no global bajo el control de un administrador de zona, su contenido deja de ser fiable. Como en cualquier sistema de archivos, puede haber binarios setuid, vínculos simbólicos o contenido dudoso que podría repercutir negativamente en la seguridad de la zona global. Además, la propiedad mountpoint no se puede interpretar en el contexto de la zona global. Por otro lado, el administrador de zona podría afectar al espacio de nombre de la zona global. Para ocuparse de esto último, ZFS utiliza la propiedad zoned para indicar que un conjunto de datos se ha delegado a una zona no global en un determinado momento.

La propiedad zoned consiste en un valor booleano que se activa automáticamente la primera vez que se inicia una zona que contiene un conjunto de datos de ZFS. Un administrador de zona no tiene necesidad de activar manualmente esta propiedad. Si se establece la propiedad zoned, el conjunto de datos no se puede montar ni compartir en la zona global. En el ejemplo siguiente, tank/zone/zion se ha delegado a una zona y tank/zone/global no se ha delegado:


# zfs list -o name,zoned,mountpoint -r tank/zone
NAME                  ZONED  MOUNTPOINT
tank/zone/global        off  /tank/zone/global
tank/zone/zion           on  /tank/zone/zion
# zfs mount
tank/zone/global           /tank/zone/global
tank/zone/zion             /export/zone/zion/root/tank/zone/zion

Observe la diferencia entre la propiedad mountpoint y el directorio en que está montado el conjunto de datos tank/zone/zion. La propiedad mountpoint refleja la propiedad como almacenada en disco, no donde el conjunto de datos está montado en el sistema.

Si se elimina un conjunto de datos de una zona o se destruye una zona, la propiedad zoned no se elimina de forma automática. Este comportamiento se debe a los riegos de seguridad inherentes a estas tareas. Debido a que un usuario que no es de confianza dispone de acceso completo al conjunto de datos y sus descendientes, la propiedad mountpoint podría definirse con valores incorrectos o podría haber binarios setuid en los sistemas de archivos.

Para prevenir riesgos en la seguridad, el administrador de zona global debe suprimir manualmente la propiedad zoned si se desea volver a utilizar el conjunto de datos. Antes de establecer la propiedad zoned en off, compruebe que la propiedad mountpoint del conjunto de datos y todos sus descendientes tengan valores razonables y que no haya binarios setuid, o desactive la propiedad setuid.

Tras haber comprobado que no queden puntos débiles en la seguridad, la propiedad zoned se puede desactivar mediante los comandos zfs set o zfs inherit. Si la propiedad zoned se desactiva mientras un conjunto de datos se utiliza en una zona, el sistema podría manifestar un comportamiento impredecible. La propiedad se debe modificar únicamente si se tiene la certeza de que ninguna zona no global no está utilizando el conjunto de datos.

Uso de agrupaciones raíz de ZFS alternativas

Cuando se crea una agrupación, queda intrínsecamente vinculada con el sistema host. El sistema host mantiene información sobre la agrupación para detectar si está disponible o no. Si bien es útil en el funcionamiento normal, esta información puede suponer un obstáculo al iniciar desde otro soporte o al crear una agrupación en un soporte extraíble. Para solucionar este problema, ZFS proporciona una función de agrupaciones raíz alternativas. Una agrupación raíz alternativa no se mantiene de un reinicio del sistema a otro, y todos los puntos de montaje se modifican para vincularse con la raíz de la agrupación.

Creación de agrupaciones raíz de ZFS alternativas

La finalidad más habitual por la que se crea una agrupación raíz alternativa es utilizarla con soportes extraíbles. En estos casos, los usuarios suelen preferir un solo sistema de archivos, montado en algún lugar seleccionado en el sistema de destino. Si se crea una agrupación raíz alternativa mediante la opción zpool create -R, el punto de montaje del sistema de archivos raíz se establece automáticamente en /, que es el equivalente del valor raíz alternativo.

En el ejemplo siguiente, una agrupación denominada morpheus se crea con /mnt como ruta de acceso raíz alternativa:


# zpool create -R /mnt morpheus c0t0d0
# zfs list morpheus
NAME                   USED  AVAIL  REFER  MOUNTPOINT
morpheus              32.5K  33.5G     8K  /mnt

Observe el sistema de archivos único morpheus, cuyo punto de montaje es la raíz alternativa de la agrupación, /mnt. El punto de montaje que se guarda en disco es / y la ruta completa de /mnt sólo se interpreta en el contexto inicial de creación de la agrupación. Este sistema de archivos se puede exportar e importar bajo una agrupación raíz alternativa arbitraria en otro sistema, mediante sintaxis de valor raíz alternativo -R.


# zpool export morpheus
# zpool import morpheus
cannot mount '/': directory is not empty
# zpool export morpheus
# zpool import -R /mnt morpheus
# zfs list morpheus
NAME                   USED  AVAIL  REFER  MOUNTPOINT
morpheus              32.5K  33.5G     8K  /mnt

Importación de agrupaciones raíz alternativas

Las agrupaciones también se pueden importar mediante una raíz alternativa. Esta función posibilita situaciones de recuperación en que los puntos de montaje no se deben interpretar en el contexto de la raíz actual, sino en determinados directorios temporales en los que se pueden efectuar reparaciones. Esta función también es apta para montar soportes extraíbles como se ha explicado anteriormente.

En el ejemplo siguiente, una agrupación denominada morpheus se importa con /mnt como ruta de acceso raíz alternativa: En este ejemplo se da por sentado que morpheus se ha exportado previamente.


# zpool import -R /a pool
# zpool list morpheus
NAME   SIZE   ALLOC  FREE    CAP  HEALTH  ALTROOT
pool  44.8G    78K  44.7G     0%  ONLINE  /a
# zfs list pool
NAME   USED  AVAIL  REFER  MOUNTPOINT
pool  73.5K  44.1G    21K  /a/pool

Perfiles de derechos de ZFS

Si desea efectuar tareas de administración de ZFS sin utilizar la cuenta de superusuario (root), puede asumir una función con cualquiera de los perfiles siguientes para llevar a cabo dichas tareas de administración:

Para obtener más información sobre la creación o asignación de funciones, consulte System Administration Guide: Security Services.

Además de utilizar funciones RBAC para administrar sistemas de archivos ZFS, también puede considerar la posibilidad de utilizar la administración delegada de ZFS para tareas de administración ZFS distribuidas. Para más información, consulte el Capítulo 9Administración delegada de ZFS.