NILFS2 - système de fichiers pare-balles pour / home



Comme vous le savez, si des problèmes peuvent survenir, cela se produira. Probablement, tout le monde a eu des cas où un nouveau fichier important a été accidentellement supprimé ou le texte dans un éditeur de texte a été accidentellement sélectionné et supprimé.

Si vous êtes l'hébergeur ou le propriétaire du site, vous avez probablement été confronté au piratage de comptes d'utilisateurs ou de votre site. Dans de tels cas, il est important de restaurer la chronologie, de trouver un moyen de pénétration et la vulnérabilité que l'attaquant a utilisé.

Pour résoudre ces problèmes, le système de fichiers NILFS2 est parfait.

Il est présent dans le noyau Linux depuis la version 2.6.30.

Une caractéristique de ce système de fichiers est qu'il est similaire à un système de contrôle de version: vous pouvez toujours restaurer l'état du système et voir ce qu'il était il y a quelque temps.

Pour fournir cette fonctionnalité, vous n'avez pas besoin de configurer les scripts Cron, de créer des instantanés, etc. Le système de fichiers NILFS2 le fait tout seul. Elle n'écrase jamais les anciennes données et écrit toujours dans de nouvelles zones du disque si l'espace disque est suffisant. En pleine conformité avec le principe de la copie sur écriture.

En fait, toute modification du fichier entraîne la création automatique d'un nouvel instantané du système de fichiers, vous pouvez donc utiliser ce système de fichiers comme une machine à remonter le temps et rembobiner l'état des fichiers.

L'histoire


NILFS2 a été développé dans les entrailles de la Nippon Telegraph and Telephone Corporation , en fait, l'État (il a une participation majoritaire) et la plus grande entreprise de télécommunications au Japon. Plus précisément, les CyberSpace Laboratories dirigés par Ryusuke Konishi .

Pourquoi il a été développé spécifiquement - on ne sait pas, cependant, on peut supposer qu'un tel FS, avec sa fonctionnalité "machine à remonter le temps", est idéal pour stocker des données dans lesquelles vous voudrez peut-être approfondir les services spéciaux afin de rejouer l'image complète des SMS, des e-mails, etc.

NILFS2 est également, potentiellement, un outil très précieux pour les services de sécurité internes, car il vous permet de récupérer toutes les lettres supprimées dans la base de données de messagerie, d'ouvrir les montants des employés qui peuvent ensuite essayer de les déguiser en supprimant ou en modifiant leurs fichiers.

