Quero criar uma solução conveniente para backups completos do sistema (root-on-ZFS). A idéia é criar um instantâneo de todo o sistema na inicialização (antes de qualquer gravação no FS) ou como última etapa do processo de desligamento. Dessa forma, quero garantir que o FS seja logicamente consistente, ou seja, o instantâneo representa o estado do FS frio (sem nenhum processo inacabado). Mais tarde, esse instantâneo pode ser copiado zfs send
para outro local, se necessário.
Novamente, a ideia é garantir não que apenas todas as operações de E/S sejam concluídas e consistentes, mas que todos os processos tenham sido concluídos, de modo que o estado FS seja global e logicamente consistente. Por exemplo, é impossível que algum programa tenha escrito o arquivo a
e tenha entrado no instantâneo, mas tenha terminado de gravar no arquivo b
um microssegundo depois, então o arquivo b
não está presente no instantâneo, enquanto para a operação do programa é necessário que os arquivos estejam em sincronizar.
EDIT: minha distro é Arch Linux
A maneira como eu abordaria seus requisitos é criar o instantâneo durante a inicialização do initrd (também conhecido como initramfs) antes de iniciar qualquer processo que possa gravar no sistema de arquivos. (Assumindo que esta é uma instalação Linux "normal" que usa um initrd.) Infelizmente você não menciona qual distribuição Linux você está usando, então não posso oferecer conselhos mais específicos sobre como adicionar sua própria etapa ao initrd porque diferentes distribuições fazem isso de forma diferente. Por exemplo, no Arch Linux e derivados, você criaria um gancho mkinitcpio personalizado em /etc/initcpio/hooks e o adicionaria à linha "hooks" em seu arquivo /etc/mkinitcpio.conf (consulte https://wiki.archlinux. org/title/mkinitcpio). Seu gancho personalizado simplesmente criaria o instantâneo após o pool ZFS ter sido importado para que ele fosse criado antes que o initrd passasse o controle para o processo normal de inicialização do sistema. Outras distribuições têm outros métodos de adicionar etapas ao initrd.
Alguns conselhos: Ao fazer perguntas sobre Linux, é uma boa ideia fornecer mais detalhes do que você forneceu aqui. Mais importante, você deve mencionar a distribuição Linux que está usando. Também é uma boa ideia adicionar o máximo de informações gerais sobre seu sistema que você puder pensar, caso possa ser útil para alguém tentando responder à sua pergunta. Para perguntas sobre sistemas de arquivos, como o tipo de tabela de partição de disco (DOS ou GPT), partições de disco que podem ser relevantes, se você está usando qualquer forma de RAID ou espelhamento, se está usando criptografia de qualquer tipo, se está usando LVM etc. pode ser útil. Para sua pergunta específica, informações adicionais, como se você tem vários sistemas de arquivos com vários pontos de montagem em seu pool e se está usando o ZFS A montagem automática ou a montagem herdada também seria útil. Espero que isto ajude!