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:
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.
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.
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.
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.
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 |
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 |
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.
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:
Alterar o nome de um sistema de arquivos.
Realoque o sistema de arquivos dentro da hierarquia ZFS.
Alterar o nome de um sistema de arquivos e realocá-lo com a hierarquia ZFS.
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.
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:
Indique que a propriedade foi definida explicitamente no conjunto de dados utilizando o comando zfs set conforme descrito em Definindo propriedades do ZFS.
Indique que a propriedade foi herdada do predecessor nomeado.
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. |
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.
available
compressratio
creation
mounted
origin
referenced
type
used
Para obter informações detalhadas, consulte A propriedade used.
usedbychildren
usedbydataset
usedbyrefreservation
usedbysnapshots
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 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.
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.
aclinherit
Para uma descrição mais detalhada, consulte Propriedades da ACL.
aclmode
Para uma descrição mais detalhada, consulte Propriedades da ACL.
atime
canmount
soma de verificação
compression
copies
devices
exec
mountpoint
primarycache
quota
readonly
recordsize
Para uma descrição mais detalhada, consulte A propriedade recordsize.
refquota
refreservation
reservation
secondarycache
shareiscsi
sharenfs
setuid
snapdir
version
volsize
Para uma descrição mais detalhada, consulte A propriedade volsize.
volblocksize
zoned
xattr
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 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 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.
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:
Eles precisam conter dois pontos (':') para distingui-los das propriedades nativas.
Eles precisam conter letras minúsculas, números ou caracteres de pontuação: ':', '+','.', '_'.
O comprimento máximo de uma propriedade de usuário é de 256 caracteres.
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:
Eles devem consistir de sequências arbitrárias que são sempre herdadas e nunca validadas.
O comprimento máximo do valor da propriedade de usuário é de 1024 caracteres.
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.
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.
É 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).
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 |
As propriedades do conjunto de dados são gerenciadas através dos subcomandos set, inherit e get do comando 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).
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 |
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).
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 |
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).
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 nome literal pode ser utilizado com uma lista de propriedades separadas por vírgula, como definido na seção Introduzindo as propriedades do ZFS.
Uma lista de campos literais separados por vírgula, nome, valor, propriedades e origem, a ser retirada seguida por um espaço e um argumento, que é uma lista de propriedades separadas por vírgula.
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 |
Esta seção descreve como os pontos de montagem e os sistemas de arquivos compartilhados são gerenciados no 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.
Ao alterar a propriedade ponto de montagem de legado ou nenhum para um caminho específico, o ZFS monta automaticamente o sistema de arquivos.
Se o ZFS está gerenciando um sistema de arquivos mas está atualmente desmontado e a propriedade ponto de montagem está alterada, o sistema de arquivos permanece desmontado.
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.
É 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.
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 .
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).
É 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).
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.
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.
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 |
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 |
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.
É 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:
As propriedades cota e reserva são convenientes para gerenciar o espaço em disco utilizado pelo conjunto de dados e seus descendentes.
As propriedades refquota e refreservation são apropriadas para gerenciar o espaço em disco consumido pelo conjunto de dados.
Configurando as propriedades refquota ou refreservation superiores às propriedades cota ou reserva não possuem efeito. Se configurar as propriedades quota ou refquota, as operações que tentam exceder o valor falham. É possível exceder uma quota que é maior que refquota. Por exemplo, se alguns blocos de instantâneos são modificados, é possível exceder a quota antes de exceder refquota.
As cotas do usuário ou grupo fornecem um meio mais fácil de gerenciar o espaço em disco com muitas contas de usuário, como em um ambiente universitário.
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.
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 |
É 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:
Uma cota de usuário ou de grupo definida no sistema de arquivos pai que não é automaticamente herdada por um sistema de arquivos descendente.
No entanto, a cota do usuário ou grupo é aplicada quando um clone ou um instantâneo é criado a partir de um sistema de arquivos que tenha uma cota do usuário ou grupo. Do mesmo modo, uma cota de usuário ou de grupo que está incluída com o sistema de arquivos quando um fluxo é criado utilizando o comando zfs send, mesmo sem a opção -R.
Usuários sem privilégio só podem acessar seu próprio espaço em disco. O usuário raiz ou um usuário a quem foi concedido o privilégio de userused ou groupused, pode acessar a informação de contabilidade do espaço em disco de um grupo ou usuário de todos.
As propriedades userquota e groupquota não podem ser definidas nos volumes ZFS, em um sistema de arquivos anterior a versão 4, ou em um pool anterior a versão 15 do pool.
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 |
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.