Comment puis-je retracer toute l'histoire de la correspondance
Sous Linux, sur les serveurs (et cela vaut la peine d'y mettre NILFS2 à des fins de sécurité interne), la méthode de stockage des fichiers des e-mails est souvent utilisée pour stocker les messages électroniques. Le format dit Maildir . Il suffit d'installer Courier Mail Server et de configurer le stockage des lettres dans Maildir. Un autre format mbox est un gros fichier texte qui est facilement analysé en messages individuels.

Si le serveur de messagerie utilise la base de données, alors NILFS2 permettra de restaurer le timing exact des modifications de la base de données et la possibilité de restaurer la base de données à n'importe lequel de ces points. Et puis vous devez utiliser les outils de base de données pour voir ce qu'il y avait à ce moment-là ...

Cependant, quelque chose s'est mal passé. Soit le gouvernement japonais a décidé de ne pas suivre tout le monde (selon le principe de Spring), soit les performances de NILFS2 sur les disques durs traditionnels se sont avérées inférieures à la carte de base, et NILFS2 a été publié sous licence GPL et est entré très rapidement dans le noyau Linux, car il y avait des plaintes spéciales concernant le code écrit japonais hautement qualifié, les développeurs du noyau Linux n'avaient pas.

À quoi ressemble NILFS2?


Du point de vue de l'utilisation: sur le système de contrôle de version SVN . Chaque point de contrôle FS est une validation qui est effectuée automatiquement à l'insu de l'utilisateur à tout changement: qu'il s'agisse de suppression, de modification du contenu d'un fichier ou de droits d'accès. Chaque commit a un nombre qui augmente linéairement.

Du point de vue du programmeur: sur un tampon circulaire. Le système de fichiers enregistre les modifications et les écrit dans une pièce égale à environ 8 Mo (2048 * 4096, où 2048 est le nombre d'éléments dans le bloc et 4096 est la taille de la page mémoire). Le disque entier est divisé en ces morceaux. L'enregistrement est en séquence. Lorsque l'espace libre est épuisé, les images les plus anciennes sont supprimées et les blocs sont remplacés.

Petits pains NILFS2 de base


  • Versioning !!!
  • La procédure de récupération d'un système de fichiers après une panne est élémentaire: lors du chargement, il recherche le dernier bloc ayant la somme de contrôle correcte et y installe un superbloc. Il s'agit d'une opération presque instantanée.
  • Du fait que l'enregistrement se déroule toujours de façon linéaire, alors:

    • peut afficher de bons résultats lorsque vous travaillez sur des SSD, avec un enregistrement aléatoire lent.
    • NILFS2 économise les ressources SSD car il n'y a presque pas de multiplicateur d'enregistrement.
      Plus précisément, il ne dépasse pas 2.
      Le fait est que lors de la réécriture cyclique de l'intégralité du disque, NILFS2 transférera des données immuables vers de nouveaux morceaux (morceaux).

      Si nous avons 10% de données immuables sur le disque, nous obtiendrons une augmentation de 10% de l'enregistrement avec 1 réécriture complète. Eh bien, une augmentation de 50% avec un appareil complet à 50% pour 1 réécriture complète du disque.

      Le gain d'enregistrement maximal est de 2. C'est très faible, étant donné que tout est écrit de manière séquentielle. En général, l'animation de l'enregistrement sera inférieure à celle d'un système de fichiers fragmenté normal avec un secteur de 4096 octets. (Commentaire sur les pensées).

  • Facilité de réplication potentielle vers un NILFS2 FS distant

NILFS2 pour / home


Dans les systèmes d'exploitation de type Unix, en règle générale, il existe un dossier / home dans lequel les données utilisateur sont stockées. Divers programmes enregistrent leurs paramètres liés à un utilisateur spécifique dans ce dossier.

Et qui, sinon les utilisateurs, tond le plus souvent? Par conséquent, comme on dit, Dieu lui-même a commandé d'utiliser NILFS2 sur / home.

De plus, avec la distribution répandue des SSD, nous ne pouvons plus nous inquiéter du fort rabattement lors de l'utilisation des systèmes de fichiers CoW.

Oui, nous pouvons créer des instantanés FS aussi souvent que nous le souhaitons dans ZFS et BTRFS, mais il y a toujours un risque qu'une modification de fichier perdue se produise entre les instantanés. Et les photos doivent encore être administrées: supprimez les anciennes. Dans NILFS2, tout cela se produit automatiquement, littéralement toutes les quelques secondes.

J'ai créé un volume logique à l'aide de lvcreate (dans le groupe de volumes nvme, thin thin pool). Je recommande de le créer sur le volume lvm, car plus tard, il peut être facilement développé. Je recommande d'avoir 50% d'espace disque libre avec NILFS2 pour une profondeur de version décente.

lvcreate -V10G -T nvme/thin -n home 

et formaté en 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 !! 

Après cela, vous devez copier toutes les données de l'actuel / home.

Je l'ai fait immédiatement après le démarrage de l'ordinateur, avant d'accéder à mon compte, à partir de l'utilisateur root. Si je me connectais en tant qu'utilisateur, certains programmes ouvriraient des sockets et des fichiers dans le dossier / home / user de mon utilisateur, ce qui rendrait la copie difficile. Comme vous le savez, le dossier personnel de l'utilisateur root se trouve généralement sur le chemin / root, donc aucun fichier ne sera ouvert dans la section / home.

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

Pour la dernière ligne, voir l' article .

Ensuite, éditez / etc / fstab, qui monte le système de fichiers pour / home, pour

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

L'option noatime nécessaire pour améliorer les performances afin qu'atime ne change pas à chaque accès aux fichiers. Ensuite, nous redémarrons.

Types d'images dans NILFS2.


Un instantané normal sans immunité de suppression est appelé un point de contrôle (point de contrôle ou point de récupération).
Un instantané avec protection contre la suppression automatique est appelé instantané, puis juste un instantané.

L'affichage des points de contrôle se fait à l'aide de la commande lscp

Afficher les instantanés lscp -s

Nous pouvons créer nous-mêmes des instantanés et des points de contrôle à tout moment en utilisant:

 mkcp [-s]  

Récupérez les données.


NILFS nous permet de monter autant de vieilles images que nécessaire en parallèle avec le travail avec la branche FS principale. Mais uniquement en mode lecture.

Tout est arrangé comme ça. Les points de contrôle habituels utilisés par NILFS2 peuvent être automatiquement supprimés à tout moment (lorsque l'espace disque est épuisé ou par les règles de nilfs_cleanerd), par conséquent, avant le montage, nous devons traduire le point de contrôle en un instantané ou, en russe, corriger l'image.

 chcp ss _ 

Après cela, nous pouvons monter l'instantané, par exemple, comme ceci:

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

Ensuite, nous copions les fichiers récupérés de l'instantané vers / home.
Et puis nous supprimons le drapeau de l'indiscernabilité de l'image, afin qu'à l'avenir, le garbage collector automatique puisse supprimer les données obsolètes:

 chcp cp _ 

Utilitaires pour NILFS2


Mais c'est ça le problème. Oui, bien sûr, nous pouvons créer un système de fichiers, changer sa taille en ligne, afficher une liste de points de chaîne, les créer et les supprimer. Le paquet nilfs2-utils fournit un ensemble minimal de gentleman.

Depuis que NTT a réduit le financement, il n'y a pas d'utilitaires rapides de bas niveau qui peuvent afficher l'historique des modifications de fichiers et faire des différences entre les instantanés.

Mon utilitaire n2u


Pour combler ce vide, j'ai écrit mon utilitaire n2u , qui peut afficher l'historique des modifications d'un fichier / répertoire spécifique:

 n2u log filename 

La sortie est quelque chose comme ceci:

  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 

Il fonctionne assez rapidement pour la méthode d'implémentation choisie: il recherche les différences entre les fichiers à l'aide de la méthode de bissection, monte et compare rapidement le fichier / répertoire dans différentes images.

Vous pouvez définir la plage de points de contrôle à l'aide de la clé -cp CP1:CP2 ou -cp {YEAR-MM-DD}:{YEAR-MM-DD} .

Vous pouvez également voir la différence entre les points de contrôle pour un fichier ou un répertoire spécifique:

 n2u diff -r cp1:cp2 filename 

Vous pouvez afficher l'intégralité de la chronologie des changements: toutes les différences entre les points de contrôle d'un fichier / répertoire spécifique:

 n2u blame [-r cp1:cp2] filename 

La plage de dates de cette commande est également prise en charge.

Pleure les développeurs


Il y a beaucoup de spécialistes sur Habré. Veuillez terminer NILFS2. Faites de la réplication, des différences rapides de bas niveau entre les révisions, le reflink et d'autres goodies!

Les références


Site officiel de NILFS .

Dépôts:
NILFS2 .
Utilitaires et modules NILFS2 .

Bulletins d'information:
Courriel du développeur NILFS2 . L'identifiant de l'abonnement linux-nilfs.
Archive de la newsletter .

Guide de configuration de Nilfs_cleanerd .
Tests de performances comparatifs de EXT4, Btrfs, XFS & NILFS2 .


Remerciements:

  • Développeurs NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi et Satoshi Moriai. Les autres contributeurs majeurs sont: 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 et Universal Pictures pour leur merveilleuse série de films "Back to the Future" . La première photo de l'article a été tirée du film "Back to the Future - 3".
  • Les entreprises RUVDS pour leur soutien et l'opportunité de publier sur leur blog sur Habré.

Erreurs PS Direct que vous remarquez dans PM. J'augmente le karma pour cela.



Vous pouvez expérimenter avec NILFS2 en commandant une machine virtuelle à RUVDS pour le coupon ci-dessous. Pour tous les nouveaux clients, une période d'essai gratuite de 3 jours.

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


All Articles