As pessoas costumam perder o controle de onde as coisas deram errado, um arquivo foi excluído e ninguém percebeu que ele desapareceu. Vários backups passaram e agora você percebe que falta um arquivo importante em todos os backups disponíveis das últimas 5 semanas. Neste tutorial, veremos como usar os instantâneos do ZFS e abordar várias políticas de instantâneos que funcionariam de maneira ideal, em termos de utilização e recuperação de recursos e recuperação.
O ZFS tem a visão geral de alto nível de arquivos e diretórios e entende como os dados são escritos no disco. Ao escrever dados fisicamente em um disco, é feito em blocos discretos. Normalmente, o tamanho do bloco pode subir para 1 MB, mas o padrão geralmente é de 128 kb. Agora, isso significa que toda modificação (leia, gravação ou exclusão) acontecerá nos blocos discretos.
O mecanismo de cópia sobre gravação garante que, sempre que um bloco for modificado, em vez de modificar o bloco diretamente, ele faz uma cópia do bloco com as modificações necessárias feitas no novo bloco.
Isso é especialmente útil nos casos em que, por exemplo, há uma falha de energia e seu sistema trava enquanto novos dados estavam sendo gravados no disco. Se isso acontecer em um sistema de arquivos tradicional, seus arquivos serão corrompidos ou deixados com orifícios. Mas se você estiver usando o ZFS, poderá perder a transação em andamento como isso estava acontecendo, mas o último estado válido de seus arquivos ainda será deixado intocado.
Os instantâneos também dependem dessa funcionalidade, e fortemente. Quando você tira um instantâneo de um determinado conjunto de dados ('DataSet' é o termo ZFS para um sistema de arquivos), o ZFS apenas registra o registro de data e hora quando o instantâneo foi feito. É isso! Nenhum dado é copiado e nenhum armazenamento extra é consumido.
Somente quando o sistema de arquivos muda e os dados em TI divergem do instantâneo, o instantâneo começa a consumir armazenamento extra. O que acontece sob o capô é isso - em vez de reciclar os blocos antigos ao longo do tempo, o ZFS os mantém ao redor. Isso também melhora a utilização de armazenamento. Se você instantar um conjunto de dados de 20 GB e modificar apenas alguns arquivos de texto aqui e ali, o instantâneo pode levar apenas alguns MBs de espaço.
Criando instantâneos
Para demonstrar o uso de instantâneos, vamos começar com um conjunto de dados que tem muitos arquivos de texto, apenas para manter o assunto simples. A máquina virtual que eu usarei para a demonstração está executando o FreeBSD 11.1-RELEASE-P3, que é o último lançamento estável disponível no momento da redação deste artigo. O sistema de arquivos raiz é montado no zroot pool por padrão e muitos diretórios familiares como /usr /src, /home, /etc estão todos os seus próprios conjuntos de dados montados em zroot. Se você não sabe o que significa uma piscina (ou um zpool), no vernacular do ZFS, valeria a pena lê -lo antes de continuar.
Um dos muitos sistemas de arquivos, ou conjuntos de dados, que vêm por padrão no FreeBSD é: zroot/usr/src
Para observar as propriedades, execute o seguinte comando.
root@testbsd: ~ $ zfs list zroot/usr/src
Como você pode ver, usa 633 MB de armazenamento. Ele contém toda a árvore de origem para o sistema operacional.
Vamos tirar um instantâneo de zroot/usr/src
root@testbsd: ~ $ zfs instantâneo zroot/usr/src@snapshot1
O @ símbolo atua como um delimitador entre o conjunto de dados e o nome do instantâneo, que no nosso caso é Snapshot1.
Agora vamos olhar para o estado da instantânea como é criado.
Ao executar o comando:
Lista ZFS -RT TODOS ZROOT/USR/SRC
Você pode ver que o instantâneo não usa espaço extra quando nascer. Também não existe espaço disponível, porque é um conjunto de dados estritamente leitura, o próprio instantâneo não pode crescer, modificar ou encolher. Por fim, não está montado em nenhum lugar, o que o torna completamente isolado da hierarquia do sistema de arquivos dado.
Agora, vamos remover o Sbin diretório em /usr/src/
root@testbsd: $ rm/usr/src/sbin
Olhando para o instantâneo, você verá agora que cresceu,
Isso é esperado porque o mecanismo de cópia sobre gravação está em ação aqui e a exclusão (ou modificando) os arquivos levou a mais dos dados sendo associados apenas ao instantâneo e não ao conjunto de dados realmente em uso.
Observe a coluna de referência na saída acima. Ele fornece a quantidade de dados acessíveis no conjunto de dados, enquanto a coluna usada apenas mostra quanto espaço está ocupado no disco físico.
O mecanismo de cópia sobre gravação do ZFS geralmente fornece esses resultados contra-intuitivos, onde a exclusão de um arquivo faria parecer que mais espaço está sendo usado do que antes. No entanto, tendo lido até agora, você sabe o que realmente está acontecendo!
Antes de terminar, vamos recuperar o Sbin de Snapshot1. Para fazer isso, simplesmente correr:
root@testbsd:/usr/src $ zfs rollback zroot/usr/src@snapshot1
Política de instantâneos
A próxima pergunta a fazer é - com que frequência você deseja tirar os instantâneos? Embora possa variar de uma empresa para outra, vamos dar o exemplo de um banco de dados muito dinâmico que muda de vez em quando.
Para começar, você começaria a tirar instantâneos a cada 6 horas, mas porque o banco de dados muda muito, logo se tornaria inviável para armazenar todos os inúmeros instantâneos que foram criados. Portanto, o próximo passo seria eliminar instantâneos que são mais antigos que, digamos, 48 horas.
Agora, o problema seria recuperar algo que foi perdido há 49 horas. Para contornar esse problema, você pode manter um ou dois instantâneos daquela história de 48 horas e mantê -los por uma semana. Limpe -os quando envelhecem do que isso.
E se você puder continuar por esse caminho, poderá enfiar instantâneos para a própria gênese do sistema, apenas em ordem decrescente de frequência. Por fim, gostaria de ressaltar que esses instantâneos são somente leitura, o que significa que se você for infectado por um ransomware e obtenha todos os seus dados criptografados (modificados). Esses instantâneos seriam, provavelmente, ainda estariam intactos.