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:
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.
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.
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.
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.
Si se cambia el nombre de un volumen de ZFS, el objetivo iSCSI se sigue llamando de la misma forma. Por ejemplo:
# zfs rename tank/volumes/v2 tank/volumes/v1 # iscsitadm list target Target: tank/volumes/v1 iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a Connections: 0 |
La exportación de una agrupación que contenga un volumen de ZFS compartido elimina el objetivo. La importación de una agrupación que contenga un volumen de ZFS compartido hace que se comparta el objetivo. Por ejemplo:
# zpool export tank # iscsitadm list target # zpool import tank # iscsitadm list target Target: tank/volumes/v1 iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a Connections: 0 |
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.
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:
Puede agregar un sistema de archivos o un clon de ZFS a una zona no global con o sin delegación de control administrativo.
Puede agregar un volumen de ZFS como dispositivo a zonas no globales.
Por ahora no es posible asociar instantáneas de ZFS con zonas.
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:
Un sistema de archivos ZFS agregado a una zona no global debe tener la propiedad mountpoint establecida en legacy.
Debido al CR 6449301, no agregue ningún conjunto de datos ZFS a una zona no global cuando configure la zona no global. En lugar de ello, agregue un conjunto de datos ZFS tras la instalación de la zona.
Cuando tanto un origen zonepath como un destino zonepath residen en un sistema de archivos ZFS y se encuentran en la misma agrupación, zoneadm clone utiliza automáticamente el clon de ZFS para clonar una zona. El comando zoneadm clone crea una instantánea de ZFS de la zonepath de origen y configura la zonepath de destino. No puede utilizar el comando zfs clone para clonar una zona. Si desea más información, 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.
Si delega un sistema de archivos ZFS a una zona no global, debe eliminar ese sistema de archivos de la zona no global antes de utilizar Actualización automática de Oracle Solaris. De lo contrario, la Actualización automática de Oracle fallará debido a un error del sistema de archivos de sólo lectura.
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.
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.
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.
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.
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.
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.
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.
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 |
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 |
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:
Administración de almacenamiento de ZFS: proporciona privilegios para crear, destruir y manipular dispositivos en una agrupación de almacenamiento de ZFS
Administración de sistemas de archivos ZFS: proporciona privilegios para crear, destruir y modificar sistemas de archivos ZFS
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.