O comando zpool list fornece várias maneiras de solicitar informações relacionadas ao estado do conjunto. As informações disponíveis geralmente se enquadram em três categorias: informações de uso básico, estatísticas de E/S e status de integridade. Nesta seção, são abordados os três tipos de informações do pool de armazenamento.
Exibindo informações sobre os conjuntos de armazenamento ZFS
Visualizando estatísticas E/S para conjuntos de armazenamento ZFS
Determinando o status de integridade de pools de armazenamento do ZFS
O comando zpool list pode ser usado para exibir informações básicas sobre pools.
Sem nenhum argumento, o comando zpool listexibe as seguintes informações para todos os conjuntos no sistema:
# zpool list NAME SIZE ALLOC FREE CAP HEALTH ALTROOT tank 80.0G 22.3G 47.7G 28% ONLINE - dozer 1.2T 384G 816G 32% ONLINE - |
Esta saída de comando exibe as informações a seguir:
O nome do pool.
O tamanho total do conjunto, igual à soma do tamanho de todos os dispositivos virtuais de nível superior.
A quantidade de espaço físico alocado para todos os conjuntos de dados e metadados internos. Observe que esta quantidade difere da quantidade de espaço em disco relatada no nível do sistema de arquivos.
Para mais informações sobre a determinação de espaço disponível no sistema de arquivos, consulte Contabilidade de espaço em disco do ZFS.
A quantidade de espaço não alocado no pool.
A quantidade de espaço utilizada, expressa como uma porcentagem do espaço total de disco.
O status de integridade atual do pool.
Para obter mais informações sobre a integridade de pools, consulte Determinando o status de integridade de pools de armazenamento do ZFS.
A raiz alternativa do conjunto, se houver alguma.
Para obter mais informações sobre pools de raiz alternativa, consulte Usando pools de raiz alternativa do ZFS.
Também é possível reunir estatísticas de um determinado pool especificando o nome do pool. Por exemplo:
# zpool list tank NAME SIZE ALLOC FREE CAP HEALTH ALTROOT tank 80.0G 22.3G 47.7G 28% ONLINE - |
As estatísticas específicas podem ser solicitadas com o uso da opção -o. Esta opção proporciona relatórios personalizados ou uma forma rápida de listar informações pertinentes. Para listar, por exemplo, somente o nome e o tamanho de cada pool, você usa a seguinte sintaxe:
# zpool list -o name,size NAME SIZE tank 80.0G dozer 1.2T |
Os nomes de coluna correspondem às propriedades listadas em Listando informações sobre todos os conjuntos de armazenamento ou de um conjunto específico.
A saída padrão do comando zpool list está destinada à legibilidade, e não é fácil utilizá-la como parte de um script de shell. Para ajudar em usos programáticos do comando, a opção -H pode ser usada para suprimir os cabeçalhos de colunas e separar campos por guias, em vez de por espaços. Por exemplo, para solicitar uma lista simples de todos os nomes de conjuntos no sistema, utilize a seguinte sintaxe:
# zpool list -Ho name tank dozer |
Eis um outro exemplo:
# zpool list -H -o name,size tank 80.0G dozer 1.2T |
O ZFS registra automaticamente com sucesso os comandos zfs e zpool que modificam as informações de estado do pool. Estas informações podem ser exibidas usando o comando zpool history.
Por exemplo, a seguinte sintaxe exibe a saída do comando para o pool raiz:
# zpool history History for 'rpool': 2010-05-11.10:18:54 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=/tmp/root/etc/zfs/zpool.cache rpool mirror c1t0d0s0 c1t1d0s0 2010-05-11.10:18:55 zfs set canmount=noauto rpool 2010-05-11.10:18:55 zfs set mountpoint=/rpool rpool 2010-05-11.10:18:56 zfs create -o mountpoint=legacy rpool/ROOT 2010-05-11.10:18:57 zfs create -b 8192 -V 2048m rpool/swap 2010-05-11.10:18:58 zfs create -b 131072 -V 1536m rpool/dump 2010-05-11.10:19:01 zfs create -o canmount=noauto rpool/ROOT/zfsBE 2010-05-11.10:19:02 zpool set bootfs=rpool/ROOT/zfsBE rpool 2010-05-11.10:19:02 zfs set mountpoint=/ rpool/ROOT/zfsBE 2010-05-11.10:19:03 zfs set canmount=on rpool 2010-05-11.10:19:04 zfs create -o mountpoint=/export rpool/export 2010-05-11.10:19:05 zfs create rpool/export/home 2010-05-11.11:11:10 zpool set bootfs=rpool rpool 2010-05-11.11:11:10 zpool set bootfs=rpool/ROOT/zfsBE rpool |
É possível utilizar uma saída similar em seu sistema para identificar os comandos exatos do ZFS que foram executados para solucionar um problema de condição de erro.
Os recursos do registro de histórico são:
O registro não pode ser desativado.
O log é salvo constantemente no disco, o que significa que o log é salvo nas através das reinicializações do sistema.
O registro é implementado como buffer de anel. O tamanho mínimo é de 128 KB. O tamanho máximo é de 32 MB.
Para conjuntos menores, o tamanho máximo está limitado a 1% do tamanho do conjunto, nos quais o tamanho é determinado no momento da criação do conjunto.
O log não requer administração, o que significa que ajustar o tamanho ou alterar a localização do log é desnecessário.
Para identificar o histórico de comandos de uma pool de armazenamento específico, use a sintaxe semelhante à seguinte:
# zpool history tank History for 'tank': 2010-05-13.14:13:15 zpool create tank mirror c1t2d0 c1t3d0 2010-05-13.14:21:19 zfs create tank/snaps 2010-05-14.08:10:29 zfs create tank/ws01 2010-05-14.08:10:54 zfs snapshot tank/ws01@now 2010-05-14.08:11:05 zfs clone tank/ws01@now tank/ws01bugfix |
Utilize a opção -l para exibir um formato longo que inclui o nome de usuário, o nome do host e a região na qual a operação foi efetuada. Por exemplo:
# zpool history -l tank History for 'tank': 2010-05-13.14:13:15 zpool create tank mirror c1t2d0 c1t3d0 [user root on neo] 2010-05-13.14:21:19 zfs create tank/snaps [user root on neo] 2010-05-14.08:10:29 zfs create tank/ws01 [user root on neo] 2010-05-14.08:10:54 zfs snapshot tank/ws01@now [user root on neo] 2010-05-14.08:11:05 zfs clone tank/ws01@now tank/ws01bugfix [user root on neo] |
Use a opção -i para exibir de informações dos eventos internos que podem ser usadas para fins de diagnósticos. Por exemplo:
# zpool history -i tank 2010-05-13.14:13:15 zpool create -f tank mirror c1t2d0 c1t23d0 2010-05-13.14:13:45 [internal pool create txg:6] pool spa 19; zfs spa 19; zpl 4;... 2010-05-13.14:21:19 zfs create tank/snaps 2010-05-13.14:22:02 [internal replay_inc_sync txg:20451] dataset = 41 2010-05-13.14:25:25 [internal snapshot txg:20480] dataset = 52 2010-05-13.14:25:25 [internal destroy_begin_sync txg:20481] dataset = 41 2010-05-13.14:25:26 [internal destroy txg:20488] dataset = 41 2010-05-13.14:25:26 [internal reservation set txg:20488] 0 dataset = 0 2010-05-14.08:10:29 zfs create tank/ws01 2010-05-14.08:10:54 [internal snapshot txg:53992] dataset = 42 2010-05-14.08:10:54 zfs snapshot tank/ws01@now 2010-05-14.08:11:04 [internal create txg:53994] dataset = 58 2010-05-14.08:11:05 zfs clone tank/ws01@now tank/ws01bugfix |
Para solicitar estatísticas de E/S para um pool ou dispositivos virtuais específicos, use o comando zpool iostat. Semelhante ao comando iostat, este comando pode exibir um instantâneo estático de toda atividade de E/S, bem como estatísticas atualizadas de todos os intervalos especificados. São relatadas as seguintes estatísticas:
A quantidade de dados atualmente armazenados no pool ou dispositivo. Esta quantidade difere um pouco da quantidade de espaço de disco disponível para os sistemas de arquivos atuais devido a detalhes de implementação interna.
Para obter mais informações sobre as diferenças entre espaço de conjunto e espaço de conjunto de dados, consulte Contabilidade de espaço em disco do ZFS.
A quantidade de espaço de disco disponível no conjunto ou dispositivo. Como com a estatística used, esta quantidade difere por uma pequena margem da quantidade de espaço disponível para conjuntos de dados.
O número de operações de E/S de leitura enviado para o pool ou dispositivo, incluindo solicitações de metadados.
O número de operações de E/S de gravação enviado para o pool ou dispositivo.
A largura de banda de todas as operações de leitura (incluindo metadados), expressa como unidades por segundo.
A largura de banda de todas as operações de gravação, expressa como unidades por segundo.
Sem opções, o comando zpool iostat exibe as estatísticas acumuladas desde a inicialização de todos os pools no sistema. Por exemplo:
# zpool iostat capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- rpool 6.05G 61.9G 0 0 786 107 tank 31.3G 36.7G 4 1 296K 86.1K ---------- ----- ----- ----- ----- ----- ----- |
Uma vez que estas estatísticas são acumuladas desde a inicialização, a largura de banda pode parecer baixa se o pool estiver relativamente ocioso. É possível solicitar uma visão mais precisa do uso da largura de banda atual especificando um intervalo. Por exemplo:
# zpool iostat tank 2 capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- tank 18.5G 49.5G 0 187 0 23.3M tank 18.5G 49.5G 0 464 0 57.7M tank 18.5G 49.5G 0 457 0 56.6M tank 18.8G 49.2G 0 435 0 51.3M |
Neste exemplo, o comando exibe estatísticas de utilização para o conjunto tank a cada dois segundos até que digite Ctrl-C. Como alternativa, é possível especificar um parâmetro de count adicional, que faz com que o comando termine depois do número especificado de iterações. Por exemplo, zpool iostat 2 3 imprimiria um resumo a cada dois segundos com três iterações, em um total de seis segundos. Se houver apenas um conjunto único, as estatísticas serão exibidas em linhas consecutivas. Se houver mais de um pool, uma linha tracejada adicional delineará cada iteração para fornecer separação visual.
Além das estatísticas de E/S de todos os conjuntos, o comando zpool iostat pode exibir estatísticas de E/S para dispositivos virtuais específicos. Este comando pode ser utilizado para identificar dispositivos anormalmente lentos, ou para observar a distribuição da E/S gerada pelo ZFS. Para solicitar um layout completo do dispositivo virtual, bem como todas as estatísticas de E/S, use o comando zpool iostat -v. Por exemplo:
# zpool iostat -v capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- rpool 6.05G 61.9G 0 0 785 107 mirror 6.05G 61.9G 0 0 785 107 c1t0d0s0 - - 0 0 578 109 c1t1d0s0 - - 0 0 595 109 ---------- ----- ----- ----- ----- ----- ----- tank 36.5G 31.5G 4 1 295K 146K mirror 36.5G 31.5G 126 45 8.13M 4.01M c1t2d0 - - 0 3 100K 386K c1t3d0 - - 0 3 104K 386K ---------- ----- ----- ----- ----- ----- ----- |
Note dois pontos importantes ao visualizar estatísticas E/S para dispositivos virtuais:
Primeiro, estatísticas e utilização do espaço de disco estão disponíveis apenas para dispositivos virtuais de nível superior. A forma como o espaço de disco é alocado entre os dispositivos virtuais de espelho e RAID-Z é específica para a implementação e não é expressa facilmente como um único número.
Em segundo lugar, os números talvez não sejam somados com exatidão, como seria de esperar. Em especial, operações nos dispositivos espelhados e RAID-Z não serão exatamente iguais. Esta diferença é particularmente evidente logo depois que um conjunto é criado, uma vez que uma quantidade significativa de E/S é feita diretamente para os discos como parte da criação do conjunto, que não é contabilizada ao nível do espelho. Com o tempo, estes números equalizam gradualmente. Entretanto, dispositivos corrompidos, que não respondem ou estão off-line também podem afetar esta simetria.
É possível usar o mesmo conjunto de opções (intervalo e contagem) ao examinar estatísticas de dispositivos virtuais.
O ZFS fornece um método integrado de exame da integridade de pools e dispositivos. A integridade de um dispositivo é determinada a partir do estado de todos os seus dispositivos. Estas informações de estado são exibidas com o uso do comando zpool status. Além disso, as possíveis falhas de dispositivo e conjunto são relatadas pelo fmd e exibidas no console do sistema, e registradas no arquivo /var/adm/messages.
Esta seção descreve como determinar a integridade de pools e dispositivos. Este capítulo não documenta como reparar ou recuperar dados de pools sem integridade. Para mais informações sobre a solução de problemas e a recuperação de dados, consulte Capítulo 11Solução de problemas e conjunto de recuperação do Oracle Solaris ZFS.
Cada dispositivo pode se enquadrar em um dos seguintes estados:
O dispositivo ou dispositivo virtual está em funcionamento de trabalho normal. Embora alguns erros transitórios ainda possam ocorrer, o dispositivo está em perfeito funcionamento.
O dispositivo virtual falhou, mas continua podendo funcionar. Este estado é muito comum quando um dispositivo de espelho ou RAID-Z perde um ou mais dispositivos constituintes. A tolerância a falhas do pool pode ficar comprometida, uma vez que uma falha subseqüente em outro dispositivo pode ser irrecuperável.
O dispositivo ou dispositivo virtual está completamente inacessível. Este estado geralmente indica falha total do dispositivo, de forma que o ZFS está incapaz de enviar ou receber dados dele. Se um dispositivo de primeiro nível estiver neste estado, o pool estará totalmente inacessível.
O dispositivo foi colocado explicitamente off-line pelo administrador.
O dispositivo ou o dispositivo virtual não pode ser aberto. Em alguns casos, conjuntos com dispositivos UNAVAIL aparecem no modo DEGRADED. Se um dispositivo virtual de nível superior estiver UNAVAIL, nada no conjunto poderá ser acessado.
O dispositivo foi removido fisicamente enquanto o sistema estava em execução. A detecção da remoção do dispositivo depende do hardware e pode não ser suportada em todas as plataformas.
A integridade de um pool é determinada a partir da integridade de todos os seus dispositivos virtuais de primeiro nível. Se todos os dispositivos virtuais estiverem ONLINE, o pool também estará ONLINE. Se algum dos dispositivos virtuais estiver DEGRADED ou UNAVAIL, o conjunto também estará DEGRADED. Se um dispositivo virtual de primeiro nível estiver FAULTED ou OFFLINE, o pool também estará FAULTED. Um conjunto no estado FAULTED está completamente inacessível. Nenhum dado poderá ser recuperado até que os dispositivos necessários sejam anexados ou reparados. Um conjunto no estado DEGRADED continua a ser executado, mas talvez não atinja o mesmo nível de redundância de dados ou throughput de dados se o conjunto estivesse on-line.
É possível rever rapidamente estado de integridade dos conjuntos ao utilizar o comando zpool status como a seguir:
# zpool status -x all pools are healthy |
É possível examinar um determinado conjunto ao especificar o nome de um conjunto na sintaxe do comando. Qualquer pool que não esteja no estado ONLINE deve ser investigado no caso de haver problemas potenciais, como descrito na seção a seguir.
É possível solicitar um resumo mais detalhado do estado da integridade ao utilizar a opção -v. Por exemplo:
# zpool status -v tank pool: tank state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: scrub completed after 0h0m with 0 errors on Wed Jan 20 15:13:59 2010 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 UNAVAIL 0 0 0 cannot open errors: No known data errors |
Esta saída exibe uma descrição completa dos motivos pelos quais o pool está no estado atual, incluindo uma descrição legível do problema e um link a um artigo informativo para a obtenção de mais informações. Cada artigo informativo fornece informações atualizadas sobre a melhor forma de obter recuperação do problema atual. Utilizando as informações de configuração detalhadas, é possível determinar que dispositivo está danificado e como reparar o conjunto.
No exemplo anterior, o dispositivo falho deve ser substituído. Depois de o dispositivo ser substituído, utilize o comando zpool online para recolocar o dispositivo on-line. Por exemplo:
# zpool online tank c1t0d0 Bringing device c1t0d0 online # zpool status -x all pools are healthy |
Se a propriedade autoreplace está ativada, não é necessário colocar on-line o dispositivo substituído.
Se um conjunto tiver um dispositivo off-line, a saída do comando identifica o conjunto com problema. Por exemplo:
# zpool status -x pool: tank state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scrub: resilver completed after 0h0m with 0 errors on Wed Jan 20 15:15:09 2010 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 OFFLINE 0 0 0 48K resilvered errors: No known data errors |
As colunas READ e WRITE fornecem uma contagem dos erros de E/S ocorridos com o dispositivo, enquanto a coluna CKSUM fornece uma contagem dos erros de soma de verificação incorrigíveis que ocorreram no dispositivo. As duas contagens de erros indicam falhas potenciais do dispositivo, e algumas ações de correção são necessárias. Se forem relatados erros diferentes de zero em um dispositivo virtual de primeiro nível, partes dos dados poderão estar inacessíveis.
O campo erros: identifica erros de dados conhecidos.
Na saída do exemplo anterior, o dispositivo off-line não está causando erros de dados.
Para obter mais informações sobre o diagnóstico e a correção de conjuntos e dados falhos, consulte Capítulo 11Solução de problemas e conjunto de recuperação do Oracle Solaris ZFS.