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:
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.
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.
É 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.
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.
Quando um volume ZFS é renomeado, o nome do destino iSCSI permanece o mesmo. Por exemplo:
# 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 |
A exportação de um pool que contém um volume ZFS compartilhado faz com que o destino seja removido. A importação de um pool que contém um volume ZFS compartilhado faz com que o destino seja compartilhado. Por exemplo:
# 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 |
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.
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:
Você pode adicionar um sistema de arquivos ou clone do ZFS a uma região não global com ou sem delegar o controle administrativo.
É possível adicionar um volume do ZFS como um dispositivo em regiões não globais.
No momento, não é possível associar instantâneos do 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:
Um sistema de arquivos ZFS adicionado a uma região não global deve ter a propriedade mountpoint definida como legado.
Devido ao problema 6449301, não adicione um conjunto de dados ZFS em uma região não global quando a região não global estiver configurada. Em vez disso, adicione um conjunto de dados ZFS depois que região for instalada.
Quando o zonepath de fonte e o zonepath de destino residirem em um sistema de arquivos do ZFS e estiverem no mesmo conjunto, o comando zoneadm clone utilizará automaticamente o ZFS para clonar uma região. O comando zoneadm clone criará um instantâneo do ZFS do zonepath de fonte e configurará o zonepath de destino. Não é possível usar o comando zfs clone para clonar uma região. Para obter mais informações, consulte Parte II, Regiões, no Guia de administração do sistema: gerenciamento de recursos Oracle Solaris Containers e Oracle Solaris Zones.
Caso você delegue um sistema de arquivos do ZFS para uma região não global, é preciso remover aquele sistema de arquivos da região não global antes de utilizar o Oracle Solaris Live Upgrade. Caso contrário, o Oracle Live Upgrade irá falhar devido a um erro de sistema de arquivos de somente leitura.
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.
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.
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.
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.
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.
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.
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.
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 |
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 |
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:
Gerenciamento de armazenamento do ZFS: oferece o privilégio de criar, destruir e manipular dispositivos dentro de um conjunto de armazenamento do ZFS
Gerenciamentos de sistema de arquivos do ZFS: oferece o privilégio de criar, destruir e modificar os sistemas de arquivos 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.