NILFS2 é um sistema de arquivos à prova de balas para /home

NILFS2 é um sistema de arquivos à prova de balas para /home

Como você sabe, se problemas podem acontecer, com certeza acontecerão. Provavelmente todo mundo já teve casos em que um arquivo importante recente foi apagado acidentalmente ou um texto foi acidentalmente selecionado e destruído em um editor de texto.

Se você é um hoster ou proprietário de um site, provavelmente já encontrou invasões de contas de usuários ou de seu site. Nesses casos, é importante restaurar a cronologia, encontrar o método de entrada e a vulnerabilidade utilizada pelo invasor.

O sistema de arquivos NILFS2 é perfeito para resolver esses problemas.

Está presente no kernel Linux desde a versão 2.6.30.

A peculiaridade desse sistema de arquivos é que ele é semelhante a um sistema de controle de versão: você sempre pode reverter o estado do sistema e ver como era há algum tempo.

Para fornecer essa funcionalidade, você não precisa configurar scripts Cron, tirar instantâneos, etc. O sistema de arquivos NILFS2 faz isso sozinho. Ele nunca substitui dados antigos e sempre grava em novas áreas do disco se houver espaço livre suficiente em disco. Em total conformidade com o princípio Copy-on-Write.

Na verdade, qualquer alteração em um arquivo cria automaticamente um novo instantâneo do sistema de arquivos, para que você possa usar este FS como uma máquina do tempo e retroceder o estado dos arquivos.

história

NILFS2 é um sistema de arquivos à prova de balas para /homeO NILFS2 foi desenvolvido nas profundezas do Nippon Telegraph e Telephone Corporation, na verdade, a estatal (tem o controle acionário) e a maior empresa de telecomunicações do Japão. Mais especificamente, nos Laboratórios CyberSpace sob a liderança Ryusuke Konishi.

Não se sabe exatamente para que foi desenvolvido, no entanto, pode-se presumir que tal FS, com sua funcionalidade de “máquina do tempo”, é ideal para armazenar dados que os serviços de inteligência possam querer investigar para reproduzir toda a imagem de SMS, e-mails, etc....

O NILFS2 é também potencialmente uma ferramenta muito valiosa para os serviços de segurança interna, pois permite recuperar todas as cartas eliminadas da base de dados de correio, revelando as ombreiras dos funcionários que poderão posteriormente tentar disfarçá-las apagando ou alterando os seus ficheiros.

Como você pode rastrear todo o seu histórico de correspondência?Em servidores Linux (e é aqui que o NILFS2 deve ser instalado para fins de segurança interna), o método de arquivo para armazenar e-mails é frequentemente usado para armazenar mensagens de e-mail. O chamado formato maildir. O suficiente para colocar Servidor de Correio Courier e configure o armazenamento de correio no Maildir. Outro formato mbox é um arquivo de texto grande que pode ser facilmente analisado em mensagens individuais.

Se o servidor de e-mail usar um banco de dados, o NILFS2 tornará possível restaurar o momento exato das alterações no banco de dados e a capacidade de restaurar o banco de dados em qualquer um desses momentos. E então você precisa usar ferramentas de banco de dados para ver o que havia nele naquele momento...

No entanto, algo deu errado. Ou o governo japonês mudou de ideia sobre monitorar todos (como o princípio Yarovaya), ou o desempenho do NILFS2 em HDDs tradicionais ficou abaixo da média, e o NILFS2 foi lançado sob a licença GPL e muito rapidamente entrou no kernel Linux, já que não houve reclamações específicas sobre o código escrito em japonês altamente qualificado; os desenvolvedores do kernel Linux não o possuíam.

Como é o NILFS2?

Do ponto de vista do uso: em um sistema de controle de versão SVN. Cada checkpoint do FS é um commit que é feito automaticamente sem o conhecimento do usuário sempre que há alguma alteração: seja exclusão, alteração do conteúdo de um arquivo ou alteração de direitos de acesso. Cada commit possui um número que aumenta linearmente.

