Guia de administração do ZFS Oracle Solaris

Criando e destruindo pools de armazenamento do ZFS

As seções seguintes descrevem diferentes situações de criação e destruição de pools de armazenamento do ZFS:

Criar e destruir conjuntos é rápido e fácil. Entretanto, seja cuidadoso ao efetuar estas operações. Embora sejam realizadas verificações para impedir o uso de dispositivos que estão sendo usados em um novo pool, o ZFS nem sempre sabe quando um dispositivo está sendo utilizado. Destruir um conjunto é mais fácil do que construir um. Use zpool destroy com cuidado. Este comando simples tem consequências significantes.

Criando um pool de armazenamento do ZFS

Para criar um pool de armazenamento, use o comando zpool create. Este comando adota um nome de pool e qualquer quantidade de dispositivos virtuais como argumentos. O nome do conjunto deve cumprir as convenções de identificação descritas em Requisitos para nomeação de componentes do ZFS.

Criando um pool de armazenamento básico

O seguinte comando cria um novo pool denominado tank que contém os discos c1t0d0 e c1t1d0:


# zpool create tank c1t0d0 c1t1d0

Nomes de dispositivos representando discos inteiros são encontrados no diretório /dev/dsk e estão legendados adequadamente pelo ZFS para conter um único e grande segmento. Os dados são distribuídos dinamicamente nos dois discos.

Criando um pool de armazenamento espelhado

Para criar um pool espelhado, use a palavra-chave mirror, seguida de uma quantidade de dispositivos de armazenamento que formarão o espelho. É possível especificar vários espelhos com a repetição da palavra-chave mirror na linha de comando. O comando abaixo cria um pool com dois espelhos bidirecionais:


# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0

A segunda palavra-chave mirror indica que um novo dispositivo virtual de primeiro nível está sendo especificado. Os dados são distribuídos dinamicamente nos dois espelhos e redundados adequadamente em cada disco.

Para obter mais informações sobre as configurações espelhadas recomendadas, vá ao site:

http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide

No momento, as operações a seguir são suportadas em uma configuração espelhada do ZFS:

Não é possível remover completamente um dispositivo que não é um dispositivo de log ou cache de um conjunto de armazenamento espelhado. Uma RFE é preenchida para esse recurso.

Criando um pool raiz ZFS

É possível instalar e inicializar a partir de um sistema de arquivos ZFS. Consulte as seguintes informações de configuração do pool raiz:

Para mais informações sobre a instalação e a inicialização de um sistema de arquivos raiz ZFS, consulte Capítulo 5Instalando e inicializando um sistema de arquivos raiz ZFS do Oracle Solaris.

Criando um conjunto de armazenamento RAID-Z

A criação de um pool RAID-Z de paridade única é idêntica à criação de um pool espelhado, exceto que a palavra-chave raidz ou raidz1 é usada em lugar de mirror. O exemplo abaixo mostra como criar um pool com um dispositivo RAID-Z único que está composto por dois discos:


# zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 /dev/dsk/c5t0d0

Este exemplo ilustra que os discos podem ser especificados ao utilizar seus nomes de dispositivo de estenografia ou seus nomes de dispositivos completos. Tanto /dev/dsk/c5t0d0 quanto c5t0d0 fazem referência ao mesmo disco.

É possível criar configurações RAID-Z de paridade dupla ou tripla ao utilizar a palavra-chave raidz2 ou raidz3 ao criar o conjunto. Por exemplo:


# zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0
# zpool status -v tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c2t0d0  ONLINE       0     0     0
            c3t0d0  ONLINE       0     0     0
            c4t0d0  ONLINE       0     0     0
            c5t0d0  ONLINE       0     0     0

errors: No known data errors

# zpool create tank raidz3 c0t0d0 c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 c6t0d0 c7t0d0
# zpool status -v tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz3-0  ONLINE       0     0     0
            c0t0d0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c2t0d0  ONLINE       0     0     0
            c3t0d0  ONLINE       0     0     0
            c4t0d0  ONLINE       0     0     0
            c5t0d0  ONLINE       0     0     0
            c6t0d0  ONLINE       0     0     0
            c7t0d0  ONLINE       0     0     0

