Movatterモバイル変換


[0]ホーム

URL:


Fim

File Integrity Manager1.2.3

fimbox
*Nouvelle icône proposée parRaiden


Etienne Vrignaud

A quoi sert Fim


Avec Fim vous pouvez :

  • Vérifier l’intégrité de fichiers qui peuvent être gros et binaires,
    donc non comparables (.doc, .jpg, .png, .mp3, .mp4, …​)

  • Connaître rapidement la liste fichiers qui auraient été
    renommés, déplacés, effacés ou corrompus.
    Cela peut arriver accidentellement

  • Conserver un journal des modifications pour ces fichiers et afficher par la suite une log détaillée de ces modifications

  • Rechercher les fichiers dupliqués et éventuellement les effacer ensuite


Plus de détails dans les cas d’utilisation à suivre…​

  • Cette présentation n’apporte pas toutes les solutions

  • Elle permet de réfléchir et se poser des questions

Pourquoi j’ai écrit Fim


Le but était d’avoir un outil qui puisse afficher rapidement le statut du workspace local

Comment ça fonctionne

Fim crée le répertoire.fim à la racine du workspace. C’est son référentiel.
Dedans il stocke un index des fichiers contenus dans le workspace.

L’index contient pour chaque fichier :
— Nom et taille
— Attributs (dates, permissions)
— Hash de 3 petits blocks
— Hash de 3 blocks moyens
— Hash complet du fichier

L’index s’appelle leState et les hash sont fait avec du SHA-512

Un nouveauState est créé à chaque commit

Les données des fichiers ne sont pas conservées.On peut donc mettre Fim dans la catégorie desUVCS (UnVersioned Control System)


Détails

Fim workflow

1/ Créer le repository Fim

fim init

2/ Travailler sur les fichiers, modifications

...

3/ Connaître l’état du workspace

fim st         # Commande 'status'

4/ Commiter pour sauvegarder l’état courant

fim ci -m "My commit comment"

5/ Afficher l’historique

fim log


Détails

Différents mode de hash

Pour obtenir un status plus rapide, Fim est capable de hasher seulement 3 blocks du fichierau début, au milieu et à la fin.
On peut utiliser les options :

  • -f : Mode fast. Hash 3 blocks de 1 MB

  • -s : Mode super-fast. Hash 3 blocks de 4 KB

fim st -f
fim st -s

Avec l’option-n (pas de hash) Fim regarde juste les noms de fichiers et les attributs

fim st -n


Détails

demo little
mkdir test1$ cd test1$ for i in 01 02 03 04 05 06 07 08 09 10 ;  do echo "New File $i" > file${i} ; done$ fim init -m "First State"# Modifications$ fim st$ fim ci -m "My modifications"$ fim log

Différents cas d’utilisation


  • Cas 1 - Gestion d’un workspace

  • Cas 2 - Détection et effacement des doublons d’un workspace

  • Cas 3 - Fichiers dupliqués d’un autre workspace

  • Cas 4 - Intégrité d’un backup

Cas 1 - Gestion d’un workspace


  • Gestion de répertoires remplis de binaires.
    Par exemple : photos, musique ou films

  • Connaître l’état d’un workspace dans lequel on travail épisodiquement

  • Suivre les évolutions au fil du temps

fim st

Modifications effectuées

fim ci -m "My commit comment"


importantFim ne sauvegarde pas les contenus.
Il est recommandé de vous munir d’un logiciel de sauvegarde

Cas 1 - Super-fast commit


Le mode super-fast durant un commit permet de vérifier l’état courant en mode super-fastpour que le commit soit plus rapide.
Les fichiers modifiés sont alors hashés a nouveau en mode complet

fim ci -s -y -m "Commit very quickly using super-fast commit"




Détails

Cas 1 - Exécuter les commandes Fim à partir d’un sous-répertoire

Certaines commandes sont plus rapides quand elles sont exécutées depuis un sous-répertoire,car elles ont moins de fichiers à traiter :

  • st (status) : Connaître l’état du sous-répertoire

  • ci (commit) : Commiter les modifications

  • fdup (find-duplicates) : Trouver les fichiers dupliqués

  • rdup (remove-duplicates) : Effacer les fichiers dupliqués

  • rfa (reset-file-attrs) : Réinitialiser les attributs des fichiers


Toutes les autres commandes fonctionnent, mais pas plus rapidement


Détails

Cas 1 - Ignorer des fichiers ou répertoires


