Guia de administração do ZFS Oracle Solaris

Capítulo 6 Gerenciando sistemas de arquivos ZFS do Oracle Solaris

Este capítulo oferece informações detalhadas sobre o gerenciamento de sistemas de arquivos ZFS do Oracle Solaris. Conceitos como layout de sistema de arquivos hierárquico, herança de propriedade, gerenciamento de ponto de montagem automático e interações de compartilhamento estão incluídos neste capítulo.

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

Gerenciando de sistemas de arquivos ZFS (visão geral)

Um sistema de arquivos ZFS está construído sobre um conjunto de armazenamento. Os sistemas de arquivos podem ser criados e destruídos dinamicamente sem a necessidade de alocar ou formatar espaços em disco subjacentes. Uma vez que os sistemas de arquivos são muito leves, e uma vez que são o ponto central da administração no ZFS, é provável que você crie vários deles.

Os sistemas de arquivos ZFS são administrados com o uso do comando zfs. O comando zfs oferece um conjunto de subcomandos que realizam operações específicas em sistemas de arquivos. Este capítulo descreve estes subcomandos detalhadamente. Instantâneos, volumes e clones também são gerenciados com esses comandos, porém, neste capítulo, estes recursos são tratados brevemente. Para informações detalhadas sobre instantâneos e clones, consulte Capítulo 7Trabalhando com instantâneos e clones do ZFS do Oracle Solaris. Para informações detalhadas sobre volumes ZFS, consulte Volumes ZFS.


Observação –

O termo conjunto de dados é usado neste capítulo como um termo genérico para fazer referência a um sistema de arquivos, instantâneo, clone ou volume.


Criando, destruindo e renomeando sistemas de arquivos ZFS

Os sistemas de arquivos ZFS podem ser criados e destruídos com os comandos zfs create e zfs destroy. Os sistemas de arquivos podem ser renomeados utilizando o comando zfs rename.

Criando um sistema de arquivos ZFS

Os sistemas de arquivos ZFS são criados usando o comando zfs create. O subcomando create apresenta um único argumento: o nome do sistema de arquivos a ser criado. O nome do sistema de arquivos é especificado como um nome de caminho que começa com o nome do conjunto como se segue:

nome-do-pool/[nome-do-sistema-de-arquivos/]nome-do-sistema-de-arquivos

O nome do conjunto e os nomes iniciais do sistema de arquivos no caminho identificam o local no qual o novo sistema de arquivos será criado na hierarquia. O último nome do caminho identifica o nome do sistema de arquivos que será criado. O nome do sistema de arquivos deve estar de acordo com as convenções de nomeação definidas em Requisitos para nomeação de componentes do ZFS.

No exemplo abaixo, um sistema de arquivos denominado bonwick é criado no sistema de arquivos tank/home .


# zfs create tank/home/bonwick

O ZFS monta automaticamente o sistema de arquivos recém-criado se a criação de tal sistema tiver sido bem-sucedida. Por padrão, os sistemas de arquivos são montados como /conjunto de dados, usando o caminho fornecido pelo nome do sistema de arquivos no subcomando create. Nesse exemplo, o sistema de arquivos bonwick recém-criado está montado em /tank/home/bonwick. Para mais informações sobre os pontos de montagem gerenciados automaticamente, consulte Gerenciando pontos de montagem do ZFS.

Para mais informações sobre o comando zfs create, consulte zfs(1M).

Você pode definir as propriedades do sistema de arquivos quando ele é criado.

No exemplo a seguir, um ponto de montagem de /export/zfs é criado para o sistema de arquivos tank/home:


# zfs create -o mountpoint=/export/zfs tank/home

Para mais informações sobre propriedades do sistema de arquivos, consulte Introduzindo as propriedades do ZFS.

Destruindo um sistema de arquivos ZFS

Para destruir um sistema de arquivos ZFS, use o comando zfs destroy. O sistema de arquivos destruído é desmontado e descompartilhado automaticamente. Para mais informações sobre montagens ou compartilhamentos gerenciados automaticamente, consulte Pontos de montagem automáticos.

No exemplo a seguir, o sistema de arquivos tabriz é destruído:


# zfs destroy tank/home/tabriz

Cuidado – Cuidado –

Nenhum aviso de confirmação é exibido com o subcomando destroy. Utilize-o com extrema precaução.


Se o sistema de arquivos que será destruído está ocupado e não pode ser desmontado, o comando zfs destroy falha. Para destruir um sistema de arquivos ativo, use a opção -f. Utilize essa opção com cuidado já que ela pode desmontar, descompartilhar e destruir sistemas de arquivos ativos, provocando comportamentos inesperados no aplicativo.


# zfs destroy tank/home/ahrens
cannot unmount 'tank/home/ahrens': Device busy

# zfs destroy -f tank/home/ahrens

O comando zfs destroy também falha se um sistema de arquivos possuir descendentes. Para destruir repetidamente um sistema de arquivos e todos os seus descendentes, use a opção -r. Observe que uma destruição recursiva também destrói instantâneos, por isso utilize essa opção com cuidado.


# zfs destroy tank/ws
cannot destroy 'tank/ws': filesystem has children
use '-r' to destroy the following datasets:
tank/ws/billm
tank/ws/bonwick
tank/ws/maybee

# zfs destroy -r tank/ws

Se o sistema de arquivos a ser destruído possuir dependentes indiretos, mesmo o comando de destruição recursivo descrito acima falha. Para forçar a destruição de todos os dependentes, incluindo os sistemas de arquivos clonados fora da hierarquia, deve ser usada a opção -R. Use este opção com muito cuidado.


# zfs destroy -r tank/home/schrock
cannot destroy 'tank/home/schrock': filesystem has dependent clones
use '-R' to destroy the following datasets:
tank/clones/schrock-clone

# zfs destroy -R tank/home/schrock

Cuidado – Cuidado –

Nenhum aviso de confirmação aparece com as opções -f, - r ou -R para o comando zfs destroy, por isso utilize estas opções com precaução.


Para mais informações sobre instantâneos e clones, consulte Capítulo 7Trabalhando com instantâneos e clones do ZFS do Oracle Solaris.

Renomeando um sistema de arquivos ZFS

Os sistemas de arquivos podem ser renomeados com o uso do comando zfs rename. Com o subcomando rename é possível efetuar as operações a seguir:

O exemplo a seguir utiliza o subcomando rename para renomear um sistema de arquivos de kustarz para kustarz_old :


# zfs rename tank/home/kustarz tank/home/kustarz_old

O exemplo a seguir mostra como utilizar o zfs rename para realocar um sistema de arquivos:


# zfs rename tank/home/maybee tank/ws/maybee

Neste exemplo, o sistema de arquivos maybee é realocado de tank/home para tank/ws. Quando um sistema de arquivos é realocado por meio de renomeação, o novo local deve estar dentro do mesmo conjunto e possuir espaço em disco suficiente para conter esse novo sistema de arquivos. Se o novo local não possuir espaço em disco suficiente, possivelmente por ter ultrapassado sua cota, a operação renomear falha.

Para mais informações sobre as cotas, consulte Definindo cotas e reservas do ZFS.

A operação renomear tenta uma sequência de desmontagem/remontagem no sistema de arquivos e nos sistemas de arquivos descendentes. O comando renomear falha se a operação não puder desmontar um sistema de arquivos ativo. Se ocorre um problema, desmonte o sistema de arquivos a força.

Para obter informações sobre a renomeação de instantâneos, consulte Renomeando instantâneos do ZFS.

Introduzindo as propriedades do ZFS

As propriedades são o mecanismo principal usado para controlar o comportamento de sistemas de arquivos, volumes, instantâneos e clones. A menos que fique estabelecido de outra forma, as propriedades definidas na seção são válidas para todos os tipos de conjunto de dados.

As propriedades estão dividas em dois tipos: propriedades nativas e propriedades definidas pelo usuário. As propriedades nativas exportam estatísticas internas ou controlam o sistema de arquivos ZFS. Além disso, as propriedades nativas ou são definíveis ou somente leitura. As propriedades de usuário não afetam o comportamento do ZFS, mas podem ser usadas para anotar conjuntos de dados de forma significativa no ambiente. Para mais informações sobre as propriedades de usuário, consulte Propriedades de usuário do ZFS.

A maioria das propriedades configuráveis também são herdáveis. Uma propriedade herdável é uma propriedade que, quando configurada no conjunto de dados pai, é propagada para todos os seus descendentes.

Todas as propriedades herdáveis possuem uma origem associada que indica como a propriedade foi obtida. A origem de uma propriedade pode ter os seguintes valores:

local

Indique que a propriedade foi definida explicitamente no conjunto de dados utilizando o comando zfs set conforme descrito em Definindo propriedades do ZFS.

inherited from nome-do-conjunto-de-dados

Indique que a propriedade foi herdada do predecessor nomeado.

default

Indique que o valor de propriedade não foi herdado ou configurado localmente. Essa origem é resultado de nenhum predecessor possuir a propriedade definida como origem local.

