Guia de administração do ZFS Oracle Solaris

Capítulo 10 Tópicos avançados do ZFS do Oracle Solaris

Este capítulo descreve os volumes ZFS, o uso do ZFS em um sistema Solaris com regiões instaladas, pools de raiz alternativa e perfis de direitos do ZFS.

Este capítulo traz as seguintes seções:

Volumes ZFS

Um volume ZFS consiste em um conjunto de dados que representa um dispositivo de bloco. Os volumes do ZFS são identificados como dispositivos no diretório /dev/zvol/{dsk,rdsk}/pool.

No exemplo a seguir, um volume do ZFS de 5 GB, tank/vol é criado:


# zfs create -V 5gb tank/vol

Ao criar um volume, uma reserva é automaticamente definida ao tamanho inicial do volume para evitar a ocorrência de comportamento inesperado. Por exemplo, se o tamanho do volume diminuir, os dados podem se corromper. Você deve ter cuidado ao alterar o tamanho do volume.

Além disso, se criar um instantâneo de um volume que altera em tamanho, você pode introduzir inconsistências se tentar reverter o instantâneo ou criar um clone do instantâneo.

Para obter informações sobre as propriedades do sistema de arquivos que podem ser aplicadas a volumes, consulte a Tabela 6–1.

Se estiver usando um sistema Solaris com regiões instaladas, você não pode criar ou clonar um volume ZFS em uma região não global. Qualquer tentativa para tal irá falhar. Para obter informações sobre o uso de volumes ZFS em uma região global, consulte Adicionando volumes ZFS a uma região não global.

Usando um volume ZFS como um dispositivo de intercâmbio ou de dump

Durante a instalação de um sistema de arquivos raiz do ZFS ou a migração de um sistema de arquivos raiz do UFS, é criado um dispositivo de permuta em um volume do ZFS no conjunto raiz do ZFS. Por exemplo:


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

Durante a instalação de um sistema de arquivos raiz do ZFS ou a migração de um sistema de arquivos raiz do UFS, é criado um dispositivo de despejo em um volume do ZFS no conjunto raiz do ZFS. O dispositivo de despejo não requer administração depois de configurado. Por exemplo:


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

Se precisar alterar a área de intercâmbio ou o dispositivo de dump após a instalação ou atualização do sistema, use os comandos swap e dumpadm como nas versões anteriores do Solaris. Se precisar criar um volume de permuta adicional, crie um volume do ZFS de um tamanho específico e ative a permuta nesse dispositivo. Por exemplo:


# 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

Não permute para um arquivo em um sistema de arquivos ZFS. A configuração de arquivos de intercâmbio ZFS não é suportada.

Para obter informações sobre o ajuste do tamanho dos volumes de permuta e despejo, consulte Ajustando os tamanhos dos dispositivos de permuta e despejo ZFS.

Usando um volume ZFS como um destino iSCSI Solaris

É possível criar facilmente um volume do ZFS como um destino iSCSI, definindo a propriedade shareiscsi no volume. Por exemplo:


# 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

Depois da criação do destino iSCSI, configure o iniciador iSCSI. Para obter mais informações sobre iniciadores e destinos iSCSI Solaris, consulte o Capítulo 14, Configuring Oracle Solaris iSCSI Targets and Initiators (Tasks), no System Administration Guide: Devices and File Systems.


Observação –

Os destinos iSCSI Solaris também podem ser criados e gerenciados com o comando iscsitadm. Se definir a propriedade shareiscsi em um volume ZFS, não use o comando iscsitadm para criar o mesmo dispositivo de destino. Caso contrário, você cria informações de destino duplicadas para o mesmo dispositivo.


Um volume do ZFS, como um destino iSCSI, é gerenciado da mesma forma que qualquer outro conjunto de dados do ZFS. No entanto, as operações rename, export e import funcionam um pouco diferente nos destinos iSCSI.

Todas as informações de configuração do destino iSCSI são armazenadas com o conjunto de dados. Assim como um sistema de arquivos compartilhado NFS, um destino iSCSI que é importado em um sistema diferente é compartilhado apropriadamente.

Usando ZFS em um sistema Solaris com regiões instaladas

As seções a seguir descrevem como utilizar o ZFS em um sistema com regiões Oracle Solaris:

Para obter informações sobre a configuração de regiões em um sistema com um sistema de arquivos raiz do ZFS que será migrado ou terá patches instalados com o Oracle Solaris Live Upgrade, consulte Utilizando o Oracle Solaris Live Upgrade para migrar ou atualizar um sistema com regiões (Solaris 10 10/08) ou Utilizando o Oracle Solaris Live Upgrade para migrar ou atualizar um sistema com regiões (no mínimo Solaris 10 5/09).

Leve em consideração os seguintes pontos ao associar os conjuntos de dados ZFS a regiões:

Nas seções a seguir, um conjunto de dados do ZFS refere-se a um sistema de arquivos ou um clone.

A adição de um conjunto de dados permite que a região não global compartilhe espaço em disco com a região global, embora o administrador de região não possa controlar as propriedades ou criar novos sistemas de arquivos na hierarquia do sistema de arquivos subjacente. Esta operação é idêntica à adicionar outro tipo de sistema de arquivos a uma região, e deve ser utilizada quando o objetivo principal for unicamente compartilhar espaço em disco comum.

O ZFS também permite que os conjuntos de dados sejam delegados a uma região não global, proporcionando controle total do administrador de regiões sobre o conjunto de dados e seus filhos. O administrador de região pode criar e destruir os sistemas de arquivos ou clones dentro deste conjunto de dados, assim como modificar propriedades dos conjuntos de dados. O administrador de regiões não pode afetar os conjuntos de dados que não foram adicionados à região, o que inclui exceder as cotas máximas definidas no conjunto de dados delegado.

Considere as seguintes interações ao trabalhar com o ZFS em um sistema Oracle Solaris com regiões instaladas:

Adicionando sistemas de arquivos ZFS a uma região não global

Você pode adicionar um sistema de arquivos ZFS como um sistema de arquivos genérico quando o objetivo for unicamente compartilhar espaço com a região global. Um sistema de arquivos ZFS adicionado a uma região não global deve ter a propriedade mountpoint definida como legado.

O sistema de arquivos ZFS pode ser adicionado a uma região não global com o subcomando add fs do comando zonecfg .

No exemplo seguinte, um sistema de arquivos do ZFS é adicionado a uma região não global por um administrador global na região 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 sintaxe adiciona o sistema de arquivos do ZFS, tank/zone/zion, à região zion já configurada, montada em /export/shared. A propriedade mountpoint do sistema de arquivos deve ser definida como legacy (legado), e o sistema de arquivos já não poderá ser montado em outro local. O administrador de regiões pode criar e destruir arquivos dentro do sistema de arquivos. O sistema de arquivos não pode ser remontado em uma localização diferente e o administrador de regiões não pode alterar propriedades no sistema de arquivos, como atime, readonly, compression, e etc. O administrador de regiões globais é responsável por definir e controlar as propriedades do sistema de arquivos.

Para obter mais informações sobre o comando zonecfg e sobre a configuração dos tipos de recursos com zonecfg, consulte Parte II, Regiões, no Guia de administração do sistema: gerenciamento de recursos Oracle Solaris Containers e Oracle Solaris Zones.

Delegando conjuntos de dados a uma região não global

Se a prioridade for delegar a administração do armazenamento a uma região, o ZFS oferece suporte à adição de conjuntos de dados a uma região não global através do subcomando add dataset do comando zonecfg.

No exemplo a seguir, um sistema de arquivos do ZFS é delegado a uma região não global por um administrador global na região global.


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

Ao contrário da adição de um sistema de arquivos, esta sintaxe faz com que o sistema de arquivos ZFS tank/zone/zion esteja visível dentro da região zion já configurada. O administrador de regiões pode definir as propriedades do sistema de arquivos e criar sistemas de arquivos descendentes. Além disso, o administrador de região pode criar instantâneos, clones e, por outro lado, controlar toda a hierarquia do sistema de arquivos.

Se estiver utilizando o Oracle Solaris Live Upgrade para atualizar o BE do ZFS com regiões não globais, remova primeiro todos os conjuntos de dados delegados. Caso contrário, Oracle Solaris Live Upgrade falhará e apresentará o erro de sistema de arquivos de somente leitura. Por exemplo:


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

Para obter mais informações sobre que ações são permitidas dentro das regiões, consulte Gerenciando propriedades do ZFS dentro de uma região.

Adicionando volumes ZFS a uma região não global

Os volumes ZFS não podem ser adicionados a uma região não global com o subcomando add dataset do comando zonecfg. No entanto, os volumes podem ser adicionados a uma região com o subcomando add device do comando zonecfg.