errors: No known data errors

No momento, as operações a seguir são suportadas em uma configuração RAID-Z do ZFS:

No momento, as operações seguintes não são suportadas em uma configuração RAID-Z:

Para obter informações sobre a configuração RAID-Z, consulte Configuração de pool de armazenamento RAID-Z.

Criando um conjunto de armazenamento do ZFS com dispositivos de log

Por padrão, o ZIL é alocado dos blocos no pool principal. No entanto, pode ser possível obter melhor desempenho usando dispositivos separados de registro de intenção, como NVRAM ou um disco dedicado. Para obter mais informações sobre os dispositivos de log do ZFS, consulte Configurando dispositivos de log do ZFS separados.

É possível configurar um dispositivo de log ZFS quando o conjunto de armazenamento for criado ou depois da sua criação.

O exemplo a seguir mostra como criar um conjunto de armazenamento espelhado com dispositivos de log espelhados:


# zpool create datap mirror c1t1d0 c1t2d0 mirror c1t3d0 c1t4d0 log mirror c1t5d0 c1t8d0
# zpool status datap
  pool: datap
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datap       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0
            c1t4d0  ONLINE       0     0     0
        logs
          mirror-2  ONLINE       0     0     0
            c1t5d0  ONLINE       0     0     0
            c1t8d0  ONLINE       0     0     0

errors: No known data errors

Para obter informações sobre como recuperar de um dispositivo de registro com falha, consulte Exemplo 11–2.

Criando um conjunto de armazenamento do ZFS com dispositivos de cache

Você pode criar um pool de armazenamento com dispositivos de cache para dados de pool de armazenamento cache. Por exemplo:


# zpool create tank mirror c2t0d0 c2t1d0 c2t3d0 cache c2t5d0 c2t8d0
# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c2t0d0  ONLINE       0     0     0
            c2t1d0  ONLINE       0     0     0
            c2t3d0  ONLINE       0     0     0
        cache
          c2t5d0    ONLINE       0     0     0
          c2t8d0    ONLINE       0     0     0

errors: No known data errors

Considere os pontos a seguir ao determinar a criação de um conjunto de armazenamento ZFS com dispositivos de cache:

Exibindo informações do dispositivo virtual do pool de armazenamento

Cada conjunto de armazenamento contém um ou mais dispositivos virtuais. Um dispositivo virtual é uma representação interna do conjunto de armazenamento que descreve o layout do armazenamento físico e suas características de falha. Como tal, um dispositivo virtual representa os dispositivos de disco ou arquivos que são usados para criar o pool de armazenamento. Um conjunto pode ter qualquer número de dispositivos virtuais na parte superior da configuração, conhecida como top-level vdev.

Se o dispositivo virtual de nível superior contém dois ou mais dispositivos físicos, a configuração fornece redundância de dados como dispositivos de espelho ou virtual RAID-Z. Estes dispositivos virtuais consistem em discos, faixas de discos ou arquivos. Um sobressalente é um dispositivo virtual especial que rastreia dispositivos de reserva disponíveis para um conjunto.

Os exemplos a seguir mostram como criar um conjunto que consiste em dois dispositivos virtuais de nível superior, cada um com espelho de dois discos:


# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0

O exemplo abaixo mostra como criar um conjunto que consiste em um dispositivo de virtual nível superior de quatro discos:


# zpool create mypool raidz2 c1d0 c2d0 c3d0 c4d0

É possível adicionar outro dispositivo virtual de nível superior a este conjunto utilizando o comando zpool add. Por exemplo:


# zpool add mypool raidz2 c2d1 c3d1 c4d1 c5d1

Os discos, segmentos de discos ou arquivos que são utilizados em conjuntos não redundantes que funcionam como dispositivos virtuais de nível superior. Os pools de armazenamento normalmente contêm múltiplos dispositivos virtuais de primeiro nível. O ZFS cria dinamicamente faixas de dados entre todos os dispositivos virtuais de primeiro nível em um pool.

Os dispositivos virtuais e os dispositivos físicos contidos no pool de armazenamento do ZFS são exibidos com o comando zpool status. Por exemplo:


# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            c0t2d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
          mirror-2  ONLINE       0     0     0
            c0t3d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0

errors: No known data errors

Manipulando erros de criação do pool de armazenamento do ZFS

Os erros de criação de pool podem ocorrer por vários motivos. Alguns desses motivos são óbvios, como quando um dispositivo especificado não existe, enquanto outros são mais sutis.

Detectando dispositivos em uso

Antes de formatar um dispositivo, o ZFS determina se o disco está sendo usado pelo ZFS ou por alguma outra parte do sistema operacional. Se o disco estiver em uso, poderão ser exibidos erros como os seguintes:


# zpool create tank c1t0d0 c1t1d0
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c1t0d0s0 is currently mounted on /. Please see umount(1M).
/dev/dsk/c1t0d0s1 is currently mounted on swap. Please see swap(1M).
/dev/dsk/c1t1d0s0 is part of active ZFS pool zeepool. Please see zpool(1M).

Alguns destes erros podem ser ignorados utilizando a opção -f, mas grande parte deles não. As condições a seguir não podem ser ignoradas utilizando a opção - f, sendo necessário corrigí-los manualmente:

Sistema de arquivos montado

O disco ou uma de suas faixas contém um sistema de arquivos que está montado atualmente. Para corrigir este erro, use o comando umount.

Sistema de arquivos em /etc/vfstab

O disco contém um sistema de arquivos que está listado no arquivo /etc/vfstab , mas o sistema de arquivos não está montado atualmente. Para corrigir este erro, remova ou anote a linha no arquivo /etc/vfstab.

Dispositivo de dump dedicado

O disco está em uso como o dispositivo de dump dedicado para o sistema. Para corrigir este erro, use o comando dumpadm.

Parte de um pool do ZFS

O disco ou o arquivo faz parte de um pool de armazenamento ativo do ZFS. Para corrigir este erro, use o comando zpool destroy para destruir o pool, se este não for mais necessário. Ou, use o comando zpool detach para desanexar o disco do outro pool. Somente é possível desanexar um disco do pool de armazenamento espelhado.

As verificações de dispositivo em uso abaixo servem como avisos úteis e podem ser ignoradas com o uso da opção -f para criar o pool:

Contém um sistema de arquivos

O disco contém um sistema de arquivos conhecido, embora não esteja montado e não pareça estar em uso.

Parte de volume

Este disco é parte de um volume do Solaris Volume Manager.

Live upgrade

O disco está em utilização como um ambiente de inicialização alternativo para o Oracle Solaris Live Upgrade.

Parte de pool exportado do ZFS

O disco faz parte de um pool de armazenamento que foi exportado ou removido manualmente de um sistema. Neste último caso, o pool é relatado como potentially active, uma vez que o disco pode ser ou não uma unidade anexada a uma rede em uso por outro sistema. Tome cuidado ao substituir um pool potencialmente ativo.

O exemplo abaixo mostra como a opção -f é usada:


# zpool create tank c1t0d0
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c1t0d0s0 contains a ufs filesystem.
# zpool create -f tank c1t0d0

O ideal é corrigir os erros, em vez de utilizar a opção -f para ignorá-los.

Níveis de replicação inconsistentes

Não é recomendável criar pools com dispositivos virtuais de diferentes níveis de replicação. O comando zpool tenta impedir que você crie por acidente um pool com níveis de redundância inconsistentes. Se tentar criar um pool com uma configuração assim, serão exibidos erros como os seguintes:


# zpool create tank c1t0d0 mirror c2t0d0 c3t0d0
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: both disk and mirror vdevs are present
# zpool create tank mirror c1t0d0 c2t0d0 mirror c3t0d0 c4t0d0 c5t0d0
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: 2-way mirror and 3-way mirror vdevs are present