A tabela seguinte identifica as propriedades nativas somente leitura e definíveis dos sistema de arquivos ZFS. As propriedades nativas somente leitura são identificadas como tal. Todas as outras propriedades nativas listadas nesta tabela são definíveis. Para obter informações sobre as propriedades de usuário, consulte Propriedades de usuário do ZFS.

Tabela 6–1 Descrições de propriedades nativas do ZFS

Nome da propriedade 

Tipo 

Valor padrão 

Descrição 

aclinherit

Seqüência 

secure

Controla como as entradas ACL são herdadas quando os arquivos e diretórios são criados. Os valores são discard, noallow, secure e passthrough. Para uma descrição desses valores, consulte Propriedades da ACL.

aclmode

Sequência 

groupmask

Controla como uma entrada ACL é modificada durante uma operação chmod. Os valores são discard, groupmask e passthrough. Para uma descrição desses valores, consulte Propriedades da ACL.

atime

Booleano 

on

Controla se o tempo de acesso dos arquivos é atualizado quando eles são lidos. A desativação dessa propriedade evita o tráfego de gravação de produção durante a leitura de arquivos e pode proporcionar melhoras significativas no desempenho, embora possa confundir utilitários de correio e similares.

available

Número 

N/D 

A propriedade de somente leitura que identifica a quantidade de espaço em disco disponível no conjunto de dados e todos os seus filhos, mas não assume nenhuma outra atividade no conjunto. Como o espaço em disco é compartilhado dentro de um conjunto, o espaço disponível pode ser limitado por vários fatores, inclusive tamanho físico do conjunto, cotas, reservas ou outros conjuntos de dados dentro do conjunto.

A abreviatura da propriedade é avail.

Para mais informações sobre contabilidade de espaço em disco, consulte Contabilidade de espaço em disco do ZFS.

canmount

Booleano 

on

Controla se um sistema de arquivos pode ser montado com o comando zfs mount. Essa propriedade pode ser definida em qualquer sistema de arquivos e a propriedade em si não pode ser herdada. No entanto, quando essa propriedade estiver definida como off, um ponto de montagem pode ser herdado pelos sistemas de arquivos descendentes, mas o sistema de arquivos em si nunca é montado.

Quando a opção noauto estiver definida, um conjunto de dados pode ser montado e desmontado apenas explicitamente. O conjunto de dados não é montado automaticamente ao ser criado ou importado, e também não é montado pelo comando zfs mount- a nem desmontado pelo comando zfs unmount-a.

Para mais informações, consulte A propriedade canmount.

soma de verificação

Sequência 

on

Controla a soma de verificação usada para verificar a integridade dos dados. O valor padrão é on, que seleciona automaticamente um algoritmo apropriado, atualmente fletcher4. Os valores são on, off, fletcher2 , fletcher4 e sha256. O valor de off desativa a verificação da integridade dos dados do usuário. Não se recomenda o valor off.

compression

Sequência 

off

Ativa ou desativa a compactação de um conjunto de dados. Os valores são on, off, lzjb, gzip e gzip-N. Nesse momento, definir esta propriedade como lzjb, gzip ou gzip- N tem o mesmo efeito que defini-la como on. A ativação da compactação em um sistema de arquivos com dados existentes compacta somente os novos dados. Os dados existentes permanecem descompactados.

A abreviatura da propriedade é compress.

compressratio

Número 

N/D 

Propriedade de somente leitura que identifica a taxa de compactação atingida para um conjunto de dados, expressa como um multiplicador. A compactação pode ser ativada pelo zfs set compression=on conjunto de dados comando.

O valor é calculado a partir do tamanho lógico de todos os arquivos e da quantidade de dados físicos referenciados. Isso inclui economias explícitas através do uso da propriedade compression.

copies

Número 

1

Define o número de cópias de dados do usuário por sistema de arquivos. Os valores disponíveis são 1, 2 ou 3. Essas cópias são adicionais a qualquer redundância de nível de pool. O espaço em disco utilizado por várias cópias de dados do usuário é cobrado até o arquivo, conjunto de dados e contagens correspondentes contra cotas e reservas. Além disso, a propriedade used é atualizada quando várias cópias são ativadas. Leve em consideração definir essa propriedade quando o sistema de arquivos for criado porque alterá-la em um sistema de arquivos existente afeta somente os dados recém-gravados.

creation

Seqüência 

N/D 

A propriedade de somente leitura identifica a data e a hora em que um conjunto de dados foi criado.

devices

Booleano 

on

Controle se os arquivos do dispositivo no sistema de arquivos podem ser abertos.

exec

Booleano 

on

Controle se os programas dentro de um sistema de arquivos possuem permissão para serem executados. Também, quando definido como off, as chamadas de mmap(2) com PROT_EXEC não são permitidas.

mounted

Booleano 

N/D 

Propriedade de somente leitura que indica se um sistema de arquivos, clone ou instantâneo estão atualmente montados. Esta propriedade não se aplica aos volumes. O valor pode ser sim ou não.

mountpoint

Sequência 

N/D 

Controla o ponto de montagem usado neste sistema de arquivos. Quando a propriedade mountpoint é alterada para um sistema de arquivos, o sistema de arquivos e os descendentes que herdam o ponto de montagem são desmontados. Se o novo valor for legacy, então eles permanecem desmontados. Do contrário, serão remontados automaticamente no novo local se a propriedade anterior era legacy ou none ou se foram montados antes de a propriedade ter sido alterada. Além disso, quaisquer sistemas de arquivos compartilhados serão descompartilhados e compartilhados no novo local.

Para obter mais informações sobre o uso desta propriedade, consulte Gerenciando pontos de montagem do ZFS.

primarycache

Sequência 

tudo

Controle o que é armazenado no cache primário (ARC). Os valores possíveis são all, none e metadata. Se definido como all, os dados do usuário e os metadados serão colocado no cache. Se definir como nenhum, nem os dados do usuário, nem os metadados serão armazenados em cache. Se configurar para metadados, somente os metadados serão armazenados.

origin

Seqüência 

N/D 

Propriedade somente leitura para volumes ou sistemas de arquivos clonados que identifica o instantâneo a partir do qual o clone foi criado. A origem não pode ser destruída (mesmo com as opções -r ou -f) enquanto o clone existir.

Os sistemas de arquivos não clonados apresentam uma origem de nenhum.

quota

Número (ou none)

none

Limita a quantidade de espaço em disco que um conjunto de dados e seus descendentes podem utilizar. Essa propriedade impõe um limite de disco rígido na quantidade do espaço em disco utilizado, incluindo todo o espaço utilizado pelos descendentes, inclusive os sistemas de arquivos e os instantâneos. A definição de uma cota em um descendente de um sistema de arquivos que já possui uma cota, não substitui a cota do antepassado, mas sim impõe um limite adicional. As cotas não podem ser definidas em volumes, já que a propriedade volsize age como uma cota implícita.

Para mais informações sobre a definição de cotas, consulte Definindo cotas em sistemas de arquivos ZFS.

readonly

Booleano 

off

Controla se um conjunto de dados pode ser modificado. Ao definir como on, nenhuma modificação pode ser feita.

A abreviatura da propriedade é rdonly.

recordsize

Número 

128K

Especifica um tamanho do bloco sugerido para os arquivos no sistema de arquivos.

A abreviatura da propriedade é rcsize. Para uma descrição detalhada, consulte A propriedade recordsize.

referenced

Número 

N/D 

Propriedade de somente leitura que identifica a quantidade de dados acessíveis por um conjunto de dados que pode, ou não, ser compartilhado com outros conjuntos de dados no conjunto.

Quando um instantâneo ou um clone é criado, inicialmente faz referência a mesma quantidade de espaço em disco do sistema de arquivos ou do instantâneo a partir do qual foi criado, pois seus conteúdos são idênticos. 

A abreviatura da propriedade é refer.

refquota

Número (ou none) 

none

Define a quantidade de espaço em disco que um conjunto de dados pode consumir. Essa propriedade reforça um limite rígido na quantidade de espaço usado. Esse limite de disco rígido não inclui o espaço em disco utilizado pelos descendentes, como instantâneos e clones.

refreservation

Número (ou none) 

none

Define a quantidade mínima de espaço em disco que é garantido para um conjunto de dados, não incluindo seus descendentes, como instantâneos e clones. Quando a quantidade de espaço em disco utilizada está abaixo desse valor, o conjunto de dados é tratado como se estivesse ocupando a quantidade de espaço especificada por refreservation. As reservas de refreservation são calculadas no espaço em disco utilizado do conjunto de dados pai e contadas em relação às cotas e reservas do conjunto de dados pai.

Se refreservation estiver configurado, um instantâneo é permitido somente se houver disponível espaço livre suficiente no conjunto fora da reserva para alojar o número atual de bytes referenciados no conjunto de dados.

A abreviatura da propriedade é refreserv.

reservation

Número (ou none) 

none

Configure a quantidade mínima de espaço em disco garantida para um conjunto de dados e seus descendentes. Quando a quantidade de espaço em disco utilizada está abaixo desse valor, o conjunto de dados é tratado como se estivesse utilizando a quantidade de espaço especificada por sua reserva. As reservas são calculadas no espaço em disco do conjuntos de dados pai utilizado e contadas em relação às cotas e reservas do conjunto de dados pai.

A abreviatura da propriedade é reserv.

Para mais informações, consulte Definindo reservas nos sistemas de arquivos ZFS.

secondarycache

Sequência 

tudo

Controla o que é armazenado no cache secundário (L2ARC). Os valores possíveis são all, none e metadata. Se definido como all, os dados do usuário e os metadados serão colocado no cache. Se definir como nenhum, nem os dados do usuário, nem os metadados serão armazenados em cache. Se configurar para metadata, somente metadados são armazenados em cache.

setuid

Booleano 

on

Controla se o bit setuid é respeitado nos sistemas de arquivos.

shareiscsi

Sequência 

off 

Controla se um volume ZFS está compartilhado como um destino iSCSI. Os valores das propriedades são on ,off e type=dysk. Se você desejar configurar o shareiscsi=on para um sistema de arquivos, então todos os volumes ZFS dentro do sistema de arquivos serão compartilhados por padrão. No entanto, ao configurar essas propriedades em um sistema de arquivos não possuirá nenhum efeito direto.

sharenfs

Seqüência 

off

Controla se o sistema de arquivos está disponível no NFS e quais opções são utilizadas. Se for definido como on, o comando zfs share é chamado sem opções. Do contrário, o comando zfs share é chamado com opções equivalentes ao conteúdo desta propriedade. Se for definida como off, o sistema de arquivos é gerenciado com os comandos share e unshare de legado e com o arquivo dfstab.

Para mais informações sobre compartilhamento de sistemas de arquivos ZFS, consulte Compartilhando e descompartilhando sistemas de arquivos ZFS.

snapdir

Seqüência 

hidden

Controla se o diretório .zfs está oculto ou visível na raiz do sistema de arquivos. Para mais informações sobre o uso de instantâneos, consulte Visão geral dos instantâneos do ZFS.

type

Seqüência 

N/D 

Propriedade somente leitura que identifica o tipo de conjunto de dados como filesystem (sistema de arquivos ou clone), volume ou snapshot.

used

Número 

N/D 

Propriedade de somente leitura que identifica a quantidade de espaço em disco utilizada pelo conjunto de dados e todos os seus descendentes.

Para uma descrição detalhada, consulte A propriedade used.

usedbychildren

Número 

off

A propriedade de somente leitura identifica a quantidade de espaço em disco utilizada pelos filhos desse conjunto de dados, que seria liberado se os filhos do conjunto de dados fossem destruídos. A abreviatura da propriedade é usedchild.

usedbydataset

Número 

off

A propriedade de somente leitura identifica a quantidade de espaço em disco utilizada por esse próprio conjunto de dados, que seria liberado se conjunto de dados fosse destruído, depois de destruir quaisquer instantâneos e remover quaisquer reservas refreservation. A abreviatura da propriedade é usedds.

usedbyrefreservation

Número 

off

A propriedade de somente leitura identifica a quantidade de espaço em disco que é utilizada por uma refreservation definida em um conjunto de dados, que seria liberado se a refreservation fosse removida. A abreviatura da propriedade é usedrefreserv.

usedbysnapshots

Número 

off

A propriedade de somente leitura identifica a quantidade de espaço em disco que é utilizado por instantâneos de um conjunto de dados. Em particular, essa é a quantidade de espaço em disco que seria liberado se todos os instantâneos dos conjunto de dados fossem destruídos. Observe que esse valor não é simplesmente a soma das propriedades utilizadas dos instantâneos, porque o espaço pode ser compartilhado por instantâneos múltiplos. A abreviatura da propriedade é usedsnap.

version

Número 

N/D 

Identifique a versão em disco do sistema de arquivos, que é independente da versão do conjunto. Essa propriedade pode somente ser configurada para uma versão posterior que esteja disponível a partir da versão do software suportado. Para mais informação, consulte o comando zfs upgrade.

volsize

Número 

N/D 

Para volumes, especifica o tamanho lógico do volume.

Para uma descrição mais detalhada, consulte A propriedade volsize.

volblocksize

Número 

8 KB

Para volumes, especifica o tamanho do bloco do volume. O tamanho do bloco não pode ser alterado depois que o volume foi gravado, portanto, defina o tamanho do bloco no momento da criação do volume. O tamanho padrão do bloco para volumes é de 8 KB. Qualquer potência de 2 a partir de 512 bytes até 128 KB é válida.

A abreviatura da propriedade é volblock.

zoned

Booleano 

N/D 

Indica se um conjunto de dados foi adicionado à região não global. Se esta propriedade estiver definida, o ponto de montagem não é respeitado na região global e o ZFS não pode montar tal sistema de arquivos quando solicitado. Quando uma região é instalada pela primeira vez, esta propriedade é definida para todos os sistemas de arquivos adicionados.

Para obter mais informações sobre o uso do ZFS com regiões instaladas, consulte Usando ZFS em um sistema Solaris com regiões instaladas.

xattr

Booleano 

on

Indica se os atributos estendidos estão ativados (on) ou desativados (off) para esse sistema de arquivos.

Propriedades nativas somente leitura do ZFS

As propriedades nativas de somente leitura podem ser recuperadas mas não configuradas. As propriedades nativas somente leitura não são herdadas. Algumas propriedades nativas são específicas para um determinado tipo de conjunto de dados. Nesses casos, um tipo de conjunto de dados é mencionado na descrição em Tabela 6–1.

As propriedades nativas de somente leitura estão listadas aqui e são descritas em Tabela 6–1.

Para mais informações sobre a contabilidade de espaço em disco, incluindo as propriedades utilizadas, referenciadas e disponíveis, consulte Contabilidade de espaço em disco do ZFS.

A propriedade used

A propriedade utilizada é uma propriedade de somente leitura que identifica a quantidade de espaço em disco utilizada pelo conjunto de dados e todos seus descendentes. Este valor é verificado de acordo com a cota e a reserva do conjunto de dados. O espaço em disco utilizado não inclui a reserva do conjunto de dados, mas leva em consideração a reserva dos conjuntos de dados descendentes. A quantidade de espaço em disco que um conjunto de dados utiliza a partir do pai, assim como a quantidade de espaço em disco que é liberada quando o conjunto de dados é destruído recursivamente, é a maior de seu espaço utilizado e de sua reserva.

Quando os instantâneos são criados, seu espaço em disco é inicialmente compartilhado entre o instantâneo e o sistema de arquivos e possivelmente com os instantâneos anteriores. Conforme o sistema de arquivos é alterado, o espaço previamente compartilhado torna-se único para o instantâneo e é incluído no espaço do instantâneo utilizado. O espaço em disco utilizado por um instantâneo representa seus dados únicos. Adicionalmente, a exclusão de instantâneos pode aumentar a quantidade de espaço em disco único para (e ser utilizada por) outros instantâneos. Para obter mais informações sobre instantâneos e problemas de espaço, consulte Comportamento por espaço excedido.

A quantidade do espaço em disco utilizado, disponível e referenciado não inclui alterações pendentes. As alterações pendentes são consideradas em geral depois de alguns segundos. A realização de uma alteração no disco utilizando a função fsync(3c) ou O_SYNC não garante necessariamente que as informações sobre o uso de espaço em disco sejam atualizadas imediatamente.

As informações das propriedades usedbychildren, usedbydataset , usedbyrefreservation e usedbysnapshots podem ser exibidas com o comando zfs list - o space . Essas propriedades identificam a propriedade utilizada no espaço em disco que é consumido por descendentes. Para obter mais informações, consulte a Tabela 6–1.

Propriedades nativas definíveis do ZFS

As propriedades nativas definíveis são propriedades cujos valores podem ser recuperados e alterados. As propriedades nativas definíveis são definidas usando o comando zfs set, conforme descrito em Definindo propriedades do ZFS ou usando o comando zfs create conforme descrito em Criando um sistema de arquivos ZFS. Com exceção das cotas e reservas, as propriedades nativas definíveis são herdadas. Para obter mais informações sobre cotas e reservas, consulte Definindo cotas e reservas do ZFS.

Algumas propriedades nativas definíveis são específicas para um determinado tipo de conjunto de dados. Nesses casos, um tipo de conjunto de dados é mencionado na descrição em Tabela 6–1. Se não for especificamente mencionado, um propriedade se aplica a todos os tipos de conjunto de dados: sistemas de arquivos, volumes, clones e instantâneos.

As propriedades configuráveis estão listadas aqui e são descritas em Tabela 6–1.

A propriedade canmount