Do ponto de vista de um programador: um buffer circular. O sistema de arquivos acumula alterações e as grava em um bloco igual a aproximadamente 8 MB (2000 * 4096, onde 2000 é o número de elementos no bloco e 4096 é o tamanho da página de memória). O disco inteiro é dividido nesses pedaços. A gravação prossegue sequencialmente. Quando o espaço livre acabar, os instantâneos mais antigos serão excluídos e os pedaços serão substituídos.

Guloseimas básicas do NILFS2

  • Versionamento!!!
  • O procedimento para restaurar um sistema de arquivos após uma falha é simples: ao carregar, procura-se o último pedaço que possui a soma de verificação correta e nele é instalado um superbloco. Esta é uma operação quase instantânea.
  • Devido ao fato de que a gravação ocorre sempre de forma linear, então:
    • pode mostrar bons resultados ao executar em um SSD com gravações aleatórias lentas.
    • NILFS2 economiza recursos SSD, já que quase não há fator de multiplicação de gravação.
      Mais precisamente, não passa de 2.O fato é que, ao reescrever ciclicamente todo o disco, o NILFS2 transferirá dados imutáveis ​​para novos pedaços (pedaços).

      Se tivermos 10% de dados inalterados no disco, obteremos um aumento de 10% na gravação com 1 reescrita completa. Bem, um aumento de 50% com 50% de preenchimento do dispositivo para 1 reescrita completa do disco.

      O ganho máximo de gravação é 2. Isso é muito baixo considerando que tudo é escrito sequencialmente. Em geral, a animação de gravação será menor do que a de um sistema de arquivos fragmentado convencional com um setor de 4096 bytes. (Pensamento inspirado em Comente).

  • Facilidade potencial de implementação de replicação para um NILFS2 FS remoto

NILFS2 para /home

Em sistemas operacionais do tipo Unix, via de regra, existe uma pasta /home na qual os dados do usuário são armazenados. Vários programas salvam suas configurações específicas do usuário nesta pasta.

E quem, senão os usuários, comete erros com mais frequência? Portanto, como dizem, o próprio Deus ordenou o uso do NILFS2 em /home.

Além disso, com o uso generalizado de SSDs, agora não precisamos mais nos preocupar com perdas severas ao usar sistemas de arquivos CoW.

Sim, podemos criar instantâneos FS quantas vezes quisermos no ZFS e BTRFS, mas sempre há o risco de que uma alteração de arquivo perdida acabe entre os instantâneos. E as fotos ainda precisam ser administradas: as antigas precisam ser deletadas. No NILFS2, tudo isso acontece automaticamente, literalmente a cada poucos segundos.

Criei um volume lógico usando lvcreate (no grupo de volumes nvme, thin pool thin). Eu recomendo criá-lo no volume lvm, pois pode ser facilmente expandido posteriormente. Eu recomendo ter 50% de espaço livre em disco com NILFS2 para uma profundidade de versão decente.

lvcreate -V10G -T nvme/thin -n home

e formatei-o em NILFS2:

mkfs.nilfs2 -L nvme_home /dev/nvme/home

mkfs.nilfs2 (nilfs-utils 2.1.5)
Start writing file system initial data to the device
      Blocksize:4096  Device:/dev/nvme/home1  Device Size:10737418240
File system initialization succeeded !!

Depois disso, você precisa copiar todos os dados do /home atual.

Fiz isso imediatamente após inicializar o computador, antes de fazer login em minha conta, como usuário root. Se eu fizesse login como meu usuário, alguns programas abririam soquetes e arquivos na pasta /home/user do meu usuário, o que dificultaria uma cópia limpa. Como você sabe, a pasta inicial do usuário root geralmente está localizada no caminho /root, portanto nenhum arquivo será aberto na partição /home.

mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome

Para a última linha, veja статью.

Em seguida, editamos /etc/fstab, no qual o sistema de arquivos de /home está montado, para

/dev/disk/by-label/nvme_home /home nilfs2    noatime 0 0

Opção noatime necessário para melhorar o desempenho para que o tempo não mude a cada acesso ao arquivo. Em seguida, reiniciamos.

Tipos de imagens em NILFS2.

Um instantâneo regular sem imunidade à exclusão é chamado de ponto de verificação ou ponto de recuperação.
Um instantâneo protegido contra exclusão automática é chamado de instantâneo e, em seguida, simplesmente de instantâneo.