Vous pouvez ajouter un fichier.fimignore a tous les niveaux du repository,et aussi globalement dans le Home de l’utilisateur

Chaque ligne du fichier contient un nom de fichier ou de répertoire à ignorer.Vous pouvez aussi utiliser les expressions suivantes :

  • Un astérisque pour ignorer plusieurs (Exemple :*.mp3)

  • **/ en début de ligne. Le reste sera ignoré dans tous les sous répertoires.Par exemple pour ignorer tous les mp3 même ceux qui sont dans des sous répertoires :**/*.mp3


Détails

Cas 1 - Ignorer certaines modifications


Limiter l’affichage avec-i pour ignorer les modifications sur :

  • attrs : Attributs des fichiers

  • dates : Dates de modification et de création

  • renamed : Fichiers renommés

fim st -i attrs,dates,renamed


Pour ignorer tous les types, indiquerall

fim st -i all


Détails

Cas 1 - Gestion des permissions

Il est important de s’assurer que les fichiers conservent leurs permissions.
Fim les sauvegarde et est capable de les restaurer.
Il stocke pour chaque fichier les informations suivantes :

  • DAC - Discretionary access control :
    — Sur Linux et Mac OS, les permissionsrwxrwxrwx
    — Sur Windows, les attributsArchive,Hidden,ReadOnly etSystem

  • MAC - Mandatory access control :
    — Sur Linux, le labelSELinux si il est pris en charge

Vous pouvez restaurer les permissions à l’aide la commande
rfa (reset-file-attrs) :

fim rfa

Détails

Cas 2 - Détection des doublons d’un workspace



Fim est capable d’afficher les doublons contenus dans un workspace à l’aide de la commandefdup (find-duplicates) :

fim fdup


Si l’état courant est déjà commité, vous pouvez éviter la phase de scan du workspace à l’aide de l’option-l :

fim fdup -l



Détails

Cas 2 - Effacement des doublons d’un workspace


Il est possible d’effacer les fichiers dupliqués.

• Soit en interactif :

fim rdup

• Ou en automatique en conservant le premier fichier de la liste des fichiers dupliqués :

fim rdup -y


Dans les deux cas, il est possible d’utiliser l’état courant comme avecfdup en ajoutant l’option-l :

fim rdup -l

Cas 3 - Fichiers dupliqués d’un autre workspace

Fim peut effacer les fichiers en double contenu dans un autre workspace.
Par exemple un vieux backup désynchronisé où vous voulez conserver uniquement les fichiers que vous n’avez pas.
Il efface localement tous les fichiers déjà présents dans le workspace master.

Par exemple, avecbackup qui est une copie du repository nommésource :

cd backup$ fim rdup -M ../source


Quand le workspace à nettoyer est distant, vous pouvez juste copier le.fim dans un répertoire videet le mettre en paramètre de l’option-M de la commanderdup


Détails

Cas 4 - Intégrité d’un backup


Fim permet de vérifier l’intégrité des fichiers stockés sur tout type de système de fichiers.Notamment les backups offlines.

Pour cela il faut ajouter dans le backup le référentiel Fim (.fim) qui correspond

Il sera possible par la suite, de vérifier avec Fim l’intégrité des données du backup

Par exemple, dans le cas d’un DVD qui contient un backup et le référentiel Fim,vous pouvez aller à la racine et obtenir le statut :

fim st

Cas 4 - Détection de corruption matérielle

hardware corruption

Fim diagnostique une corruption matérielle si le contenu du fichier a changé alors que les dates de création / modification n’ont pas été modifiées

On utilise la commandedcor (detect-corruption) :

fim dcor

importantFim peut produire des faux positifs si le contenu a changé et que les dates ont été réinitialisées. Par exemple avec la commanderfa

Détails

Les autres commandes


  • dign (display-ignored) :
    Affiche les fichiers ou répertoires ignorés dans le dernier State

  • rbk (rollback) :
    Supprime le dernier State commité

  • pst (purge-states) :
    Purge les vieux State. Conserve uniquement le dernier

Comment utiliser Fim



Prérequis pour Fim
  • Fim est écrit en Java. Il a besoin de Java 8

  • Il fonctionne sur Linux, Windows et Mac OS X

  • Il est testé sur ces trois plateformes

Image Docker de Fim

Pour Linux, si vous n’avez pas Java ou pas la bonne version,
une image Docker est disponible surDocker HubImage versionImage size

Récupérer le scriptfim-docker    docker little

curl https://raw.githubusercontent.com/evrignaud/fim/master/fim-docker -L -o fim-docker && chmod a+rx fim-docker

Lancer Fim

Le script récupère l’image docker de Fim, puis la démarre.
Il prend les mêmes arguments que la commandefim

./fim-docker -h

Mettre à jour l’image utilisée

docker pull evrignaud/fim

Essais en tout genre

hands on little

Idées pour essayer soi-même :

Contenu du.fim

  • Le répertoire.fim contient :

    • Un fichier avec les settings du référentiel :settings.json

    • Un fichier pour chaque état (State). C’est un fichier json compressé


Le State
  • Il contient un hash global qui en assure l’intégrité.
    Fim refuse d’utiliser un State modifié

  • Le contenu des State est normalisé et peut-être utilisé sur les différents OS pris en charge

  • Aperçu du contenu d’un State

Modification du mode de hachage par défaut


A la création du référentiel de Fim vous pouvez demander à ne pas utiliser certains hash.Cela permet d’avoir un repository où les commit seront plus rapides, mais il pourrait y avoir des collisions :

-f : Mode de hash max. : fast. Après utilisable uniquement-f,-s ou-n

-s : Mode de hash max. : super-fast. Après utilisable uniquement-s ou-n

-n : Mode de hash max. : no-hash. Après utilisable uniquement-n

Exemple :

fim init -f

Après la commandestatus fonctionne par défaut avec le niveau 'fast'.

fim st    # S'exécute en utilisant '-f'

Détails

L’algorithme de Hash utilisé


  • L’algo de hash utilisé est le SHA-512

  • Le SHA-512 est 2 * plus lent que MD5. C’est un algo cryptographique.
    Cela diminue les risques de collision

  • La taille de la clé produite (512 bits / 64 octets) permet de minimiser les risques de collision sur les gros fichiers

  • Ce qui ralenti le plus c’est le disque

  • Quand le statut est vérifié en mode full, les 3 hash sont utilisés ce qui limite encore plus les risques de collision

Performances

performance
  • Fim peut gérer au moins 1 million de fichiers

  • Hashage en multi-thread pour utiliser au mieux les ressources

  • Dans beaucoup de cas, les performances sont conditionnées par la vitesse du disque

  • Par défaut, le nombre de thread est dynamique et dépend du débit du disque

  • Option-t pour modifier le nombre de threads utilisés (Détails)

Processus de hashage

Un Thread scanne le workspace et rempli laQueue des fichiers à Hasher

Plusieurs thread hashent chacun un fichier :

— Calcul de la taille et de l’emplacement du prochain block

— Map du block en mémoire en utilisant unFileChannel des NIO

— Hashage ou non par les 3 hasheurs qui produisent les 3 hash
     a l’aide deMessageDigest
     Ils recoivent les mêmes blocs afin de limiter les I/O
     et donc lire une seul fois les blocks

hash blocks fr

Plus performant que certains programmes C++ ?


Purposely using btrfs RAID1 in degraded mode ?https://www.spinics.net/lists/linux-btrfs/msg50990.html

For offline long term backups I also used to work with hashdeep toperform and store a hash of all the files and recently started playingwithFim which is similar but with a git backend for storing history.Don’t get fooled by fim being a java application.
It easily outperformed hashdeep on large datasets.

Les différentes versions de Fim


>Fim changelog <


Articles que j’ai écrit surLinuxFr.org pour promouvoir Fim :

Ils parlent de Fim

L’OpenSource

Fim a été mis en OpenSource pour qu’il profite à tous.
Cela permet aussi de bénéficier des idées de chacun.
Voici les idées et merge request qui ont été soumises :

N’hésitez pas à ouvrir des issues avec vos idées sur GitHub

Les alternatives à Fim

  • git-lfs - Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git

  • git-annex - Managing files with git, without checking the file contents into git

  • doc - Manage your files and documents

  • DIRT (DIRectory Tracker) - Another little Linux command line utility to track changed files in a directory tree.

  • hashdeep -Using Hashdeep To Ensure Data Integrity

  • MD5 Summer - Application for Windows 9x, NT, ME, 2000 and XP which generates and verifies md5 checksums

  • btrfs-scrub - Reads all data from the disk and verifies checksums

Ils n’ont pas le mode super-fast pour le statut ou le commit

Découverte du projet sur GitHub et des outils utilisés

octocat

Asciidoctor - Implémentation Ruby deAsciiDoc pour générer
ladoc de Fim et les slides de cette présentation

Questions

question

[8]ページ先頭

©2009-2026 Movatter.jp