Se a propriedade canmount for definida como off, o sistema de arquivos não pode ser montando utilizando os comandos zfs mount ou zfs mount -a. Configurar essa propriedade para off é semelhante a configurar a propriedade mountpoint como nenhum, exceto que o conjunto de dados ainda apresenta uma propriedade mountpoint normal que pode ser herdada. Por exemplo, é possível definir essa propriedade como off, estabelecer propriedades herdáveis para os sistemas de arquivos descendentes, mas o sistema de arquivos pai em si nunca é montado nem pode ser acessado pelos usuários. Nesse caso, o sistema de arquivos pai serve como um recipiente, de modo que é possível definir propriedades no contêiner, mas o contêiner em si nunca está acessível.

No exemplo a seguir, userpool é criado e sua propriedade canmount é definida como desativadaoff. Os pontos de montagem dos sistemas de arquivos descendentes de usuário são definidos como um ponto de montagem comum, /export/home. As propriedades que estão definidas no sistema de arquivos pai são herdadas pelos sistemas de arquivos descendentes, mas o sistema de arquivos pai em si nunca é montado.


# zpool create userpool mirror c0t5d0 c1t6d0
# zfs set canmount=off userpool
# zfs set mountpoint=/export/home userpool
# zfs set compression=on userpool
# zfs create userpool/user1
# zfs create userpool/user2
# zfs mount
userpool/user1                  /export/home/user1
userpool/user2                  /export/home/user2

Se a propriedade canmount for definida como noauto, significa que o conjunto de dados pode ser montado apenas explicitamente, não automaticamente. Essa configuração é utilizada pelo software de atualização do Oracle Solaris de modo que somente os conjuntos de dados pertencentes ao ambiente de inicialização ativo são montados no momento da inicialização.

A propriedade recordsize

A propriedade recordsize especifica um tamanho de bloco sugerido para os arquivos no sistema de arquivos.

Esta propriedade é designada unicamente para uso com volumes de trabalho de banco de dados que acessam arquivos em registros de tamanho fixo. O ZFS ajusta automaticamente os tamanhos do bloco de acordo com os algoritmos internos otimizados para padrões de acesso típicos. Para bancos de dados que criam arquivos muito grandes, mas que acessam os arquivos em pequenos blocos aleatórios, esses algoritmos podem ser ideais. Especificar um valor recordsize maior ou igual ao tamanho do registro do banco de dados pode resultar em melhoras significativas no desempenho. A utilização dessa propriedade para sistemas de arquivos com fins gerais é totalmente desaconselhado e pode afetar negativamente o desempenho. O tamanho especificado deve ser uma potência de 2 maior ou igual a 512 bytes e menor ou igual a 128 KB. Alterar o valor recordsize do sistema de arquivos afeta somente os arquivos criados posteriormente. Os arquivos existentes não são afetados.

A abreviatura da propriedade é rcsize.

A propriedade volsize

A propriedade volsize especifica o tamanho lógico do volume. Por padrão, a criação de um volume estabelece uma reserva para a mesma quantidade. Quaisquer alterações do volsize se refletem em uma alteração equivalente na reserva. Estas verificações são usadas para evitar comportamentos inesperados para os usuários. Um volume que contém menos espaço do que ele exige pode resultar em um comportamento indefinido ou corrupção de dados, dependendo de como o volume é usado. Esses efeitos também podem ocorrer quando o tamanho do volume é alterado enquanto ele é utilizado, particularmente quando o espaço é diminuído. Tenha extremo cuidado ao ajustar o tamanho do volume.

Embora não seja recomendável, é possível criar um volume esparso especificando o sinalizador -s para zfs create -V ou alterando a reserva depois que o volume for criado. Um volume esparso é um volume em que a reserva não é igual ao tamanho do volume. Em um volume esparso, as alterações para volsize não se refletem na reserva.

Para obter mais informações sobre o uso de volumes, consulte Volumes ZFS.

Propriedades de usuário do ZFS

Além das propriedades nativas, o ZFS oferece suporte a propriedades arbitrárias do usuário. As propriedades de usuário não afetam o comportamento do ZFS, mas podem ser usadas para anotar conjuntos de dados com informações significativas no ambiente.

Os nomes das propriedades do usuário devem estar de acordo com as convenções a seguir:

A convenção esperada é que o nome da propriedade esteja dividido nos dois componentes seguintes, mas que este espaço de nome não seja imposto pelo ZFS:


module:property

Ao fazer utilização programática das propriedades do usuário, utilize um nome de domínio DNS reverso para o componente módulo dos nomes da propriedade para diminuir a possibilidade de que dois pacotes desenvolvidos independentemente utilizem o mesmo nome de propriedade para fins diferentes. Os nomes de propriedade que começam com com.sun. estão reservados para utilização da Oracle Corporation.

O valor da propriedade do usuário deve estar de acordo com as convenções a seguir:

Por exemplo:


# zfs set dept:users=finance userpool/user1
# zfs set dept:users=general userpool/user2
# zfs set dept:users=itops userpool/user3

Todos os comandos que operam em propriedades, tais como zfs list, zfs get, zfs set, etc., podem ser usados para manipular propriedades nativas e de usuário.

Por exemplo:


zfs get -r dept:users userpool
NAME            PROPERTY    VALUE           SOURCE
userpool        dept:users  all             local
userpool/user1  dept:users  finance         local
userpool/user2  dept:users  general         local
userpool/user3  dept:users  itops           local

Para limpar uma propriedade de usuário, use o comando zfs inherit. Por exemplo:


# zfs inherit -r dept:users userpool

Se a propriedade não estiver definida em nenhum conjunto de dados pai, ela é totalmente removida.

Consultando informações sobre o sistema de arquivos ZFS

O comando zfs list oferece um amplo mecanismo para exibição e consulta de informações sobre o conjunto de dados. Nesta seção, serão tratadas tanto as consultas básicas quantos as consultas complexas.

Listando informações básicas do ZFS

É possível listar as informações básicas do conjunto de dados usando o comando zfs list sem opções. Esse comando exibe os nomes de todos os conjuntos de dados no sistema e os valores de suas propriedades utilizadas, disponíveis, referenciadas e ponto de montagem. Para obter mais informações sobre essas propriedades, consulte Introduzindo as propriedades do ZFS.

Por exemplo:


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
pool                   476K  16.5G    21K  /pool
pool/clone              18K  16.5G    18K  /pool/clone
pool/home              296K  16.5G    19K  /pool/home
pool/home/marks        277K  16.5G   277K  /pool/home/marks
pool/home/marks@snap      0      -   277K  -
pool/test               18K  16.5G    18K  /test

Também é possível usar este comando para exibir conjuntos de dados específicos proporcionando o nome do banco de dados na linha de comando. Adicionalmente, use a opção -r para exibir repetidamente todos os descendentes de tal conjunto de dados. Por exemplo:


# zfs list -r pool/home/marks
NAME                   USED  AVAIL  REFER  MOUNTPOINT
pool/home/marks        277K  16.5G   277K  /pool/home/marks
pool/home/marks@snap      0      -   277K  -

É possível utilizar o comando zfs list com o ponto de montagem de um sistema de arquivos. Por exemplo:


# zfs list /pool/home/marks
NAME              USED  AVAIL  REFER  MOUNTPOINT
pool/home/marks   277K  16.5G   277K  /pool/home/marks

O exemplo a seguir ilustra como exibir informações básicas sobre tank/home/chua e todos os seus conjuntos de dados descendentes:


# zfs list -r tank/home/chua
NAME                        USED  AVAIL  REFER  MOUNTPOINT 
tank/home/chua		          26.0K  4.81G  10.0K  /tank/home/chua 
tank/home/chua/projects       16K  4.81G   9.0K  /tank/home/chua/projects
tank/home/chua/projects/fs1    8K  4.81G     8K  /tank/home/chua/projects/fs1 
tank/home/chua/projects/fs2    8K  4.81G     8K  /tank/home/chua/projects/fs2

Para obter informações adiiconais sobre o comando zfs list , consulte zfs(1M).

Criando consultas complexas de ZFS

A saída zfs list pode ser personalizada utilizando as opções -o, -f e -H.

É possível personalizar a saída do valor da propriedade usando a opção -o e uma lista separada por vírgula das propriedades desejadas. É possível abastecer qualquer propriedade de conjunto de dados como um argumento válido. Para obter uma lista de todas as propriedades de conjunto de dados suportadas, consulte Introduzindo as propriedades do ZFS. Além das propriedades definidas, a lista da opção -o também pode conter o nome literal para indicar que a saída deve incluir o nome do conjunto de dados.

O exemplo a seguir utiliza zfs list para exibir o nome do conjunto de dados, juntamente com os valores das propriedades sharenfs e mountpoint .


# zfs list -o name,sharenfs,mountpoint
NAME                   SHARENFS         MOUNTPOINT
tank                   off              /tank
tank/home              on               /tank/home
tank/home/ahrens       on               /tank/home/ahrens
tank/home/bonwick      on               /tank/home/bonwick
tank/home/chua         on               /tank/home/chua
tank/home/eschrock     on               legacy
tank/home/moore        on               /tank/home/moore
tank/home/tabriz       ro               /tank/home/tabriz

