Pular para o conteúdo

Solaris 11: ZFS Self Healing

Solaris 11: ZFS Self Healing

O ZFS possui a capacidade de self healing, ou seja, auto correção. Quando outro Volume Manager espalharia uma possível corupção de dados, ele faz o contrário.

Para testar esta capacidade no pool test, primeiro verificamos que não há erros.

ricardo@solaris:~$ sudo zpool list
 Password:
 NAME    SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
 rpool  99.5G  22.5G  77.0G  22%  1.00x  ONLINE  -
 test   9.94G  1.28G  8.66G  12%  4.18x  ONLINE  -
 ricardo@solaris:~$ sudo zpool status test
   pool: test
  state: ONLINE
   scan: resilvered 1.28G in 0h9m with 0 errors on Wed May  9 09:12:50 2012
 config:
 
         NAME        STATE     READ WRITE CKSUM
         test        ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             c3t3d0  ONLINE       0     0     0
             c3t2d0  ONLINE       0     0     0
 
 errors: No known data errors

Agora vamos criar um arquivo extra para testes, e verificar sua integridade.

ricardo@solaris:/test$ mkfile 1g /test/ArquivoTeste
 ricardo@solaris:/test$ md5sum /test/ArquivoTeste > /test/ArquivoTeste.md5
 ricardo@solaris:/test$ md5sum --check /test/ArquivoTeste.md5
 /test/ArquivoTeste: OK
 ricardo@solaris:/test$ ls -lh /test/
 total 2097435
 -rw-------   1 ricardo  staff       1.0G May  9 09:49 ArquivoTeste
 -rw-r--r--   1 ricardo  staff         53 May  9 09:49 ArquivoTeste.md5
 drwxr-xr-x   3 ricardo  staff          3 May  7 06:13 Docs01
 drwxr-xr-x   3 ricardo  staff          3 May  7 06:16 Docs02
 drwxr-xr-x   3 ricardo  staff          3 May  7 06:22 Docs03
 drwxr-xr-x   3 ricardo  staff          3 May  7 06:38 Docs04
 ricardo@solaris:/test$ df -h /test/
 Filesystem             Size   Used  Available Capacity  Mounted on
 test                    15G   6.2G       8.4G    43%    /test

Agora vamos causar diversas corrupções em um dos discos, com o comando dd.
Fiz três gravações de dados aleatórios no disco, uma de 1MB, outra de 10MB, e depois uma de 100MB.

ricardo@solaris:/test$ sudo dd if=/dev/urandom of=/dev/dsk/c3t3d0 bs=1024 count=1024
 Password:
 1024+0 records in
 1024+0 records out
 ricardo@solaris:/test$ sudo dd if=/dev/urandom of=/dev/dsk/c3t3d0 bs=1024 count=10240
 10240+0 records in
 10240+0 records out
 ricardo@solaris:/test$ sudo dd if=/dev/urandom of=/dev/dsk/c3t3d0 bs=1024 count=102400
 102400+0 records in
 102400+0 records out

Agora verificamos o estado do pool, e continua tudo em ordem.

ricardo@solaris:/test$ zpool status test
   pool: test
  state: ONLINE
   scan: resilvered 1.28G in 0h9m with 0 errors on Wed May  9 09:12:50 2012
 config:
 
         NAME        STATE     READ WRITE CKSUM
         test        ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             c3t3d0  ONLINE       0     0     0
             c3t2d0  ONLINE       0     0     0
 
 errors: No known data errors

Como o ZFS faz um grande uso de cache em memória, acho que ele não detectou ainda a corrupção feita diretamente no disco físico. Vamos então desmontar e montar o pool, e refazer a verificação.

ricardo@solaris:/test$ sudo zpool export test
 cannot unmount '/test': Device busy
 ricardo@solaris:/test$ cd
 ricardo@solaris:~$ sudo zpool export test
 ricardo@solaris:~$ sudo zpool import test
 ricardo@solaris:~$ zpool status test
   pool: test
  state: ONLINE
 status: One or more devices has experienced an unrecoverable error. An attempt was made to correct the error. Applications are unaffected.
 action: Determine if the device needs to be replaced, and clear the errors
         using 'zpool clear' or replace the device with 'zpool replace'.
    see: http://www.sun.com/msg/ZFS-8000-9P
   scan: resilvered 1.28G in 0h9m with 0 errors on Wed May  9 09:12:50 2012
 config:
 
         NAME        STATE     READ WRITE CKSUM
         test        ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             c3t3d0  ONLINE       0     0     7
             c3t2d0  ONLINE       0     0     0
 
 errors: No known data errors

Agora sim o ZFS acusou o erro, mas como ele mesmo informa, foi feita uma tentativa de corrigir o erro, e aplicações não foram afetadas. Adicionalmente, o comando informa que deve ser melhor trocar o disco (ele não sabe que eu fiz o dd).
Conferindo a integridade do arquivo de teste, realmente ele continua ok.

ricardo@solaris:~$ ls -lh /test
 total 2097435
 -rw-------   1 ricardo  staff       1.0G May  9 09:49 ArquivoTeste
 -rw-r--r--   1 ricardo  staff         53 May  9 09:49 ArquivoTeste.md5
 drwxr-xr-x   3 ricardo  staff          3 May  7 06:13 Docs01
 drwxr-xr-x   3 ricardo  staff          3 May  7 06:16 Docs02
 drwxr-xr-x   3 ricardo  staff          3 May  7 06:22 Docs03
 drwxr-xr-x   3 ricardo  staff          3 May  7 06:38 Docs04
 ricardo@solaris:~$ md5sum --check /test/ArquivoTeste.md5
 /test/ArquivoTeste: OK
 ricardo@solaris:~$

Ricardo Portilho Proni

Ricardo Portilho Proni

Com 20 anos de experiência profissional, Oracle ACE Member – eleito pela Oracle Corporation um dos maiores especialistas do mundo em Oracle Database- Trabalhou em grande parte dos maiores bancos de dados Oracle do Brasil. Certificado em Oracle, SQL Server, DB2, MySQL, Sybase e Websphere. Conselheiro do GPO e do GUOB, palestrante do ENPO, GUOB Tech Day e Oracle Open World, escritor da Revista SQL Magazine e Instrutor na Nerv.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress