Ignorar Links de Navegao | |
Sair do Modo de Exibio de Impresso | |
![]() |
Guia de administração do Oracle Solaris ZFS Oracle Solaris 10 1/13 Information Library (Português (Brasil)) |
1. Sistema de arquivos do Oracle Solaris ZFS (introdução)
2. Introdução ao ZFS do Oracle Solaris
3. Gerenciando pools de armazenamento do Oracle Solaris ZFS
4. Instalando e inicializando um sistema de arquivos raiz do Oracle Solaris ZFS
5. Gerenciando sistemas de arquivos ZFS do Oracle Solaris
6. Trabalhando com instantâneos e clones do Oracle Solaris ZFS
7. Uso de ACLs e atributos para proteger arquivos do Oracle Solaris ZFS
8. Administração delegada do ZFS do Oracle Solaris
9. Tópicos avançados do Oracle Solaris ZFS
10. Solução de problemas e recuperação de pools do Oracle Solaris ZFS
Identificando Problemas no ZFS
Resolvendo Problemas Gerais de Hardware
Identificando Falhas de Hardware e Dispositivo
Relatório de mensagens de erros do ZFS do sistema
Identificando Problemas com Pools de Armazenamento do ZFS
Determinando se há problemas em um pool de armazenamento do ZFS
Revisando a saída de zpool status
Informações gerais sobre o status do pool
Informações de configuração do pool de armazenamento do ZFS
Status de Scrub do Pool de Armazenamento do ZSF
Erros de Corrompimento de Dados do ZFS
Resolvendo Problemas do Dispositivo de Armazenamento do ZFS
Resolvendo um Dispositivo Ausente ou Removido
Resolvendo um Dispositivo Removido
Reanexando fisicamente um dispositivo
Notificando o ZFS da disponibilidade de um dispositivo
Substituindo ou reparando um dispositivo modificado
Determinando o tipo de falha do dispositivo
Apagando Erros Transitórios do Dispositivo
Substituindo um dispositivo em um pool de armazenamento do ZFS
Determinando se um dispositivo pode ser substituído
Dispositivos que não podem ser substituídos
Substituindo um dispositivo em um pool de armazenamento do ZFS
Exibindo o status do resilvering
Resolvendo Problemas do Sistema de Arquivos do ZFS
Resolvendo Problemas de Dados em um Pool de Armazenamento do ZFS.
Verificando a integridade do sistema de arquivos ZFS
Validação do sistema de arquivos
Controlando o scrubbing de dados do ZFS
Scrubbing explícito de dados do ZFS
Scrubbing e resilvering de dados do ZFS
Resolvendo Problemas de Espaço do ZFS
Relatório de Espaço do Sistema de Arquivos ZFS
Relatórios de Espaço do Pool de Armazenamento do ZFS
Identificando o tipo de corrupção de dados
Reparando arquivos ou diretórios corrompidos
Reparando os Dados Corrompidos com Várias Referências de Bloco
Reparando uma configuração do ZFS danificada
Reparando um sistema não inicializável
11. Práticas Recomendadas do Oracle Solaris ZFS
Exemplos de problemas de dados incluem:
Erros transitórios de E/S devido a disco ou controlador defeituosos
Corrupção de dados em disco devido a raios cósmicos
Erros de driver resultando em transferência de dados de ou para locais incorretos
Um usuário substitui porções do dispositivo físico por acidente
Em alguns casos, estes erros são transitórios, como um erro de E/S aleatório durante problemas com o controlador. Em outros casos, o problema pode ser permanente, como a corrupção em disco. Ainda assim, se o problema for permanente, isso não significa necessariamente que o erro ocorrerá novamente. Por exemplo, se você substitui acidentalmente parte de um disco, e nenhum tipo de falha de hardware ocorre, o dispositivo não precisa ser trocado. Identificar exatamente o problema com o dispositivo não é uma tarefa fácil, por isso esse tema é abordado mais detalhadamente em uma seção posterior.
Não existe o utilitário fsck equivalente para o ZFS. Esse utilitário tem tradicionalmente servido a dois propósitos, ao reparo e à validação do sistema de arquivos.
Com os sistemas de arquivos tradicionais, a forma como os dados são gravados está inerentemente vulnerável a falhas inesperadas, provocando inconsistências de dados. Como um sistema de arquivos tradicional não é transacional, blocos não referenciados, contagens ruins de link ou outras estruturas de sistema de arquivos inconsistentes são possíveis. A adição de registros de ações resolve alguns destes problemas, porém pode trazer outros problemas quando o registro não puder ser revertido. A única forma para dados inconsistentes existirem no disco em uma configuração ZFS é através de falha do hardware (nesse caso o pool deve possuir redundância) ou quando um erro existir no software ZFS.
O utilitário fsck repara problemas conhecidos específicos para sistemas de arquivos UFS. A maioria dos problemas do pool de armazenamento do ZFS são relacionados a falhas de hardware ou falhas de energia. Muitos problemas podem ser evitados através da utilização de pools redundantes. Se o pool for danificado por falhas de hardware ou queda de energia, consulte Reparando o dano de todo o pool de armazenamento do ZFS.
Se o pool não for redundante, haverá sempre a possibilidade de que a corrupção do sistema de arquivos torne alguns ou todos os dados inacessíveis.
Além de efetuar a reparação do sistemas de arquivos, o utilitário fsck valida que os dados em disco não apresentam problemas. Tradicionalmente, essa tarefa requer a desmontagem do sistema de arquivos e a execução do utilitário fsck, levando o sistema possivelmente para o modo de usuário único no processo. Este quadro tem como resultado um tempo de inatividade proporcional ao tamanho do sistema de arquivos que está sendo verificado. Em vez de exigir um utilitário explícito para efetuar a verificação necessária, o ZFS fornece um mecanismo para efetuar verificações rotineiras de todos as inconsistências. Esse recurso, conhecido como scrubbing, é utilizado, geralmente, na memória e em outros sistemas como um método de detecção e prevenção de erros, antes que estes provoquem falha de hardware ou de software.
Sempre que o ZFS encontrar um erro através de scrubbing ou ao acessar um arquivo por demanda, o erro é registrado internamente para que você possa ter uma visão geral rápida de todos os erros conhecidos no pool.
A forma mais simples de verificar a integridade dos dados é iniciar um scrubbing explícito de todos os dados do pool. Esta operação percorre todos os dados do pool uma vez e comprova que todos os blocos possam ser lidos. O scrubbing se desenvolve tão rápido quanto os dispositivos permitam, sem bem que a prioridade de qualquer E/S é menor que a prioridade dada às operações normais. Essa operação pode impactar negativamente o desempenho, embora os dados do pool devam permanecer utilizáveis e um pouco receptivos enquanto o scrubbing ocorrer. Para iniciar um scrubbing explícito, use o comando zpool scrub. Por exemplo:
# zpool scrub tank
O status da operação de scrubbing atual pode ser exibido utilizando o comando zpool status. Por exemplo:
# zpool status -v tank pool: tank state: ONLINE scrub: scrub completed after 0h7m with 0 errors on Tue Tue Feb 2 12:54:00 2010 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 errors: No known data errors
Somente uma operação de scrubbing ativa por pool pode ocorrer por vez.
É possível parar uma operação de scrubbing em andamento com a opção -s. Por exemplo:
# zpool scrub -s tank
Na maioria dos casos, as operações de scrub devem chegar até o final para garantir a integridade dos dados. Interrompa uma operação de scrubbing de acordo com os seus próprios critérios se a performance do sistema é impactada pela operação.
Efetuar scrubbing de rotina garante E/S contínua para todos os discos do sistema. Operações de scrub rotineiras apresentam a desvantagem de não permitir que o gerenciamento de energia coloque os discos inativos no modo de energia baixa. Se o sistema estiver geralmente realizando E/S sem parar ou se o consumo de energia não for uma preocupação, então esta questão pode ser ignorada sem perigo.
Para obter mais informações sobre a interpretação da saída zpool status, consulte Consultando status de pool de armazenamento do ZFS.
Quando um dispositivo é substituído, inicia-se uma operação de resilvering para mover os dados provenientes de cópias boas para o novo dispositivo. Esta ação é uma forma de scrubbing de disco. Portanto, somente uma dessas ações pode ocorrer em um dado momento no pool. Se uma operação de scrub estiver em andamento, uma operação de resilver suspenderá a escovação atual e reiniciará depois da conclusão do polimento.
Para obter mais informações sobre o processo de resilver, consulte Exibindo o status do resilvering.
A corrupção de dados ocorre quando um ou mais erros no dispositivo (indicando um ou mais dispositivos ausentes ou danificados) afetam o dispositivo virtual de nível superior. Por exemplo, a metade de um espelho pode sofrer milhares de erros de dispositivo sem jamais causar corrupção de dados. Se for encontrado um erro no outro lado do espelho exatamente no mesmo local, ocorre corrompimento dos dados.
A corrupção de dados é sempre permanente e requer cuidados especiais durante a reparação. Mesmo que os dispositivos subjacentes forem reparados ou substituídos, os dados originais não poderão ser recuperados. Frequentemente, esse tipo de situação requer a recuperação dos dados a partir de backups. Os erros dos dados são registrados à medida que vão sendo encontrados e podem ser controlados através de um processo de depuração rotineiro do pool, como explicado na seção a seguir. Quando um bloco corrompido é removido, o próximo ciclo de limpeza reconhece que a corrupção já não existe e remove qualquer vestígio de erro do sistema.
Verifique as seções a seguir se não tiver certeza sobre como o ZFS reporta informações sobre espaço no sistema de arquivos e no pool. Além disso, consulte Contabilidade de espaço em disco do ZFS.
Os comandos zpool list e zfs list são melhores que os comandos df and du anteriores para determinar o espaço disponível no pool e no sistema de arquivos. Com os comandos legados, você não pode discernir facilmente entre o espaço do pool e do sistema de arquivos. Esses comandos legados também não contam espaço consumido pelos sistemas de arquivos ou instantâneos descendentes.
Por exemplo, o pool raiz a seguir (rpool) tem 5.46 GB alocados e 68.5 GB livres.
# zpool list rpool NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 74G 5.46G 68.5G 7% 1.00x ONLINE -
Se você comparar a contabilização do espaço do pool com a do sistema de arquivos examinando a coluna USED dos seus sistemas de arquivos individuais, poderá ver que o espaço do pool reportado em ALLOC é contabilizado no total de USED dos sistemas de arquivos . Por exemplo:
# zfs list -r rpool NAME USED AVAIL REFER MOUNTPOINT rpool 5.41G 67.4G 74.5K /rpool rpool/ROOT 3.37G 67.4G 31K legacy rpool/ROOT/solaris 3.37G 67.4G 3.07G / rpool/ROOT/solaris/var 302M 67.4G 214M /var rpool/dump 1.01G 67.5G 1000M - rpool/export 97.5K 67.4G 32K /rpool/export rpool/export/home 65.5K 67.4G 32K /rpool/export/home rpool/export/home/admin 33.5K 67.4G 33.5K /rpool/export/home/admin rpool/swap 1.03G 67.5G 1.00G -
O valor SIZE reportado pelo comando zpool list costuma ser a quantidade de espaço em disco físico do pool, mas varia dependendo do nível de redundância do pool. Consulte o exemplo abaixo. O comando zfs list lista o espaço utilizável disponível para os sistemas de arquivos, que é o espaço em disco menos a sobrecarga de metadados da redundância do pool do ZFS, se houver.
Pool de armazenamento não redundante – Quando um pool é criado com um disco de 136 GB, o comando zpool list reporta valores iniciais de SIZE e FREE como 136 GB. O espaço AVAIL reportado pelo comando zfs list é de 134 GB devido à pequena quantidade de sobrecarga de metadados do pool. Por exemplo:
# zpool create tank c0t6d0 # zpool list tank NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank 136G 95.5K 136G 0% 1.00x ONLINE - # zfs list tank NAME USED AVAIL REFER MOUNTPOINT tank 72K 134G 21K /tank
Pool de armazenamento espelhado – Quando um pool é criado com um disco de 136 GB, o comando zpool list reporta SIZE como 136 GB e o valor inicial de FREE de 136 GB. Esse relatório é chamado de valor de espaço deflated. O espaço AVAIL reportado pelo comando zfs list é de 134 GB devido à pequena quantidade de sobrecarga de metadados do pool. Por exemplo:
# zpool create tank mirror c0t6d0 c0t7d0 # zpool list tank NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank 136G 95.5K 136G 0% 1.00x ONLINE - # zfs list tank NAME USED AVAIL REFER MOUNTPOINT tank 72K 134G 21K /tank
Pool de armazenamento RAID-Z – Quando um pool raidz2 é criado com um disco de 136 GB, o comando zpool list reporta SIZE como 408 GB e valores FREE iniciais como 408 GB. Esse relatório é chamado de valor de espaço em disco inflado, o que inclui sobrecarga de redundância, como informações sobre paridade. O espaço AVAIL inicial reportado pelo comando zfs list é de 133 GB devido à sobrecarga de redundância do pool. A discrepância de espaço entre a saída zpool list e a zfs list de um pool de RAID-Z ocorre porque zpool list reporta o espaço de pool inflado.
# zpool create tank raidz2 c0t6d0 c0t7d0 c0t8d0 # zpool list tank NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank 408G 286K 408G 0% 1.00x ONLINE - # zfs list tank NAME USED AVAIL REFER MOUNTPOINT tank 73.2K 133G 20.9K /tank
As seções seguintes descrevem como identificar o tipo de corrupção de dados e como reparar os dados, se possível.
O ZFS utiliza a soma de verificação, redundância e autocorreção de dados para minimizar o risco de corrupção de dados. Por outro lado, a corrupção de dados pode ocorrer se um pool não é redundante, se a corrupção ocorreu enquanto um pool foi degradado ou uma série de eventos conspirados para corromper cópias múltiplas de uma parte dos dados. Em relação à origem, o resultado é o mesmo: Os dados estão corrompidos e, portanto, não podem ser acessados. A ação tomada depende do tipo de dados que estão corrompidos e de seu valor relativo. Podem ser corrompidos dois tipos básicos de dados:
Metadados do pool – O ZFS requer uma determinada quantidade de dados a ser processada para abrir um pool e acessar os conjuntos de dados. Se esses dados estiverem corrompidos, todo o pool ou partes do conjunto de dados se tornarão indisponíveis.
Dados do objeto – Neste caso, a corrupção está dentro de um arquivo ou um diretório específico. Este problema pode fazer com que uma parte do arquivo ou diretório não possa ser acessada ou que o objeto fique totalmente danificado.
Os dados são verificados durante operações normais bem como através de um scrubbing. Para obter informações sobre como verificar a integridade dos dados do pool, consulte Verificando a integridade do sistema de arquivos ZFS.
Por padrão, o comando zpool status mostra somente que ocorreu uma corrupção, mas não mostra onde esta corrupção ocorreu. Por exemplo:
# zpool status monkey pool: monkey state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scrub: scrub completed after 0h0m with 8 errors on Tue Jul 13 13:17:32 2010 config: NAME STATE READ WRITE CKSUM monkey ONLINE 8 0 0 c1t1d0 ONLINE 2 0 0 c2t5d0 ONLINE 6 0 0 errors: 8 data errors, use '-v' for a list
Cada erro indica somente que um erro ocorreu em um dado momento. Os erros não estão necessariamente presentes no sistema até este momento. Sob circunstâncias normais, esse é o caso. Certas interrupções podem resultar em corrupção de dados que são automaticamente reparados depois que a interrupção acaba. É realizado um scrubbing completo do pool a fim de examinar todos os blocos ativos no pool, assim o registro do erro é redefinido sempre que o scrubbing terminar. Se detectar que os erros já não estão presentes e não quiser esperar a conclusão do scrubbing, redefina todos os erros no pool com o comando zpool online.
Se a corrupção de dados estiver nos metadados de todo o pool, a saída é um pouco diferente. Por exemplo:
# zpool status -v morpheus pool: morpheus id: 1422736890544688191 state: FAULTED status: The pool metadata is corrupted. action: The pool cannot be imported due to damaged devices or data. see: http://www.sun.com/msg/ZFS-8000-72 config: morpheus FAULTED corrupted data c1t10d0 ONLINE
No caso de corrupção em todo o pool, o pool será colocado no estado FAULTED porque ele não poderá fornecer o nível solicitado de redundância.
Se um arquivo ou diretório está corrompido, o sistema ainda pode funcionar, dependendo do tipo de corrupção. Qualquer dano é efetivamente irrecuperável se não há nenhuma cópia boa de dados no sistema. Se os dados estão disponíveis, é preciso restaurar os dados afetados do backup. Ainda assim, é possível realizar a recuperação desta corrupção sem restaurar o pool inteiro.
Se o dano for dentro de um bloco de dados do arquivo, o arquivo poderá ser removido com segurança, eliminando o erro do sistema. Utilize o comando zpool status -v para exibir uma lista de nomes de arquivos com erros persistentes. Por exemplo:
# zpool status -v pool: monkey state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scrub: scrub completed after 0h0m with 8 errors on Tue Jul 13 13:17:32 2010 config: NAME STATE READ WRITE CKSUM monkey ONLINE 8 0 0 c1t1d0 ONLINE 2 0 0 c2t5d0 ONLINE 6 0 0 errors: Permanent errors have been detected in the following files: /monkey/a.txt /monkey/bananas/b.txt /monkey/sub/dir/d.txt monkey/ghost/e.txt /monkey/ghost/boo/f.txt
A lista de nomes de arquivos com erros persistentes devem ser descritos como os seguintes:
Se o caminho completo do arquivo for encontrado e o conjunto de dados estiver montado, o caminho completo do arquivo será exibido. Por exemplo:
/monkey/a.txt
Se o caminho completo do arquivo for encontrado, mas o conjunto de dados não estiver montado, o nome do conjunto de dados será exibido sem a barra (/) precedente, seguido do caminho dentro do conjunto de dados do arquivo. Por exemplo:
monkey/ghost/e.txt
Se o número do objeto não puder ser traduzido com sucesso para o caminho do arquivo, devido a um erro ou pelo fato de o objeto não possuir um caminho de arquivo verdadeiro associado a ele, como é o caso de dnode_t, então o nome do conjunto de dados seguido do número do objeto será exibido. Por exemplo:
monkey/dnode:<0x0>
Se um objeto no metaobject set (MOS) está corrompido, então uma tag especial de <metadata>, seguida pelo número do objeto, é exibida.
Se a corrupção estiver dentro dos metadados de um arquivo ou diretório, a única opção é mover os arquivos para outro local. É possível mover seguramente qualquer arquivo ou diretório para um local menos conveniente, permitindo que o objeto original seja restaurado em seu lugar.
Se um sistema de arquivos danificado tiver dados corrompidos com várias referências de bloco, como instantâneos, o comando zpool status -v exibirá todos os caminhos de dados corrompidos. O relatório de zpool status atual de dados corrompidos é limitado pela quantidade de corrompimento de metadados e pelo fato de algum bloco ter sido reutilizado depois da execução do comando zpool status. Blocos com cancelamento de duplicação complicam mais a geração de relatórios de dados corrompidos.
Se você tiver dados corrompidos e o comando zpool status -v identificar que os dados do instantâneo foram afetados, considere executar o comando a seguir para identificar outros caminhos corrompidos:
Se o dano estiver nos metadados do pool e o dano impedir que o pool seja aberto ou importado, as seguintes opções estarão disponíveis para você:
Você pode tentar recuperar o pool usando o comando zpool clear -F ou o comando zpool import -F. Esses comandos tentam retornar as últimas transações do pool para um estado operacional. É possível utilizar o comando zpool status para rever um pool danificado e as etapas de recuperação recomendadas. Por exemplo:
# zpool status pool: tpool state: FAULTED status: The pool metadata is corrupted and the pool cannot be opened. action: Recovery is possible, but will result in some data loss. Returning the pool to its state as of Wed Jul 14 11:44:10 2010 should correct the problem. Approximately 5 seconds of data must be discarded, irreversibly. Recovery can be attempted by executing 'zpool clear -F tpool'. A scrub of the pool is strongly recommended after recovery. see: http://www.sun.com/msg/ZFS-8000-72 scrub: none requested config: NAME STATE READ WRITE CKSUM tpool FAULTED 0 0 1 corrupted data c1t1d0 ONLINE 0 0 2 c1t3d0 ONLINE 0 0 4
O processo de recuperação, conforme descrito na saída anterior, deve usar o seguinte comando:
# zpool clear -F tpool
Se você tentar importar um pool de armazenamento danificado, irá visualizar mensagens semelhantes a estas:
# zpool import tpool cannot import 'tpool': I/O error Recovery is possible, but will result in some data loss. Returning the pool to its state as of Wed Jul 14 11:44:10 2010 should correct the problem. Approximately 5 seconds of data must be discarded, irreversibly. Recovery can be attempted by executing 'zpool import -F tpool'. A scrub of the pool is strongly recommended after recovery.
O processo de recuperação, conforme descrito na saída anterior, deve usar o seguinte comando:
# zpool import -F tpool Pool tpool returned to its state as of Wed Jul 14 11:44:10 2010. Discarded approximately 5 seconds of transactions
Se o pool danificado estiver no arquivo zpool cache, o problema será descoberto quando o sistema for inicializado e o pool danificado for reportado no comando zpool status. Se o pool não estiver no arquivo zpool cache, ele não será importado nem aberto com sucesso, e você verá mensagens de pools danificados quando tentar importar o pool.
Você pode importar um pool danificado no modo somente leitura. Este método permite importar o pool de forma que você possa acessar os dados. Por exemplo:
# zpool import -o readonly=on tpool
Para obter mais informações sobre a importação de um pool somente leitura, consulte Importação de um pool no modo somente leitura.
Você pode importar um pool com um dispositivo de log ausente usando o comando zpool import -m. Para obter mais informações, consulte Importação de um pool com um dispositivo de log ausente.
Se o pool não pode ser recuperado pelo método de recuperação do pool, você deverá restaurar o pool e todos os seus dados de uma cópia de backup. O mecanismo utilizado varia muito dependendo da configuração do pool e da estratégia de backup. Primeiro, salve a configuração como exibida pelo comando zpool status, assim é possível recriá-la depois que o pool for destruído. Então, utilize o comando zpool destroy -f para destruir o pool.
Mantenha também, em um lugar seguro, um arquivo que descreva o layout dos conjuntos de dados e as diversas propriedades de conjunto, já que estas informações não poderão ser acessadas se o pool não puder ser acessado. Com a configuração do pool e o layout do conjunto de dados, você pode reconstruir a configuração completa depois de destruir o pool. Os dados podem, então, ser preenchidos usando o backup ou a estratégia de restauração de sua preferência.