A opção -t pode ser usada para especificar os tipos de conjuntos de dados a serem exibidos. Os tipos válidos estão descritos na tabela abaixo.

Tabela 6–2 Tipos de conjuntos de dados ZFS

Tipo 

Descrição 

filesystem

Sistemas de arquivos e clones 

volume

Volumes 

instantâneo

Instantâneos 

As opções -t utilizam uma lista separada por vírgulas dos tipos de conjuntos de dados a serem exibidos. O exemplo abaixo usa simultaneamente as opções -t e - o para exibir o nome e a propriedade used em todos os sistemas de arquivos:


# zfs list -t filesystem -o name,used
NAME              USED
pool              476K
pool/clone         18K
pool/home         296K
pool/home/marks   277K
pool/test          18K

A opção -H pode ser usada para omitir o cabeçalho zfs list da saída gerada. Com a opção -H, todo espaço em branco é substituído pelo caractere Tab. Esta opção pode ser útil quando uma saída analisável é necessária, por exemplo, ao realizar script. O exemplo abaixo ilustra a saída gerada do uso do comando zfs list com a opção -H:


# zfs list -H -o name
pool
pool/clone
pool/home
pool/home/marks
pool/home/marks@snap
pool/test

Gerenciando propriedades do ZFS

As propriedades do conjunto de dados são gerenciadas através dos subcomandos set, inherit e get do comando zfs.

Definindo propriedades do ZFS

O comando zfs set pode ser usado para modificar qualquer propriedade definível de conjunto de dados. Ou então, é possível utilizar o comando zfs create para definir as propriedades quando o conjunto de dados é criado. Para obter uma lista de propriedades definíveis de conjunto de dados, consulte Propriedades nativas definíveis do ZFS.

O comando zfs set utiliza uma sequência de propriedade/valor no formato de propriedade=valor seguido por um nome de conjunto de dados. Somente uma propriedade pode ser configurada ou modificada durante cada chamada zfs set.

O exemplo abaixo define a propriedade atime como off para tank/home.


# zfs set atime=off tank/home

Além disso, qualquer propriedade do sistema de arquivos pode ser definida quando o sistema de arquivos é criado. Por exemplo:


# zfs create -o atime=off tank/home

É possível especificar valores de propriedades numérica utilizando os sufixos fáceis de entender (em ordem crescente de magnitude): BKMGTPEZ. Todos estes sufixos podem ser seguidos de b opcional, indicando bytes, com exceção do sufixo B, que já indica bytes. As quatro chamadas a seguir de zfs set são expressões numéricas equivalentes que configuram a propriedade quota para ser definida com o valor de 50 GB no sistema de arquivos tank/home/marks:


# zfs set quota=50G tank/home/marks
# zfs set quota=50g tank/home/marks
# zfs set quota=50GB tank/home/marks
# zfs set quota=50gb tank/home/marks

Os valores de propriedades não numéricas fazem a diferenciação entre maiúsculas e minúsculas e devem ser em minúsculas, com exceção de mountpoint e sharenfs. Os valores destas propriedades podem apresentar maiúsculas e minúsculas misturadas.

Para obter mais informações sobre o comando zfs set, consulte zfs(1M).

Herdando propriedades do ZFS

Todas as propriedades configuráveis, com exceção de cotas e reservas, herdam o valor do seu conjunto de dados pai, a menos que uma cota ou reserva esteja explicitamente definida no conjunto de dados descendente. Se nenhum antepassado tiver um valor explícito definido para uma propriedade herdada, é usado o valor padrão para a propriedade. É possível utilizar o comando zfs inherit para limpar um valor de propriedade, fazendo, assim, com que o valor seja herdado do conjunto de dados pai.

O exemplo abaixo usa o comando zfs set para ativar a compactação do sistema de arquivos tank/home/bonwick. Em seguida, zfs inherit é utilizado para limpar a propriedade compression, fazendo, assim, com que a propriedade herde o valor padrão de off. Como nem home e tampouco tank possui a propriedade compression definida localmente, o valor padrão é utilizado. Se ambos possuírem a compactação ativada, o valor definido no próximo predecessor seria utilizado (neste exemplo home).


# zfs set compression=on tank/home/bonwick
# zfs get -r compression tank
NAME             PROPERTY      VALUE                    SOURCE
tank             compression   off                      default
tank/home        compression   off                      default
tank/home/bonwick compression   on                      local
# zfs inherit compression tank/home/bonwick
# zfs get -r compression tank
NAME             PROPERTY      VALUE                    SOURCE
tank             compression   off                      default
tank/home        compression   off                      default
tank/home/bonwick compression  off                      default

O subcomando inherit é aplicado repetidamente quando a opção -r está especificada. No exemplo abaixo, o comando faz com que o valor da propriedade compression seja herdada por tank/home e pelos descendentes que possa ter:


# zfs inherit -r compression tank/home

Observação –

Tenha em mente que o uso da opção -r limpa a definição da propriedade atual de todos os conjuntos de dados descendentes.


Para mais informações sobre o comando zfs inherit, consulte zfs(1M).

Consultando propriedades do ZFS

A forma mais simples de consultar os valores de uma propriedade é usando o comando zfs list. Para obter mais informações, consulte Listando informações básicas do ZFS. No entanto, para consultas complexas e para script, use o comando zfs get para fornecer informações mais detalhadas em um formato personalizado.

O comando zfs get pode ser usado para recuperar qualquer propriedade de conjunto de dados. O exemplo a seguir ilustra como recuperar um valor de propriedade único em um conjunto de dados:


# zfs get checksum tank/ws
NAME             PROPERTY       VALUE                      SOURCE
tank/ws          checksum       on                         default

A quarta coluna, SOURCE, indica a origem do valor da propriedade. A tabela a seguir define os possíveis valores de origem.

Tabela 6–3 Possíveis valores de SOURCE (comando zfs get)

Valor de origem 

Descrição 

default

Esse valor de propriedade nunca foi definido explicitamente para esse conjunto de dados ou para qualquer um dos seus predecessores. O valor padrão desta propriedade está sendo usado. 

inherited from nome-do-conjunto-de-dados

Esse valor de propriedade é herdado a partir do conjunto de dados pai especificado em dataset-name.

local

Este valor de propriedade foi explicitamente definido para este conjunto de dados usando zfs set.

temporary

Esse valor de propriedade foi definido utilizando a opção zfs mount -o e é válido somente durante a montagem. Para obter mais informações sobre as propriedades do ponto de montagem, consulte Usando propriedades de montagem temporárias.

- (none) 

Essa propriedade é somente leitura. Seu valor é gerado pelo ZFS. 

É possível utilizar a palavra-chave especial todos para recuperar todas os valores de propriedade do conjunto de dados. Os exemplos a seguir utilizam a palavra-chave todos:


# zfs get all tank/home
NAME       PROPERTY              VALUE                  SOURCE
tank/home  type                  filesystem             -
tank/home  creation              Tue Jun 29 11:44 2010  -
tank/home  used                  21K                    -
tank/home  available             66.9G                  -
tank/home  referenced            21K                    -
tank/home  compressratio         1.00x                  -
tank/home  mounted               yes                    -
tank/home  quota                 none                   default
tank/home  reservation           none                   default
tank/home  recordsize            128K                   default
tank/home  mountpoint            /tank/home             default
tank/home  sharenfs              off                    default
tank/home  checksum              on                     default
tank/home  compression           off                    default
tank/home  atime                 on                     default
tank/home  devices               on                     default
tank/home  exec                  on                     default
tank/home  setuid                on                     default
tank/home  readonly              off                    default
tank/home  zoned                 off                    default
tank/home  snapdir               hidden                 default
tank/home  aclmode               groupmask              default
tank/home  aclinherit            restricted             default
tank/home  canmount              on                     default
tank/home  shareiscsi            off                    default
tank/home  xattr                 on                     default
tank/home  copies                1                      default
tank/home  version               4                      -
tank/home  utf8only              off                    -
tank/home  normalization         none                   -
tank/home  casesensitivity       sensitive              -
tank/home  vscan                 off                    default
tank/home  nbmand                off                    default
tank/home  sharesmb              off                    default
tank/home  refquota              none                   default
tank/home  refreservation        none                   default
tank/home  primarycache          all                    default
tank/home  secondarycache        all                    default
tank/home  usedbysnapshots       0                      -
tank/home  usedbydataset         21K                    -
tank/home  usedbychildren        0                      -
tank/home  usedbyrefreservation  0                      -
tank/home  logbias               latency                default

Observação –

As propriedades casesensitivity, nbmand, normalization, sharesmb, utf8only e vscan não são totalmente operacionais na versão 10 do Oracle Solaris porque o serviço Oracle Solaris SMB não possui suporte na versão 10 do Oracle Solaris.