No exemplo a seguir, um volume do ZFS é adicionado a uma região não global por um administrador de região global na região 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 sintaxe adiciona o volume tank/vol para a região zion . Observe que a adição de um volume bruto a uma região apresenta riscos de segurança implícitos, mesmo que o volume não corresponda a um dispositivo físico. Em particular, o administrador de regiões poderia criar sistemas de arquivos inválidos que causariam graves danos no sistema quando houvesse uma tentativa de montagem. Para obter mais informações sobre a adição de dispositivos a regiões e os riscos de segurança relacionados, consulte Entendendo a propriedade zoned.

Para obter mais informações sobre a adição de dispositivos a regiões, consulte Parte II, Regiões, no Guia de administração do sistema: gerenciamento de recursos Oracle Solaris Containers e Oracle Solaris Zones.

Usando pools de armazenamento do ZFS dentro de uma região

Os pools de armazenamento do ZFS não podem ser criados ou modificados dentro de uma região. O modelo de administração delegado centraliza o controle dos dispositivos de armazenamento físico dentro da região global e o controle do armazenamento virtual em regiões não globais. Enquanto um conjunto de dados no nível do conjunto puder ser adicionado a uma região, nenhum comando que modifique as características físicas do conjunto, como criar, adicionar ou remover dispositivos, poderá ser realizado de dentro de uma região. Mesmo se os dispositivos físicos forem adicionados a uma região com o subcomando add device do comando zonecfg, ou se os arquivos forem usados, o comando zpool não permite a criação de novos pools dentro da região.

Gerenciando propriedades do ZFS dentro de uma região

Depois que o conjunto de dados for delegado a uma região, o administrador de região poderá controlar propriedades específicas do conjunto de dados. Depois que um conjunto de dados é delegado a uma região, todos os seus antepassados estão visíveis como conjuntos de dados de somente leitura, enquanto que o próprio conjunto de dados é gravável, assim como seus descendentes. Considere, por exemplo, a seguinte configuração:


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

Se tank/data/zion fosse adicionado a uma região, cada conjunto de dados teria as seguintes propriedades.

Conjunto de dados 

Visível 

Gravável 

Propriedades imutáveis 

tank

Sim 

Não 

tank/home

Não 

tank/data

Sim 

Não 

tank/data/matrix

Não 

tank/data/zion

Sim 

Sim 

sharenfs, zoned, quota, reservation

tank/data/zion/home

Sim 

Sim 

sharenfs, zoned

Observe que todos os pais de tank/zone/zion estão visíveis como somente leitura, todos os descendentes são graváveis e os conjuntos de dados que não fazem parte da hierarquia pai não estão visíveis de nenhuma forma. O administrador de região não pode alterar a propriedade sharenfs porque as regiões não globais não podem agir como servidores NFS. O administrador de região não pode alterar a propriedade zoned porque isso apresentaria um risco de segurança, conforme descrito na próxima seção.

Os usuários privilegiados na região podem alterar qualquer outra propriedade que possa ser definida, exceto as propriedades quota e reservation. Este comportamento permite que o administrador de região global controle o consumo do espaço em disco de todos os conjuntos de dados utilizados pela região não global.

Além disso, as propriedades sharenfs e mountpoint não podem ser alteradas pelo administrador de região global depois que um conjunto de dados tiver sido delegado a uma região não global.

Entendendo a propriedade zoned

Quando um conjunto de dados é delegado a uma região não global, ele deve ser identificado com uma marca especial para que determinadas propriedades não sejam interpretadas dentro do contexto da região global. Depois que o conjunto de dados tiver sido delegado a uma região não global e estiver sob o controle de um administrador de região, já não será possível confiar em seu conteúdo. Como em qualquer sistema de arquivos, podem haver binários setuid, links simbólicos ou, senão, conteúdos duvidosos que poderiam afetar a segurança da região global. Além disso, a propriedade mountpoint não pode ser interpretada no contexto da região global. Caso contrário, o administrador de regiões poderia afetar o espaço de nome da região global. Para abordar este último, o ZFS usa a propriedade zoned para indicar que um conjunto de dados foi delegado a uma região não global em um dado ponto no tempo.

A propriedade zoned é um valor booleano ativado automaticamente quando uma região, contendo um conjunto de dados ZFS, é inicializada pela primeira vez. Um administrador de regiões não precisa ativar esta propriedade manualmente. Se a propriedade zoned estiver definida, o conjunto de dados não pode ser montado ou compartilhado na região global. No exemplo a seguir, o tank/zone/zion foi delegado a uma região, enquanto o tank/zone/global, não:


# 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 a diferença entre a propriedade mountpoint e o diretório no qual o conjunto de dados tank/zone/zion está montado atualmente. A propriedade mountpoint reflete a propriedade como estando armazenada em disco, não onde o conjunto de dados está montado atualmente no sistema.

Quando um conjunto de dados é removido de uma região ou quando uma região é destruída, a propriedade zoned não é apagada automaticamente. Este comportamento se deve aos riscos de segurança inerentes relacionados a essas tarefas. Devido ao fato de um usuário não confiável ter tido total acesso ao conjunto de dados e a seus descendentes, a propriedade mountpoint pode ser definida com valores incorretos ou pode haver binários setuid nos sistemas de arquivos.

Para evitar eventuais riscos de segurança, a propriedade zoned deve ser apagada manualmente pelo administrador global se você desejar reutilizar o conjunto de dados. Antes de definir a propriedade zoned como off, certifique-se de que a propriedade mountpoint do conjunto de dados e de todos os seus descendentes esteja definida com valores aceitáveis e que não existam binários setuid, ou que a propriedade setuid esteja desativada.

Depois de ter verificado se não existem vulnerabilidades na segurança, a propriedade zoned pode ser desativada através do comando zfs set ou zfs inheri . Se a propriedade zoned for desativada enquanto um conjunto de dados estiver sendo usado dentro de uma região, o sistema pode se comportar de forma imprevisível. Altere a propriedade somente se tiver certeza de que o conjunto de dados já não esteja sendo usado por uma região não global.

Usando pools de raiz alternativa do ZFS

Quando um conjunto é criado, ele é vinculado ao sistema do host. O sistema do host mantém informações sobre o conjunto para poder detectar quando o conjunto não está disponível. Embora úteis em operações normais, estas informações podem se tornar obstáculos quando se está inicializando a partir de mídias alternativas ou criando um conjunto em uma mídia removível. Para resolver este problema, o ZFS oferece um recurso de pools de raiz alternativa. O pool de raiz alternativa não é preservado em reinicializações do sistema e todos os pontos de montagem são modificados para terem relação com a raiz do pool.

Criando pools de raiz alternativa do ZFS

O motivo mais comum para criar um conjunto raiz alternativo é para utilização com mídias removíveis. Nesse caso, os usuários querem normalmente um único sistema de arquivos e querem que tal sistema possa ser montado em qualquer parte do sistema de destino. Quando um conjunto raiz alternativo é criado com a opção zpool create -R, o ponto de montagem do sistema de arquivos raiz é automaticamente definido como /, que equivale à própria raiz alternativa.

No exemplo abaixo, um pool denominado morpheus é criado com /mnt como caminho de raiz alternativa:


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

Observe o sistema de arquivos único, morpheus, cujo ponto de montagem é a raiz alternativa do pool, /mnt. O ponto de montagem armazenado em disco é / e o caminho completo para /mnt é interpretado somente no contexto inicial da criação do conjunto. Este sistema de arquivos poderá, então, ser importado e exportado através de um conjunto raiz alternativo arbitrário em um sistema diferente utilizando a sintaxe do valor de raiz alternativa -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

Importando pools de raiz alternativa

Os pools também podem ser importados usando uma raiz alternativa. Este recurso leva em consideração as situações de recuperação, nas quais os pontos de montagem não devem ser interpretados no contexto da raiz atual, mas sim em algum diretório temporário no qual seja possível realizar correções. Este recurso também pode ser utilizado ao montar mídias removíveis conforme descrito anteriormente.

No exemplo abaixo, um pool denominado morpheus é importado com /mnt como o caminho de raiz alternativa. Neste exemplo pressupõe-se que morpheus foi previamente exportado.


# 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

Perfis de direitos do ZFS

Se desejar efetuar as tarefas de gerenciamento do ZFS sem utilizar a conta de superusuário (raiz), é possível adotar uma função com um dos perfis seguintes para realizar as tarefas de administração do ZFS:

Para obter mais informações sobre a criação ou atribuição de funções, consulte o System Administration Guide: Security Services .

Além de usar as funções RBAC para administrar sistemas de arquivos ZFS, também se deve levar em consideração o uso da administração delegada do ZFS nas tarefas de administração distribuídas do ZFS. Para obter mais informações, consulte o Capítulo 9Administração delegada de ZFS.