A visualização dos pontos de verificação é feita usando o comando lscp

Ver instantâneos lscp -s

Podemos criar instantâneos e pontos de verificação a qualquer momento usando:

mkcp [-s] устройство

Nós restauramos dados.

O NILFS nos permite montar quantos snapshots antigos quisermos em paralelo com o trabalho com o branch principal do FS. Mas apenas no modo de leitura.

Tudo está organizado assim. Os pontos de verificação regulares feitos pelo NILFS2 podem ser excluídos automaticamente a qualquer momento (quando o espaço em disco acabar ou de acordo com as regras nilfs_cleanerd), portanto, antes da instalação, devemos converter o ponto de verificação em um instantâneo ou, em russo, capturar o instantâneo.

chcp ss номер_чекпоинта

Depois disso, podemos montar o snapshot, por exemplo, assim:

mount -t nilfs2 -r -o cp=номер_чекпоинта /dev/nvme/home /mnt/nilfs/номер_чекпоинта

Depois disso, copiamos os arquivos restaurados do instantâneo para/home.
E posteriormente removemos o sinalizador que não pode ser excluído do instantâneo para que no futuro o coletor de lixo automático possa remover dados desatualizados:

chcp cp номер_чекпоинта

Utilitários para NILFS2

Mas este é o problema. Sim, claro, podemos criar um sistema de arquivos, alterar seu tamanho online, visualizar a lista de pontos de desafio, criá-los e excluí-los. O pacote nilfs2-utils fornece um conjunto mínimo para cavalheiros.

Como a NTT reduziu seu financiamento, não existem utilitários rápidos de baixo nível que permitam exibir o histórico de alterações de arquivos ou fazer diferenças entre instantâneos.

Meu utilitário n2u

Para preencher esse vácuo eu escrevi seu utilitário n2u, que pode exibir o histórico de alterações em um arquivo/diretório específico:

n2u log filename

A saída é algo como isto:

          CHECKPOINT        DATE     TIME     TYPE          SIZE  MODE
             1787552  2019-11-24 22:08:00    first          7079    cp
             1792659  2019-11-25 23:09:05  changed          7081    cp

Funciona muito rapidamente para o método de implementação escolhido: procura diferenças entre arquivos usando o método de bissecção, montando e comparando rapidamente o arquivo/diretório em diferentes instantâneos.

Você pode definir uma série de pontos de verificação usando a tecla -cp CP1:CP2 ou -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Você também pode ver a diferença entre os pontos de verificação de um arquivo ou diretório específico:

n2u diff -r cp1:cp2 filename

Você pode exibir toda a cronologia das alterações: todas as diferenças entre os pontos de verificação de um arquivo/diretório específico:

n2u blame [-r cp1:cp2] filename

O intervalo de datas neste comando também é suportado.

Um grito para os desenvolvedores

Existem muitos especialistas em Habré. Por favor, conclua o NILFS2. Faça replicação, comparação rápida de baixo nível entre revisões, reflink e outras vantagens!

referências

Site oficial do NILFS.

Repositórios:
NILFS2.
Utilitários e módulos NILFS2.

Boletins informativos:
Boletim informativo por e-mail para desenvolvedores NILFS2. ID para assinatura linux-nilfs.
Arquivo de boletins informativos.

guia de configuração nilfs_cleanerd.
Comparativo de testes de desempenho EXT4, Btrfs, XFS e NILFS2.

Obrigado:

  • Desenvolvedores NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi e Satoshi Moriai. Outros contribuidores importantes são: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • À Amblin Entertainment e Universal Pictures pela maravilhosa série de filmes. "De volta para o Futuro". A primeira foto do post é tirada do filme “De Volta para o Futuro 3”.
  • Empresas RUVDS pelo apoio e pela oportunidade de publicar em seu blog no Habré.

PS Por favor, envie quaisquer erros que você notar em uma mensagem privada. Eu aumento meu carma por isso.

Você pode experimentar o NILFS2 solicitando uma máquina virtual de RUVDS com o cupom abaixo. Para todos os novos clientes há um período de teste gratuito de 3 dias.

NILFS2 é um sistema de arquivos à prova de balas para /home

Fonte: habr.com

Adicionar um comentário