NILFS2 - sistema de arquivos à prova de balas para / home



Como você sabe, se um problema puder acontecer, ele acontecerá. Provavelmente, todos tiveram casos em que um novo arquivo importante foi excluído acidentalmente ou o texto em um editor de texto foi selecionado e excluído acidentalmente.

Se você é o hoster ou o proprietário do site, provavelmente já enfrentou o hackeamento de contas de usuário ou de seu site. Nesses casos, é importante restaurar a cronologia, encontrar um caminho de penetração e a vulnerabilidade que o invasor usou.

Para resolver esses problemas, o sistema de arquivos NILFS2 é perfeito.

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

Uma característica 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 o que era há algum tempo.

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

De fato, qualquer alteração no arquivo implica a criação automática de um novo instantâneo do sistema de arquivos, para que você possa usar esse sistema de arquivos como uma máquina do tempo e retroceder o estado dos arquivos.

A história


O NILFS2 foi desenvolvido nas entranhas da Nippon Telegraph and Telephone Corporation , de fato, o estado (que possui uma participação controladora) e a maior empresa de telecomunicações do Japão. Mais especificamente, os Laboratórios CyberSpace, liderados por Ryusuke Konishi .

Por que ele foi desenvolvido especificamente - é desconhecido, no entanto, pode-se presumir que esse FS, com sua funcionalidade de "máquina do tempo", seja ideal para armazenar dados nos quais você pode se aprofundar nos serviços especiais, a fim de reproduzir toda a imagem de SMS, e-mails etc.

O NILFS2 também é, potencialmente, uma ferramenta muito valiosa para serviços de segurança interna, pois permite recuperar todas as cartas excluídas no banco de dados de correio, abrir os batentes de funcionários que posteriormente podem tentar disfarçá-los, excluindo ou alterando seus arquivos.

Como rastrear toda a história da correspondência
No Linux, em servidores (e vale a pena colocar o NILFS2 lá para fins de segurança interna), um método de arquivo para armazenar emails é frequentemente usado para armazenar mensagens de email. O chamado formato Maildir . É suficiente instalar o Courier Mail Server e configurar o armazenamento de cartas no Maildir. Outro formato mbox é um arquivo de texto grande que é facilmente analisado em mensagens individuais.

Se o servidor de correio usar o banco de dados, o NILFS2 permitirá restaurar o tempo exato das alterações no banco de dados e a capacidade de restaurar o banco de dados em qualquer um desses pontos. E então você precisa usar as ferramentas de banco de dados para ver o que estava nele naquele momento ...

No entanto, algo deu errado. Ou o governo japonês decidiu não seguir todos (a princípio Primavera), ou o desempenho do NILFS2 nos HDDs tradicionais foi menor que o rodapé, e o NILFS2 foi lançado sob a licença GPL e entrou rapidamente no kernel Linux, pois houve queixas especiais sobre o código escrito japoneses altamente qualificados, os desenvolvedores do kernel Linux não tinham.

Como é o NILFS2?


Do ponto de vista do uso: no sistema de controle de versão SVN . Cada ponto de verificação do FS é uma confirmação feita automaticamente sem o conhecimento do usuário em nenhuma alteração: seja a exclusão, alteração do conteúdo de um arquivo ou direitos de acesso. Cada confirmação tem um número que aumenta linearmente.

Do ponto de vista do programador: em um buffer circular. O sistema de arquivos salva as alterações e as grava em um pedaço igual a cerca de 8 MB (2048 * 4096, onde 2048 é o número de elementos no bloco e 4096 é o tamanho da página de memória). O disco inteiro é dividido em tais partes. A gravação está em sequência. Quando o espaço livre acaba, as imagens mais antigas são excluídas e os pedaços são substituídos.

Pão NILFS2 básico


  • Versioning !!!
  • O procedimento para recuperar um sistema de arquivos após uma falha é elementar: ao carregar, ele procura o último bloco que possui a soma de verificação correta e instala um superbloco nele. Isso é quase uma operação instantânea.
  • Devido ao fato de a gravação sempre ser linear, então:

    • pode mostrar bons resultados ao trabalhar com SSDs, com gravação aleatória lenta.
    • O NILFS2 economiza recursos SSD, já que quase não há multiplicador de registros.
      Mais precisamente, não é mais do que 2.
      O fato é que, durante a reescrita cíclica de todo o disco, o NILFS2 transfere dados imutáveis ​​para novas partes (pedaços).

      Se tivermos 10% dos dados inalteráveis ​​no disco, obteremos um aumento de 10% na gravação com uma reescrita completa. Bem, um aumento de 50% com um dispositivo 50% cheio para uma reescrita completa do disco.

      O ganho máximo de gravação é 2. Isso é muito pequeno, considerando que tudo é gravado sequencialmente. Em geral, a animação do registro será menor que a de um sistema de arquivos fragmentado regular com um setor de 4096 bytes. (Comentado em pensamentos).

  • Potencial facilidade de replicação para um NILFS2 FS remoto

