As seções seguintes descrevem como realizar as tarefas abaixo:
Como recriar um pool raiz ZFS e recuperar instantâneos do pool raiz
Como reverter os instantâneos do pool raiz a partir da inicialização à prova de falhas
Pode ser necessário substituir um disco no pool raiz pelas seguintes razões:
O conjunto raiz é muito pequeno e deseja substituir o disco menor por um disco maior.
O disco do conjunto raiz apresenta falhas. Em um grupo não redundante, se o disco estiver falhando de modo que o sistema não inicializa, será necessário realizar a inicialização a partir de uma mídia alternativa, como um CD ou a rede, antes de substituir o disco do conjunto raiz.
Em uma configuração de conjunto raiz espelhado, é possível tentar substituir um disco sem inicializar de uma mídia alternativa. É possível substituir um disco falho ao utilizar o comando zpool replace. Ou, se possuir um disco adicional, é possível utilizar o comando zpool attach. Consulte o procedimento nesta seção para um exemplo de anexação de um disco adicional e desanexação de um disco de conjunto raiz.
Alguns softwares necessitam que traga um disco off-line e desconfigure-o antes de tentar a operação zpool replace para substituir um disco falho. Por exemplo:
# zpool offline rpool c1t0d0s0 # cfgadm -c unconfigure c1::dsk/c1t0d0 <Physically remove failed disk c1t0d0> <Physically insert replacement disk c1t0d0> # cfgadm -c configure c1::dsk/c1t0d0 # zpool replace rpool c1t0d0s0 # zpool online rpool c1t0d0s0 # zpool status rpool <Let disk resilver before installing the boot blocks> SPARC# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t0d0s0 x86# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0 |
Em alguns hardwares, não é necessário trazer o disco on-line ou reconfigurá-lo depois de ser inserido.
É necessário identificar os nomes de caminho do dispositivo de inicialização do disco atual e do disco novo para que seja possível testar uma inicialização de teste a partir do disco substituto e também uma inicialização manual a partir do disco existente, caso o disco substituto falhe. Neste exemplo no procedimento a seguir, o nome do caminho para o atual disco de conjunto raiz (c1t10d0s0) é:
/pci@8,700000/pci@3/scsi@5/sd@a,0 |
O nome do caminho para o disco de inicialização substituto (c1t9d0s0) é:
/pci@8,700000/pci@3/scsi@5/sd@9,0 |
Conecte fisicamente o disco de substituição (ou novo).
Confirme que o novo disco possui uma legenda SMI e um segmento 0.
Para obter informações sobre como relegendar um disco reservado para o pool raiz, use o seguinte site:
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
Anexe o novo disco ao pool raiz.
Por exemplo:
# zpool attach rpool c1t10d0s0 c1t9d0s0 |
Confirme os status do pool raiz.
Por exemplo:
# zpool status rpool pool: rpool state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress, 25.47% done, 0h4m to go config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c1t10d0s0 ONLINE 0 0 0 c1t9d0s0 ONLINE 0 0 0 errors: No known data errors |
Depois da conclusão do resilvering, aplique os blocos de inicialização ao novo disco.
Utilizando uma sintaxe semelhante à seguinte:
SPARC:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t9d0s0 |
x86:
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0 |
Verifique se é possível inicializar a partir do novo disco.
Por exemplo, em um sistema com base em SPARC, seria utilizada uma sintaxe semelhante à seguinte:
ok boot /pci@8,700000/pci@3/scsi@5/sd@9,0 |
Se o sistema se inicializa a partir do novo disco, desanexe o disco antigo.
Por exemplo:
# zpool detach rpool c1t10d0s0 |
Configure o sistema para que se inicialize automaticamente a partir do disco novo, ou usando o comando eeprom , o comando setenv da PROM de inicialização do SPARC, ou reconfigurando a BIOS do PC.
É possível criar instantâneos do conjunto raiz com propósito de recuperação. A melhor forma de criar instantâneos de conjunto raiz é efetuar um instantâneo recursivo do conjunto raiz.
O procedimento abaixo cria um instantâneo de conjunto raiz recursivo e armazena o instantâneo como um arquivo em um conjunto em um sistema remoto. No caso de uma falha no conjunto raiz, o conjunto de dados remoto não pode ser montado utilizando o NFS e o arquivo de instantâneo pode ser recebido no conjunto recriado. É possível também armazenar instantâneos de conjunto de raiz como os instantâneos reais em um conjunto em um sistema remoto. Enviar e receber os instantâneos de um sistema remoto é um pouco mais complicado, porque é preciso configurar ssh ou usar rsh enquanto o sistema a ser reparado é inicializado a partir da mini-raiz do SO Solaris.
Para informações sobre o armazenamento remoto e a recuperação de instantâneos de conjunto raiz e para as informações mais recentes sobre a recuperação do conjunto raiz, visite este site:
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
Validando remotamente instantâneos armazenados como arquivos ou instantâneos como um importante passo em uma recuperação de conjunto raiz. Com ambos os métodos, os instantâneos seriam recriados em uma base de rotina, como quando a configuração do conjunto é alterada ou quando o Solaris OS é atualizado.
No procedimento a seguir, o sistema é inicializado a partir do ambiente de inicialização BE.
Crie um grupo e sistema de arquivos em um sistema remoto para armazenar os instantâneos.
Por exemplo:
remote# zfs create rpool/snaps |
Compartilhe o sistema de arquivos com o sistema local.
Por exemplo:
remote# zfs set sharenfs='rw=local-system,root=local-system' rpool/snaps # share -@rpool/snaps /rpool/snaps sec=sys,rw=local-system,root=local-system "" |
Crie um instantâneo recursivo do pool raiz.
local# zfs snapshot -r rpool@0804 local# zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /rpool/ROOT rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G / rpool/ROOT/zfsBE@0804 386K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |
Envie os instantâneos do pool raiz ao sistema remoto.
Por exemplo:
local# zfs send -Rv rpool@0804 > /net/remote-system/rpool/snaps/rpool.0804 sending from @ to rpool@0804 sending from @ to rpool/swap@0804 sending from @ to rpool/ROOT@0804 sending from @ to rpool/ROOT/zfsBE@0804 sending from @ to rpool/dump@0804 |
Neste procedimento, suponha as condições a seguir:
O conjunto raiz ZFS não pode ser recuperado.
Os instantâneos do conjunto raiz ZFS estão armazenados em um sistema remoto e são compartilhados no NFS.
Todas as etapas são efetuadas no sistema local.
Inicialize a partir de um CD/DVD ou da rede.
SPARC: selecione um dos seguintes métodos de inicialização:
ok boot net -s ok boot cdrom -s |
Se não usar a opção -s, você terá que sair do programa de instalação.
x86: selecione a opção para inicializar a partir do DVD ou da rede. Em seguida, saia do programa de instalação.
Monte o conjunto de dados remoto do instantâneo.
Por exemplo:
# mount -F nfs remote-system:/rpool/snaps /mnt |
Se seus serviços de rede não estão configurados, poderá ser necessário especificar o endereço IP do sistema remoto .
Se o disco do conjunto raiz for substituído e não contiver uma legenda de disco que possa ser utilizada pelo ZFS, será necessário rotular o disco novamente.
Para obter mais informações sobre como rotular um disco novamente, vá ao seguinte site:
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
Recrie o pool raiz.
Por exemplo:
# zpool create -f -o failmode=continue -R /a -m legacy -o cachefile= /etc/zfs/zpool.cache rpool c1t1d0s0 |
Restaure os instantâneos do pool raiz
Esta etapa pode levar algum tempo. Por exemplo:
# cat /mnt/rpool.0804 | zfs receive -Fdu rpool |
O uso da opção -u significa que o arquivo restaurado não é montado quando a operação do zfs receive terminar.
Verifique se os conjuntos de dados do pool raiz foram restaurados.
Por exemplo:
# zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /a/rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /legacy rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G /a rpool/ROOT/zfsBE@0804 398K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |
Defina a propriedade bootfs no BE do pool raiz.
Por exemplo:
# zpool set bootfs=rpool/ROOT/zfsBE rpool |
Instale os blocos de inicialização no novo disco.
SPARC:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0 |
x86:
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0 |
Reinicialize o sistema.
# init 6 |
Este procedimento pressupõe que os instantâneos existentes do pool raiz estejam disponíveis. Neste exemplo, eles estão disponíveis no sistema local.
# zfs snapshot -r rpool@0804 # zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /rpool/ROOT rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G / rpool/ROOT/zfsBE@0804 398K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |
Desligue o sistema e inicialize no modo à prova de falhas.
ok boot -F failsafe ROOT/zfsBE was found on rpool. Do you wish to have it mounted read-write on /a? [y,n,?] y mounting rpool on /a Starting shell. |
Reverta cada instantâneo do conjunto raiz.
# zfs rollback rpool@0804 # zfs rollback rpool/ROOT@0804 # zfs rollback rpool/ROOT/zfsBE@0804 |
Reinicialize no modo multiusuário.
# init 6 |