A opção -s de zfs get permite especificar, por tipo de origem, o tipo de propriedades a exibir. Esta opção usa uma lista separada por vírgulas indicando os tipos de origem desejados. Somente as propriedades com o tipo de origem especificado são exibidas. Os tipos de origem válidos são local, default, inherited, temporary e none. O exemplo abaixo ilustra todas as propriedades definidas localmente no pool.


# zfs get -s local all pool
NAME             PROPERTY      VALUE                      SOURCE
pool             compression   on                         local

Todas as opções acima podem ser combinadas com a opção -r para exibir repetidamente as propriedades especificadas em todos os filhos do conjunto de dados especificado. No exemplo abaixo, todas as propriedades temporárias de todos os conjuntos de dados dentro de tank são exibidas repetidamente:


# zfs get -r -s temporary all tank
NAME             PROPERTY       VALUE                      SOURCE
tank/home          atime          off                      temporary
tank/home/bonwick  atime          off                      temporary
tank/home/marks    atime          off                      temporary

É possível consultar os valores de propriedade utilizando o comando zfs get sem especificar um sistema de arquivos destino, o que significa que o comando opera em todos os conjuntos ou sistemas de arquivos. Por exemplo:


# zfs get -s local all
tank/home               atime          off                    local
tank/home/bonwick       atime          off                    local
tank/home/marks         quota          50G                    local

Para obter mais informações sobre o comando zfs get, consulte zfs(1M).

Consultando propriedades do ZFS em busca de script

O comando zfs get oferece suporte às opções -H e - o, que estão destinadas a script. É possível utilizar a opção -H para omitir o cabeçalho de informação e substituir o espaço em branco com o caractere Tab. O espaço em branco uniforme leva em consideração os dados facilmente analisáveis. É possível utilizar a opção -o para personalizar a saída das seguintes maneiras:

O exemplo a seguir ilustra como recuperar um único valor utilizando as opções -H e -o de zfs get:


# zfs get -H -o value compression tank/home
on

A opção -p relata valores numéricos como seus valores exatos. Por exemplo, 1 MB seria relatado como 1000000. Esta opção pode ser usada da seguinte forma:


# zfs get -H -o value -p used tank/home
182983742

É possível utilizar a opção -r, juntamente com qualquer uma das opções anteriores, para recuperar recursivamente os valores solicitados para todos os descendentes. O exemplo a seguir utiliza as opções -H, -o e - r para recuperar o nome do conjunto de dados e o valor da propriedade utilizada para export/home e seus descendentes, ao mesmo tempo em que omite a saída de cabeçalho:


# zfs get -H -o name,value -r used export/home
export/home             5.57G
export/home/marks       1.43G
export/home/maybee      2.15G

Montando e compartilhando sistemas de arquivos ZFS

Esta seção descreve como os pontos de montagem e os sistemas de arquivos compartilhados são gerenciados no ZFS.

Gerenciando pontos de montagem do ZFS

Por padrão, o sistema de arquivos ZFS é automaticamente montado quando é criado. É possível determinar comportamento de ponto de montagem específico para um sistema de arquivos como descrito nesta seção.

Também é possível definir o ponto de montagem padrão para o conjunto de dados de um conjunto no momento da criação utilizando, de zpool create, a opção -m. Para obter mais informações sobre a criação de pools de armazenamento, consulte Criando um pool de armazenamento do ZFS.

Todos os sistemas de arquivos ZFS são montados pelo ZFS no momento da inicialização utilizando o serviço svc://system/filesystem/local do Service Management Facility's (SMF). Os sistemas de arquivos são montados em /path, onde path é o nome do sistema de arquivos.

É possível ignorar o ponto de montagem padrão utilizando o comando zfs set para configurar a propriedade mountpoint para um caminho específico. O ZFS cria automaticamente o ponto de montagem especificado, se necessário, e monta automaticamente o sistema de arquivos associado quando o comando zfs mount -a é chamado, sem a necessidade de que o arquivo /etc/vfstab seja editado.

A propriedade mountpoint é herdada. Por exemplo, se pool/home possui a propriedade mountpoint definida como /export/stuff, então pool/home/user herda /export/stuff/user para seu valor de propriedade mountpoint.

Para prevenir que um sistema de arquivos seja montado, configure a propriedade ponto de montagem para nenhum. Além disso, a propriedade canmount pode ser utilizada para controlar se o sistema de arquivos pode ser montado. Para obter mais informações sobre a propriedade canmount, consulte A propriedade canmount.

Sistemas de arquivos também podem ser explicitamente gerenciados por interfaces de montagem de legado utilizando zfs set para configurar a propriedade ponto de montagem como legado. Fazer isso previne o ZFS da montagem automática e de gerenciar um sistema de arquivos. As ferramentas de legado, que incluem os comandos mount e umount, e o arquivo /etc/vfstab devem ser usados. Para obter mais informações sobre montagem de legado, consulte Pontos de montagem de legado.

Pontos de montagem automáticos

Todo conjunto de dados cuja propriedade mountpoint não for legacy é gerenciado pelo ZFS. No exemplo a seguir, o conjunto de dados é criado e seu ponto de montagem é automaticamente gerenciado pelo ZFS:


# zfs create pool/filesystem
# zfs get mountpoint pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mountpoint    /pool/filesystem           default
# zfs get mounted pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mounted       yes                        -

Também é possível definir explicitamente a propriedade mountpoint conforme ilustrado no exemplo abaixo:


# zfs set mountpoint=/mnt pool/filesystem
# zfs get mountpoint pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mountpoint    /mnt                       local
# zfs get mounted pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mounted       yes                        -

Quando a propriedade mountpoint é alterada, o sistema de arquivos é desmontado automaticamente do ponto de montagem antigo e é montado novamente no novo ponto de montagem. Os diretórios de ponto de montagem são criados conforme necessário. Se o ZFS é incapaz de desmontar um sistema arquivos devido ao fato de estar ativo, um erro é relatado e uma desmontagem manual forçada é necessária.

Pontos de montagem de legado

É possível gerenciar sistemas de arquivos ZFS com ferramentas de legado definindo a propriedade mountpoint como legacy. Os sistemas de arquivos de legado devem ser gerenciados através dos comandos mount e umount e do arquivo /etc/vfstab. O ZFS não monta automaticamente os sistemas de arquivos de legado no momento da inicialização e os comandos mount e umount do ZFS não operam em conjuntos de dados desse tipo. Os exemplos abaixo ilustram como configurar e gerenciar um conjunto de dados ZFS no modo de legado:


# zfs set mountpoint=legacy tank/home/eschrock
# mount -F zfs tank/home/eschrock /mnt

Para montar automaticamente um sistema de arquivos de legado no momento da inicialização, adicione um entrada ao arquivo /etc/vfstab. O exemplo a seguir mostra qual entrada no arquivo /etc/vfstab poderia se parecer:


#device         device        mount           FS      fsck    mount   mount
#to mount       to fsck       point           type    pass    at boot options
#

tank/home/eschrock -		/mnt		   zfs		-		yes		-	

As entradas device to fsck e fsck pass são configuradas para - porque o comando fsck não é aplicável aos sistemas de arquivos ZFS. Para mais informação sobre a integridade de dados ZFS, consulte Semânticas transacionais.

Montando sistemas de arquivos ZFS

O ZFS monta automaticamente os sistemas de arquivos quando os sistemas de arquivos são criados ou quando o sistema é inicializado. Utilizar o comando zfs mount é necessário somente quando for preciso alterar as opções de montagem ou explicitamente montar ou desmontar sistemas de arquivos.

O comando zfs mount sem argumentos mostra todos os sistemas de arquivos montados atualmente que são gerenciados pelo ZFS. Os pontos de montagem de legado gerenciados não são exibidos. Por exemplo:


# zfs mount
tank                            /tank
tank/home                       /tank/home
tank/home/bonwick               /tank/home/bonwick
tank/ws                         /tank/ws

A opção -a pode ser usada para montar todos os sistemas de arquivos ZFS gerenciados. Os sistemas de arquivos gerenciados de legado não são montados. Por exemplo:


# zfs mount -a

Por padrão, o ZFS não permite montagem em cima de um diretório não vazio. Para forçar uma montagem em cima de um diretório não vazio, é necessário usar a opção -O. Por exemplo:


# zfs mount tank/home/lalt
cannot mount '/export/home/lalt': directory is not empty
use legacy mountpoint to allow this behavior, or use the -O flag
# zfs mount -O tank/home/lalt

Pontos de montagem de legado devem ser gerenciados através de ferramentas de legado. Uma tentativa de usar ferramentas do ZFS resulta em erro. Por exemplo:


# zfs mount pool/home/billm
cannot mount 'pool/home/billm': legacy mountpoint
use mount(1M) to mount this filesystem
# mount -F zfs tank/home/billm

Quando um sistema de arquivos é montado, ele usa um conjunto de opções de montagem com base nos valores de propriedade associados ao conjunto de dados. A correlação entre propriedades e opções de montagem é a seguinte:

Tabela 6–4 Propriedades relacionadas à montagem ZFS e opções de montagem

Propriedade 

Opções de montagem 

atime

atime/noatime

devices

devices/nodevices

exec

exec/noexec

nbmand

nbmand/nonbmand

readonly

ro/rw

setuid

setuid/nosetuid

xattr

xattr/noaxttr

A opção de montagem nosuid é um alias para nodevices,nosetuid .

Usando propriedades de montagem temporárias

Se qualquer opção de montagem descrita na última seção for explicitamente configurada utilizando a opção -o com o comando zfs mount, o valor da propriedade associada será temporariamente ignorado. Esses valores de propriedade são relatados como temporários pelo comando zfs get e voltam ao valor original quando o sistema de arquivos é desmontado. Se um valor de propriedade for alterado enquanto o conjunto de dados estiver sendo montado, a alteração terá efeito imediatamente, substituindo qualquer definição temporária.

No exemplo a seguir, a opção de montagem de somente leitura está temporariamente configurada no sistema de arquivos tank/home/perrin. Presume-se que o sistema de arquivos está desmontado.


# zfs mount -o ro tank/home/perrin

Para alterar temporariamente um valor de propriedade no sistema de arquivos que esteja atualmente montado, utilize a opção remontar especial. No exemplo abaixo, a propriedade atime é temporariamente alterada para off para um sistema de arquivos atualmente montado:


# zfs mount -o remount,noatime tank/home/perrin
# zfs get atime tank/home/perrin
NAME             PROPERTY      VALUE                      SOURCE
tank/home/perrin atime         off                        temporary

Para obter mais informações sobre o comando zfs mount, consulte zfs(1M).

Desmontando sistemas de arquivos

É possível desmontar os sistemas de arquivos ZFS utilizando o subcomando zfs unmount. O comando unmount pode assumir o ponto de montagem ou o nome de sistema de arquivos como um argumento.

No exemplo a seguir, um sistema de arquivos é desmontado pelo seu nome de sistema de arquivos:


# zfs unmount tank/home/tabriz

No exemplo a seguir, o sistemas de arquivos é desmontado pelo seu ponto de montagem:


# zfs unmount /export/home/tabriz

O comando unmount falha se o sistema de arquivos está ocupado. Para desmontar a força um sistema de arquivos, é possível utilizar a opção -f. Seja cauteloso ao desmontar a força um sistema de arquivos se os conteúdos estiverem ativamente sendo utilizados. Pode resultar em um comportamento imprevisível do aplicativo.


# zfs unmount tank/home/eschrock
cannot unmount '/export/home/eschrock': Device busy
# zfs unmount -f tank/home/eschrock

Para proporcionar compatibilidade com versões anteriores, o comando umount de legado pode ser utilizado para desmontar sistemas de arquivos ZFS. Por exemplo:


# umount /export/home/bob

Para obter mais informações sobre o comando zfs unmount, consulte zfs(1M).

Compartilhando e descompartilhando sistemas de arquivos ZFS

O ZFS pode compartilhar automaticamente sistemas de arquivos configurando a propriedade sharenfs. Utilizando essa propriedade, não é necessário modificar o arquivo /etc/dfs/dfstab quando um novo sistema de arquivos é compartilhado. A propriedade sharenfs é uma lista de opções separada por vírgulas para passar para o comando share. O valor on é um alias para opção de compartilhamento padrão, que fornece permissões read/write para todos. O valor off indica que o sistema de arquivos não é gerenciado pelo ZFS e pode ser compartilhado por meios tradicionais, assim como o arquivo /etc/dfs/dfstab. Todos os sistemas de arquivos cuja propriedade sharenfs não é off são compartilhados durante a inicialização.

Controlando a semântica de compartilhamento

Por padrão, todos os sistemas de arquivos são descompartilhados. Para compartilhar um novo sistema de arquivos, use a sintaxe zfs set semelhante à seguinte:


# zfs set sharenfs=on tank/home/eschrock

A propriedade sharenfs é herdada, e os sistemas de arquivos são automaticamente compartilhados na criação se suas propriedades herdadas não forem off. Por exemplo:


# zfs set sharenfs=on tank/home
# zfs create tank/home/bricker
# zfs create tank/home/tabriz
# zfs set sharenfs=ro tank/home/tabriz

tank/home/bricker e tank/home/tabriz são inicialmente compartilhados como graváveis porque herdam a propriedade sharenfs do tank/home. Depois que a propriedade é configurada para ro(somente leitura), tank/home/tabriz é compartilhado como somente leitura independente da propriedade sharenfsque é configurada para tank/home.

Descompartilhando sistemas de arquivos ZFS

Embora muitos sistemas de arquivos sejam automaticamente compartilhados ou descompartilhados durante a inicialização, criação e destruição, os sistemas de arquivos, algumas vezes, necessitam ser explicitamente descompartilhados. Para isso, use o comando zfs unshare. Por exemplo:


# zfs unshare tank/home/tabriz

Este comando descompartilha o sistema de arquivos tank/home/tabriz. Para descompartilhar todos os sistemas de arquivos ZFS no sistema, é necessário usar a opção - a.


# zfs unshare -a

Compartilhando sistemas de arquivos ZFS

Na maioria das vezes, o comportamento automático do ZFS em relação ao compartilhamento do sistema de arquivos na inicialização e criação é suficiente para operações regulares. Se, por algum motivo, você descompartilhar um sistema de arquivos, pode compartilhá-lo novamente com o uso do comando zfs share. Por exemplo:


# zfs share tank/home/tabriz

Você também pode compartilhar todos os sistemas de arquivos ZFS no sistema usando a opção - a.


# zfs share -a

Comportamento de compartilhamento de legado

Se a propriedade sharenfs é configurada para off, então o ZFS não faz a tentativa de compartilhamento ou de descompartilhamento do sistema de arquivos a qualquer hora. Esse valor permite que o administrador de sistemas de arquivos compartilhe por meios tradicionais, assim como o arquivo /etc/dfs/dfstab.

Ao contrário do comando mount de legado, os comandos share e unshare de legado ainda podem funcionar nos sistemas de arquivos ZFS. Como resultado, é possível compartilhar manualmente um sistema de arquivos com opções que diferem da opção da propriedade sharenfs. Este modelo administrativo não é recomendável . Escolha gerenciar o compartilhamento NFS completamente por ZFS ou pelo arquivo /etc/dfs/dfstab. O modelo administrativo do ZFS foi concebido para ser mais simples e menos trabalhoso do que o modelo tradicional.

Definindo cotas e reservas do ZFS

É possível utilizar a propriedade cota para definir um limite na quantidade de espaço em disco que um sistema de arquivos necessite utilizar. Além disso, é possível utilizar a propriedade reserva para garantir que uma quantidade especificada de espaço em disco esteja disponível para um sistema de arquivos. Ambas as propriedades se aplicam ao conjunto de dados em que são configuradas e a todos os descendentes desse conjunto de dados.

Isto é, se uma cota é definida no conjunto de dados tank/home, a quantidade total do espaço em disco utilizado pelo tank/home e todos os seus descendentes não podem exceder a cota. Do mesmo modo, se ao tank/home é dado uma reserva, tank/home e todos os seus descendentes utilizarão tal reserva. A quantidade de espaço em disco utilizado por um conjunto de dados e todos os seus descendentes são relatados pela propriedade utilizada.

As propriedades refquota e refreservation são utilizadas para gerenciar o espaço do sistema de arquivos sem contabilizar o espaço em disco utilizado pelos descendentes, tal como instantâneos e clones.

Nessa versão do Solaris, é possível definir uma cota de usuário ou de grupo na quantidade de espaço em disco utilizado por arquivos que pertencem a um usuário particular ou a um grupo. As propriedades de cota do usuário ou grupo não podem ser definidas em um volume, em um sistema de arquivos antes da versão 4 do sistema de arquivos, ou em um pool antes da versão 15 do pool.

Considere os pontos a seguir para determinar quais recursos de cotas e reservas melhor ajudam no gerenciamento dos sistemas de arquivos:

Para obter informações sobre a definição de cotas e reservas, consulte Definindo cotas em sistemas de arquivos ZFSand Definindo reservas nos sistemas de arquivos ZFS.

Definindo cotas em sistemas de arquivos ZFS

As cotas nos sistemas de arquivos ZFS podem ser configuradas e exibidas utilizando os comandos zfs set e zfs get. No exemplo a seguir, uma cota de 10 GB é configurada no tank/home/bonwick:


# zfs set quota=10G tank/home/bonwick
# zfs get quota tank/home/bonwick
NAME              PROPERTY      VALUE                      SOURCE
tank/home/bonwick quota         10.0G                      local

As cotas também afetam a saída dos comandos zfs list e df. Por exemplo:


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank/home             16.5K  33.5G  8.50K  /export/home
tank/home/bonwick     15.0K  10.0G  8.50K  /export/home/bonwick
tank/home/bonwick/ws  6.50K  10.0G  8.50K  /export/home/bonwick/ws
# df -h /export/home/bonwick
Filesystem             size   used  avail capacity  Mounted on
tank/home/bonwick       10G     8K    10G     1%    /export/home/bonwick

Note que, embora tank/home possua 33.5 GB de espaço em disco disponível, tank/home/bonwick e tank/home/bonwick/ws possuem, cada um, somente 10 GB de espaço em disco disponível, devido à cota em tank/home/bonwick.

Não é possível definir uma cota para uma quantidade menor do que a atualmente em uso por um conjunto de dados. Por exemplo:


# zfs set quota=10K tank/home/bonwick
cannot set quota for 'tank/home/bonwick': size is less than current used or 
reserved space

É possível definir uma refquota em um conjunto de dados que limita quantidade montante de espaço em disco que o conjunto de dados pode consumir. Esse limite de disco rígido não inclui o espaço em disco que é utilizado pelos descendentes. Por exemplo:


# zfs set refquota=10g students/studentA
# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
profs               106K  33.2G    18K  /profs
students           57.7M  33.2G    19K  /students
students/studentA  57.5M  9.94G  57.5M  /students/studentA
# zfs snapshot students/studentA@today
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                     106K  33.2G    18K  /profs
students                 57.7M  33.2G    19K  /students
students/studentA        57.5M  9.94G  57.5M  /students/studentA
students/studentA@today      0      -  57.5M  -

Para maior comodidade, é possível configurar outra cota no conjunto de dados para ajudar a gerenciar o espaço em disco que é utilizado pelos instantâneos. Por exemplo:


# zfs set quota=20g students/studentA
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                     106K  33.2G    18K  /profs
students                 57.7M  33.2G    19K  /students
students/studentA        57.5M  9.94G  57.5M  /students/studentA
students/studentA@today      0      -  57.5M  -

Nesse cenário, studentA deve alcançar refquota (10 GB) de limite de disco rígido, mas studentA pode remover arquivos para recuperar, mesmo se existirem instantâneos.

No exemplo anterior, a menor das duas cotas (10 GB comparado a 20 GB) é exibida na saída zfs list. Para visualizar o valor de ambas as cotas, utilize o comando zfs get. Por exemplo:


# zfs get refquota,quota students/studentA
NAME               PROPERTY  VALUE              SOURCE
students/studentA  refquota  10G                local
students/studentA  quota     20G                local

Definindo usuário e grupo de cotas em um sistema de arquivos ZFS

É possível definir uma cota de usuário ou de grupo utilizando os comandos zfs userquota ou zfs groupquota, respectivamente. Por exemplo:


# zfs create students/compsci
# zfs set userquota@student1=10G students/compsci
# zfs create students/labstaff
# zfs set groupquota@staff=20GB students/labstaff

Exiba a cota atual do usuário ou grupo como segue:


# zfs get userquota@student1 students/compsci
NAME              PROPERTY            VALUE               SOURCE
students/compsci  userquota@student1  10G                 local
# zfs get groupquota@staff students/labstaff
NAME               PROPERTY          VALUE             SOURCE
students/labstaff  groupquota@staff  20G               local

É possível exibir o usuário geral ou o grupo de espaço em disco consultando as propriedades a seguir:


# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10G  
# zfs groupspace students/labstaff
TYPE         NAME   USED  QUOTA  
POSIX Group  root   217M   none  
POSIX Group  staff  217M    20G  

Para identificar usuários individuais ou de grupo de uso do espaço em disco, consulte as propriedades a seguir:


# zfs get userused@student1 students/compsci
NAME              PROPERTY           VALUE              SOURCE
students/compsci  userused@student1  455M               local
# zfs get groupused@staff students/labstaff
NAME               PROPERTY         VALUE            SOURCE
students/labstaff  groupused@staff  217M             local

As propriedades de cotas de usuário e de grupo não são exibidas utilizando o comando zfs get all conjunto de dados, que exibem uma lista de todas as outras propriedades do sistema de arquivos.

É possível remover uma cota de usuário de grupo da seguinte forma:


# zfs set userquota@user1=none students/compsci
# zfs set groupquota@staff=none students/labstaff

As cotas de usuário e de grupo no sistema de arquivos ZFS fornecem os recursos a seguir:

Aplicação de usuário e cotas de grupos podem ser adiadas por vários segundos. Esta atraso significa que os usuários podem exceder suas cotas antes que o sistema observe que estão acima da cota e recusa gravações adicionais EDQUOT .

Você pode usar o comando quota herdado, para rever as cotas do usuário em um ambiente NFS, por exemplo, onde uma sistema de arquivos ZFS não esteja montado. Sem quaisquer opções, o comando quota somente exibe a saída se a cota do usuário estiver excedida. Por exemplo:


# zfs set userquota@student1=10m students/compsci   
# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10M  
# quota student1
Block limit reached on /students/compsci

Se você predefinir a cota de usuário e o limite de cotas não estiver excedido, é possível utilizar o comando quota -v para visualizar a cota do usuário. Por exemplo:


# zfs set userquota@student1=10GB students/compsci 
# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10G  
# quota student1
# quota -v student1
Disk quotas for student1 (uid 201):
Filesystem     usage  quota  limit    timeleft  files  quota  limit    timeleft
/students/compsci
              466029 10485760 10485760     

Definindo reservas nos sistemas de arquivos ZFS

Uma reserva ZFS é uma alocação do espaço em disco do conjunto que garante estar disponível ao conjunto de dados. Assim, não é possível reservar o espaço em disco para um conjunto de dados se o espaço não está atualmente disponível no conjunto. A quantidade total de reservas livres e não consumidas não pode exceder a quantidade de espaço em disco não utilizado no conjunto. A reservas do ZFS podem ser definidas e exibidas com os comandos zfs set e zfs get. Por exemplo:


# zfs set reservation=5G tank/home/moore
# zfs get reservation tank/home/moore
NAME             PROPERTY     VALUE   SOURCE
tank/home/moore  reservation  5G      local

As reservas podem afetar a saída do comando zfs list. Por exemplo:


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank/home             5.00G  33.5G  8.50K  /export/home
tank/home/moore       15.0K  33.5G  8.50K  /export/home/moore

Note que tank/home está utilizando 5 GB de espaço em disco, embora a quantidade total do espaço seja referente a tank/home e seus descendentes são menores que 5 GB. O espaço usado reflete o espaço reservado para tank/home/moore. As reservas são consideradas no cálculo de espaço em disco utilizado do conjunto de dados pai e contam contra sua cota, reserva ou ambos.


# zfs set quota=5G pool/filesystem
# zfs set reservation=10G pool/filesystem/user1
cannot set reservation for 'pool/filesystem/user1': size is greater than 
available space

Um conjunto de dados utiliza mais espaço em disco do que sua reserva, enquanto o espaço não reservado está disponível no conjunto e o conjunto de dados atualmente utilizado está abaixo de sua cota. Um conjunto de dados não pode utilizar o espaço em disco que foi reservado para outro conjunto de dados.

As reservas não são cumulativas. Ou seja, uma segunda chamada de zfs set para definir uma reserva não adiciona sua reserva à reserva existente. Em vez disso, a segunda reserva substitui a primeira reserva. Por exemplo:


# zfs set reservation=10G tank/home/moore
# zfs set reservation=5G tank/home/moore
# zfs get reservation tank/home/moore
NAME             PROPERTY      VALUE                      SOURCE
tank/home/moore  reservation   5.00G                      local

É possível definir uma reserva refreservation para garantir espaço em disco para um conjunto de dados que não inclua espaço em disco utilizado pelos instantâneos e clones. Essa reserva é contabilizada para o cálculo do espaço utilizado do conjunto de dados pai e conta contra as cotas e reservas do conjunto de dados pai. Por exemplo:


# zfs set refreservation=10g profs/prof1
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                    10.0G  23.2G    19K  /profs
profs/prof1                10G  33.2G    18K  /profs/prof1

Também é possível definir um reserva no mesmo conjunto de dados para garantir o espaço do conjunto de dados e o espaço do instantâneo. Por exemplo:


# zfs set reservation=20g profs/prof1
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                    20.0G  13.2G    19K  /profs
profs/prof1                10G  33.2G    18K  /profs/prof1

As reservas regulares são contabilizados para o cálculo de espaço utilizado do pai.

No exemplo anterior, a menor das duas cotas (10 GB comparado a 20 GB) é exibida na saída zfs list. Para visualizar o valor de ambas as cotas, utilize o comando zfs get. Por exemplo:


# zfs get reservation,refreserv profs/prof1
NAME         PROPERTY        VALUE        SOURCE
profs/prof1  reservation     20G          local
profs/prof1  refreservation  10G          local

Se refreservation está configurada, um instantâneo só é permitido se o espaço do conjunto não reservado suficiente existe fora da reserva para acomodar o número atual de bytes referenciados no conjunto de dados.