NILFS2 para / home


Nos sistemas operacionais do tipo Unix, como regra, existe uma pasta / home na qual os dados do usuário são armazenados. Vários programas salvam suas configurações relacionadas a um usuário específico nesta pasta.

E quem, se não os usuários, corta a grama com mais frequência? Portanto, como eles dizem, o próprio Deus ordenou o uso do NILFS2 em / em casa.

Além disso, com a ampla distribuição de SSDs, agora não podemos nos preocupar com a grande desvantagem ao usar sistemas de arquivos CoW.

Sim, podemos criar instantâneos do FS sempre que desejamos no ZFS e no BTRFS, mas sempre existe o risco de que uma alteração de arquivo perdida ocorra entre os instantâneos. E as fotos ainda precisam ser administradas: exclua as antigas. No NILFS2, tudo isso acontece automaticamente, literalmente a cada poucos segundos.

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

lvcreate -V10G -T nvme/thin -n home 

e formatado 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 da atual / casa.

Fiz isso imediatamente após a inicialização do computador, antes de entrar na minha conta, pelo usuário root. Se eu fizesse login como meu usuário, alguns programas abririam soquetes e arquivos na pasta / casa / usuário do meu usuário, o que tornaria a cópia difícil. Como você sabe, a pasta inicial do usuário raiz geralmente está localizada no caminho / raiz, portanto, nenhum arquivo será aberto na seção / home.

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

Para a última linha, consulte o artigo .

Em seguida, edite o / etc / fstab, que monta o sistema de arquivos para / home, para

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

A opção noatime necessária para melhorar o desempenho, para que o atime não seja alterado a cada acesso ao arquivo. Em seguida, reiniciaremos.

Tipos de imagens no NILFS2.


Um instantâneo normal sem imunidade à exclusão é chamado de ponto de verificação (ponto de verificação ou ponto de recuperação).
Um instantâneo com proteção contra exclusão automática é chamado de instantâneo e, em seguida, apenas um instantâneo.

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

Exibir instantâneos lscp -s

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

 mkcp [-s]  

Recupere dados.


O NILFS permite montar quantas fotos antigas precisarmos em paralelo com o trabalho com o ramo principal do FS. Mas apenas no modo de leitura.

Tudo está organizado assim. Os pontos de verificação habituais que o NILFS2 faz podem ser excluídos automaticamente a qualquer momento (quando o espaço em disco acabar ou pelas regras de nilfs_cleanerd), portanto, antes da montagem, devemos converter o ponto de verificação em um instantâneo ou, em russo, corrigir a imagem.

 chcp ss _ 

Depois disso, podemos montar o instantâneo, por exemplo, assim:

 mount -t nilfs2 -r -o cp=_ /dev/nvme/home /mnt/nilfs/_ 

Em seguida, copiamos os arquivos recuperados do instantâneo para / home.
E então removemos o sinalizador de indistinguibilidade da imagem, para que no futuro o coletor de lixo automático possa excluir dados obsoletos:

 chcp cp _ 

Utilitários para NILFS2


Mas este é o problema. Sim, é claro, podemos criar um sistema de arquivos, alterar seu tamanho on-line, visualizar uma lista de pontos de cadeia, criar e excluí-los. O pacote nilfs2-utils fornece um conjunto mínimo de cavalheiros.

Como a NTT reduziu o financiamento, não existem utilitários rápidos e de baixo nível que possam exibir o histórico de alterações de arquivos e fazer diferenças entre os snapshots.

Meu utilitário n2u


Para preencher esse vácuo, escrevi meu utilitário n2u , que pode exibir o histórico de alterações de 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 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 imagens diferentes.

Você pode definir o intervalo 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 para 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 período neste comando também é suportado.

Chorar para os desenvolvedores


Existem muitos especialistas em Habré. Por favor, termine o NILFS2. Faça replicação, diferenças rápidas de baixo nível entre revisões, refluxo e outras vantagens!

Referências


Site oficial da NILFS .

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

Boletins:
E-mail do desenvolvedor do NILFS2 . O identificador para a assinatura linux-nilfs.
Arquivo da Newsletter .

Guia de configuração do Nilfs_cleanerd .
Testes de desempenho comparativo de EXT4, Btrfs, XFS e NILFS2 .


Agradecimentos:

  • Desenvolvedores do NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi e Satoshi Moriai. Outros contribuintes 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 e Vyacheslav Dubeyko.
  • Amblin Entertainment e Universal Pictures por sua maravilhosa série de filmes "Regresso ao Futuro" . A primeira foto do post foi tirada do filme "Back to the Future - 3".
  • Empresas RUVDS pelo apoio e pela oportunidade de publicar em seu blog no Habré.

PS Direct erros que você percebe no PM. Eu aumento o carma por isso.



Você pode experimentar o NILFS2 solicitando uma máquina virtual do RUVDS para o cupom abaixo. Para todos os novos clientes, um período de avaliação gratuita de 3 dias.

Source: https://habr.com/ru/post/pt477388/


All Articles