Guia de administração do ZFS Oracle Solaris

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.