É possível ignorar estes erros com a opção -f, mas deve-se evitar esta prática. O comando também avisa sobre a criação de um pool espelhado ou RAID-Z que use dispositivos de diferentes tamanhos. Apesar desta configuração ser permitida, níveis de redundância incompatíveis resultam em espaço de disco inutilizado no dispositivo maior. A opção -f é necessária para ignorar os avisos.

Simulando uma criação de pool de armazenamento

A tentativa de criar um conjunto pode falhar de forma inesperada de diferentes maneiras, e formatar discos é uma ação potencialmente prejudicial. Para estas razões, o comando zpool create possui a opção adicional, -n, que simula a criação do conjunto sem realmente escrever no dispositivo. Esta opção simulação efetua a verificação do dispositivo em uso e a validação do nível de replicação, e relata quaisquer erros durante o processo. Se nenhum erro for encontrado, será exibida uma saída semelhante à seguinte:


# zpool create -n tank mirror c1t0d0 c1t1d0
would create 'tank' with the following layout:

        tank
          mirror
            c1t0d0
            c1t1d0

Alguns erros não podem ser detectados sem a criação real do pool. O exemplo mais comum é a especificação do mesmo dispositivo duas vezes na mesma configuração. Não é possível detectar este erro com certeza sem realmente gravar os dados, de forma que o comando zpool create -n pode relatar êxito e ainda assim falhar em criar o conjunto quando realmente executado sem esta opção.

Ponto de montagem padrão para pools de armazenamento

Quando um conjunto é criado, o ponto de montagem padrão para o conjunto de dados raiz de nível superior é /pool-name. Este diretório não deve existir ou deve estar vazio. Se o diretório não existir, será criado automaticamente. Se o diretório estiver vazio, o conjunto de dados raiz será montado em cima do diretório existente. Para criar um pool com um ponto de montagem padrão diferente, use a opção - m do comando zpool create. Por exemplo:


# zpool create home c1t0d0
default mountpoint '/home' exists and is not empty
use '-m' option to provide a different default
# zpool create -m /export/zfs home c1t0d0

Este comando cria um novo conjunto home e o conjunto de dados home com um ponto de montagem /export/zfs.

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

Destruindo pools de armazenamento do ZFS

Os pools são destruídos com o uso do comando zpool destroy. Este comando destrói o pool mesmo se contiver conjuntos de dados montados.


# zpool destroy tank

Cuidado – Cuidado –

Tome muito cuidado ao destruir um pool. Certifique-se de que está destruindo o conjunto certo e sempre tenha cópias dos dados. Se destruir por acidente o pool errado, poderá tentar recuperá-lo. Para obter mais informações, consulte Recuperando pools de armazenamento destruídos do ZFS.


Destruindo um pool com dispositivos falhos

O ato de destruir um conjunto requer que os dados sejam gravados em disco para indicar que o conjunto deixou de ser válido. Estas informações de estado evitam que o dispositivo apareça como um possível pool ao realizar uma importação. Se um ou mais dispositivos não estiverem disponíveis, o pool pode ainda assim ser destruído. No entanto, as informações de estado necessárias não serão gravadas nestes dispositivos indisponíveis.

Estes dispositivos, quando reparados de maneira adequada, são reportados como potencialmente ativos ao criar um novo conjunto. Eles aparecem como dispositivos válidos ao buscar por conjuntos para importar. Se um pool apresentar bastantes dispositivos falhos, de forma que o próprio pool é falho (o que significa que o dispositivo virtual de primeiro nível é falho), o comando imprimirá um aviso e não poderá concluir sem a opção -f. Esta opção é necessária porque o conjunto não pode ser aberto, então não é possível saber se os dados estão armazenados lá. Por exemplo:


# zpool destroy tank
cannot destroy 'tank': pool is faulted
use '-f' to force destruction anyway
# zpool destroy -f tank

Para obter mais informações sobre a integridade de pools e dispositivos, consulte Determinando o status de integridade de pools de armazenamento do ZFS.

Para obter mais informações sobre a importação de pools, consulte Importando pools de armazenamento do ZFS.