Outils pour utilisateurs

Outils du site


btrfs

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
btrfs [2020/07/29 06:16] – [Migration de version de Linux Mint par ré-installation] sebsauvagebtrfs [2023/03/20 12:52] (Version actuelle) – [Gotchas] sebsauvage
Ligne 23: Ligne 23:
  
 <note>Je ne vais pas parler ici que de certaines fonctionnalités de btrfs, mais sachez qu'on peut aller beaucoup plus loin, comme faire du RAID logiciel, faire un miroir quasi-temps réel d'un disque vers une autre machine, ou encore //remplacer à chaud un disque dur sans arrêter le système// (!)</note> <note>Je ne vais pas parler ici que de certaines fonctionnalités de btrfs, mais sachez qu'on peut aller beaucoup plus loin, comme faire du RAID logiciel, faire un miroir quasi-temps réel d'un disque vers une autre machine, ou encore //remplacer à chaud un disque dur sans arrêter le système// (!)</note>
 +
  
  
Ligne 37: Ligne 38:
 ==== CoW (Copy-on-write) ==== ==== CoW (Copy-on-write) ====
  
-Le Copy-on-write (ou "CoW") est une particularité bien spécifique de certains systèmes de fichiers récents comme btrfs ou XFS.+Le Copy-on-write (ou "CoW") est une particularité bien spécifique de certains systèmes de fichiers récents comme btrfs ou ZFS.
  
 === Fonctionnement === === Fonctionnement ===
Ligne 68: Ligne 69:
     * Notez que si vous désactivez CoW sur un répertoire, tout nouveau fichier créé dans ce répertoire aura également CoW désactivé.     * Notez que si vous désactivez CoW sur un répertoire, tout nouveau fichier créé dans ce répertoire aura également CoW désactivé.
     * Un fichier marqué en "NOCOW" ne pourra pas bénéficier de la compression (voir plus loin).     * Un fichier marqué en "NOCOW" ne pourra pas bénéficier de la compression (voir plus loin).
 +
 +<note>Le fait de faire une défragmentation casse les liens de déduplication. Cela n'a aucun impact sur l'intégrité des données, mais si vous aviez des fichiers dédupliqués (par exemple avec jdupes), avec la défragmentation chaque fichier se retrouve avec sa copie des données. L'occupation de l'espace disque sera donc supérieure. Il sera nécessaire de refaire une déduplication après la défragmentation pour récupérer l'espace.</note>
  
 === atime === === atime ===
Ligne 196: Ligne 199:
  
 Il y a donc 2 endroits où vous pouvez compresser: Il y a donc 2 endroits où vous pouvez compresser:
-  * **Dans les options de montage de la partition btrfs** (en ajoutant ''compress=...'' dans ''fstab''). Cela activera la compression des données à l'écriture.+  * **Dans les options de montage de la partition btrfs** (en ajoutant ''compress=...'' ou ''compress-force=...'' dans ''fstab''). Cela activera la compression des données à l'écriture.
   * **En compressant manuellement des fichiers/répertoire** (''sudo btrfs filesystem defragment -r -v -czstd /répertoire''). Vous pouvez faire cela même si l'option de compression n'est pas active dans les options de montage. btrfs saura lire et manipuler ces fichiers compressés sans problème.   * **En compressant manuellement des fichiers/répertoire** (''sudo btrfs filesystem defragment -r -v -czstd /répertoire''). Vous pouvez faire cela même si l'option de compression n'est pas active dans les options de montage. btrfs saura lire et manipuler ces fichiers compressés sans problème.
  
Ligne 219: Ligne 222:
       * Après compression: //Used: 5.04 GiB / Free (estimated) : 33.11 GiB//       * Après compression: //Used: 5.04 GiB / Free (estimated) : 33.11 GiB//
       * On gagne 4 Go d'un coup !       * On gagne 4 Go d'un coup !
-  * Pour que les nouveaux fichiers créés soient compressés automatiquement, modifier ''/etc/fstab'' en ajoutant dans les options de montage ''compress=zstd''.+  * Pour que les nouveaux fichiers créés soient compressés automatiquement, modifier ''/etc/fstab'' en ajoutant dans les options de montage ''compress-force=zstd''.
   * La compression a un peu d'intelligence: Si le début d'un fichier se compresse mal, btrfs ne compressera pas le fichier (même si la compression est active dans les options). btrfs ne devrait donc pas perdre de temps à essayer de compresser les archive 7z/zip, les vidéos mp4, etc.   * La compression a un peu d'intelligence: Si le début d'un fichier se compresse mal, btrfs ne compressera pas le fichier (même si la compression est active dans les options). btrfs ne devrait donc pas perdre de temps à essayer de compresser les archive 7z/zip, les vidéos mp4, etc.
   * La compression s'effectue au niveau blocs et pas au niveau fichiers.   * La compression s'effectue au niveau blocs et pas au niveau fichiers.
Ligne 252: Ligne 255:
  
 \\  \\ 
 +
 +==== Comment lire un compte-rendu de compsize ====
 +
 +<code>Type       Perc     Disk Usage   Uncompressed Referenced  
 +TOTAL       65%      1.4G         2.1G         4.0G  </code>
 +
 +  * Ce dossier contient 4 Go de données.
 +  * Certains fichiers (dans différents sous-répertoires) ont un contenu identique. Avec la déduplication, il n'y a donc que 2,1 Go de données uniques dans ce répertoire.
 +  * Avec la compression, ces 2,1 Go se compressent en 1,4 Go.  
 +  * Donc ce dossier contenant 4 Go de fichiers n'occupe que 1,4 Go sur disque.
  
 ---- ----
 ===== Déduplication ===== ===== Déduplication =====
  
-Contrairement à XFS, btrfs ne fait pas (encore) de déduplication en temps réel. Il n'est également pas fourni avec des outils officiels pour faire la déduplication. Il faut lancer des outils tiers pour dédupliquer les données. Il en existe plusieurs: https://btrfs.wiki.kernel.org/index.php/Deduplication#Dedicated_btrfs_deduplicators+Contrairement à ZFS, btrfs ne fait pas (encore) de déduplication en temps réel. Il n'est également pas fourni avec des outils officiels pour faire la déduplication. Il faut lancer des outils tiers pour dédupliquer les données. Il en existe plusieurs: https://btrfs.wiki.kernel.org/index.php/Deduplication#Dedicated_btrfs_deduplicators
  
 Cette déduplication ne peut être effectuée que sur une partition montée. Cette déduplication ne peut être effectuée que sur une partition montée.
  
 Certains outils de déduplication fonctionnent au niveau **fichier** (les fichiers identiques //en entier// seront dédupliqués), d'autres au niveau **blocs de données** (les blocs de données identiques, même dans des fichiers différents, seront dédupliqués).  Certains outils de déduplication fonctionnent au niveau **fichier** (les fichiers identiques //en entier// seront dédupliqués), d'autres au niveau **blocs de données** (les blocs de données identiques, même dans des fichiers différents, seront dédupliqués). 
 +
 +
 +<note>La déduplication au niveau blocs est en théorie plus efficace, mais j'ai constaté de bien meilleurs résultats avec //jdupes// (déduplication au niveau fichiers) qu'avec //duperemove// (déduplication au niveau blocs). Je ne me l'explique pas. Donc de manière générale, parmis les solutions proposées, préférez //jdupes//.</note>
  
 Voici différents outils: Voici différents outils:
  
-<hidden Déduplication au niveau blocs avec duperemove ⇐ :-) **solution recommandée**>+ 
 +<hidden Déduplication au niveau fichiers avec jdupes ⇐ :-) **solution recommandée** 
 + 
 +jdupes possède une option spécifique pour btrfs.  
 + 
 +<code>sudo apt install jdupes 
 +ulimit -n 600000 
 +sudo jdupes -1 -r -B /home 
 +sudo jdupes -1 -r -B /bin /etc /lib /lib64 /opt /sbin /usr /snap /var</code> 
 +  * **-1** : Ne comparer que les fichiers qui sont sur le même système de fichier (btrfs ne pourra pas dédupliquer des fichiers situés dans des systèmes de fichiers différents). 
 +  * **-r** : Traiter les sous-répertoires. 
 +  * **-B** : Soumettre les déduplications à btrfs. 
 +    * Astuce: Retirez le paramètre ''-B'' pour voir les fichiers identiques, sans dédupliquer. 
 +  * jdupes va balayer les répertoires, rechercher les fichiers identiques et s'ils sont identiques octet par octet, soumettre la déduplication à btrfs. 
 +  * La commande ''ulimit -n'' permet d'augmenter le nombre de fichier ouverts simultanément (1024 par défaut, ce qui peut être trop juste pour jdupes. Si vous n'augmentez pas, vous risquez d'avoir l'erreur "too many open files" qui va nuire à l'efficacité de la déduplication.) 
 +</hidden> 
 + 
 +<hidden Déduplication au niveau blocs avec duperemove>
   * Installation: ''sudo apt install duperemove''   * Installation: ''sudo apt install duperemove''
   * Utilisation: ''%%sudo duperemove -drh --hashfile=/.duperemove.dat /etc /lib /lib32 /lib64 /libx32 /sbin /snap /srv /usr /var /home %%''   * Utilisation: ''%%sudo duperemove -drh --hashfile=/.duperemove.dat /etc /lib /lib32 /lib64 /libx32 /sbin /snap /srv /usr /var /home %%''
Ligne 278: Ligne 311:
 </hidden> </hidden>
  
- 
-<hidden Déduplication au niveau fichiers avec jdupes > 
- 
-jdupes possède une option spécifique pour btrfs.  
- 
-<code>sudo apt install jdupes 
-ulimit -n 8192 
-sudo jdupes -r -B /home  # déduplication répertoires utilisateurs 
-sudo jdupes -r -B /bin /etc /lib /lib64 /opt /sbin /usr  # Déduplication côté système</code> 
-  * **-r** : Traiter les sous-répertoires. 
-  * **-B** : Soumettre les déduplications à btrfs. 
-    * Astuce: Retirez le paramètre ''-B'' pour voir les fichiers identiques, sans dédupliquer. 
-  * jdupes va balayer les répertoires, rechercher les fichiers identiques et s'ils sont identiques octet par octet, soumettre la déduplication à btrfs. 
-  * La commande ''ulimit -n'' permet d'augmenter le nombre de fichier ouverts simultanément (1024 par défaut, ce qui peut être trop juste pour jdupes. Si vous n'augmentez pas à 8192, vous risquez d'avoir l'erreur "too many open files" qui va nuire à l'efficacité de la déduplication.) 
-</hidden> 
  
 <hidden Déduplication au niveau fichiers avec rmlint> <hidden Déduplication au niveau fichiers avec rmlint>
Ligne 317: Ligne 335:
   * **Installation**:   * **Installation**:
     * Récupérer et dézipper https://github.com/Zygo/bees/archive/master.zip     * Récupérer et dézipper https://github.com/Zygo/bees/archive/master.zip
-    * ''sudo apt install build-essential btrfs-tools uuid-dev markdown''+    * ''sudo apt install build-essential uuid-dev markdown libbtrfs-dev''
     * ''make''     * ''make''
     * ''sudo make install''     * ''sudo make install''
Ligne 350: Ligne 368:
 On trouve beaucoup d'histoires de corruptions et de problème avec btrfs. Mais il semblerait qu'elles soient toutes liées à d'anciennes versions (<2016) de btrfs. Or le développement de btrfs est très actif. Afin d'éviter les problèmes, il est donc conseillé d'utiliser des noyaux Linux récents. On trouve beaucoup d'histoires de corruptions et de problème avec btrfs. Mais il semblerait qu'elles soient toutes liées à d'anciennes versions (<2016) de btrfs. Or le développement de btrfs est très actif. Afin d'éviter les problèmes, il est donc conseillé d'utiliser des noyaux Linux récents.
  
-Facebook utilise [[https://engineering.fb.com/open-source/linux/|massivement]] btrfs sur ses serveurs. Je ne pense pas qu'ils soient très fan de la corruption de données. \\ Les NAS de Synology utilisent aussi btrfs.+Facebook utilise [[https://engineering.fb.com/open-source/linux/|massivement]] btrfs sur ses serveurs. Je ne pense pas qu'ils soient très fan de la corruption de données. \\ Les NAS de Synology utilisent aussi btrfs. La distribution Linux //Fedora// utilise [[https://9to5linux.com/fedora-33-beta-released-with-btrfs-by-default-gnome-3-38-and-linux-5-8|btrfs par défaut]].
  
 Ceci dit, //certaines// fonctionnalités de btrfs ne sont pas considérées comme stable et ne devraient pas encore être utilisées (par exemple RAID56) : https://btrfs.wiki.kernel.org/index.php/Status Ceci dit, //certaines// fonctionnalités de btrfs ne sont pas considérées comme stable et ne devraient pas encore être utilisées (par exemple RAID56) : https://btrfs.wiki.kernel.org/index.php/Status
Ligne 378: Ligne 396:
     * Montez vos partition avec l'option ''noatime''/''nodiratime''     * Montez vos partition avec l'option ''noatime''/''nodiratime''
     * De temps en temps, défragmentez manuellement (''sudo btrfs filesystem defragment -r /'')     * De temps en temps, défragmentez manuellement (''sudo btrfs filesystem defragment -r /'')
-  * btrfs ne supporte pas le **swap**: 
-    * Donc utilisez une //partition// swap (hors de la partition btrfs) au lieu d'un //fichier// swap dans la partition btrfs. 
   * btrfs ne supporte pas nativement le **chiffrement**.   * btrfs ne supporte pas nativement le **chiffrement**.
     * Utilisez LUKS/dmcrypt/VeraCrypt.     * Utilisez LUKS/dmcrypt/VeraCrypt.
   * [[https://btrfs.wiki.kernel.org/index.php/Status|Certaines fonctions]] de btrfs ne sont **pas stables**. Ne les utilisez pas.   * [[https://btrfs.wiki.kernel.org/index.php/Status|Certaines fonctions]] de btrfs ne sont **pas stables**. Ne les utilisez pas.
   * Le **''commit''** par défaut en ext4 est généralement de 5 secondes.  btrfs a un ''commit'' par défaut de 30 secondes.   * Le **''commit''** par défaut en ext4 est généralement de 5 secondes.  btrfs a un ''commit'' par défaut de 30 secondes.
-  * Ne pas utiliser btrfs sur des **périphériques USB** (disque dur externe, clés USB...). La cause n'est pas vraiment btrfs lui-même mais la qualité désastreuse des pilotes USB.+  * <del>Ne pas utiliser btrfs sur des **périphériques USB** (disque dur externe, clés USB...). La cause n'est pas vraiment btrfs lui-même mais la qualité désastreuse des pilotes USB.</del>  Cette recommandation a disparu du wiki officiel de btfs, je présume donc que l'utilisation de btrfs sur périphériques USB ne pose plus problème.
   * Quand vous faites un snapshot d'un sous-volume, cela ne fait pas de snapshot des sous-volumes qui sont à l'intérieur. (Si vous avez ''@'' monté en ''/'', ''@home'' monté en ''/home'', faire un snapshot de ''@'' ne fera **pas** un snapshot de ''@home''. Le répertoire ''/home'' apparaîtra comme un répertoire vide dans le snapshot de ''@'').   * Quand vous faites un snapshot d'un sous-volume, cela ne fait pas de snapshot des sous-volumes qui sont à l'intérieur. (Si vous avez ''@'' monté en ''/'', ''@home'' monté en ''/home'', faire un snapshot de ''@'' ne fera **pas** un snapshot de ''@home''. Le répertoire ''/home'' apparaîtra comme un répertoire vide dans le snapshot de ''@'').
  
Ligne 404: Ligne 420:
  
 Il existe un outils de migration ext4 vers btrfs, mais il n'est absolument pas stable. J'ai donc choisi de déplacer temporairement mes fichiers sur un disque externe, reformater, et re-transférer les fichiers. Il existe un outils de migration ext4 vers btrfs, mais il n'est absolument pas stable. J'ai donc choisi de déplacer temporairement mes fichiers sur un disque externe, reformater, et re-transférer les fichiers.
 +
 +<note warning>Il est fortement déconseillé d'utiliser l'outils de migration ext4➡btrfs. Il faut mieux: sortir les fichiers sur un autre support, reformater en btrfs, puis recopier les fichiers. Vous pouvez vous aider de //fsarchiver// est extrêmement efficace pour stocker temporairement des fichiers sur un support externe.</note>
 ==== Partitionnement ==== ==== Partitionnement ====
  
Ligne 424: Ligne 442:
   - Sauvegarde du contenu de ma partition VeraCrypt avec fsarchiver (en ajoutant l'option ''-c -'' pour chiffrer l'archive)   - Sauvegarde du contenu de ma partition VeraCrypt avec fsarchiver (en ajoutant l'option ''-c -'' pour chiffrer l'archive)
   - Repartionnement en btrfs et ré-installation de l'OS.   - Repartionnement en btrfs et ré-installation de l'OS.
-  - Activation des options de montage des volumes btrfs dans ''/etc/fstab'' (''noatime,nodiratime,autodefrag,compress=zstd'') + reboot pour prise en compte. +  - Activation des options de montage des volumes btrfs dans ''/etc/fstab'' (''noatime,nodiratime,autodefrag,compress-force=zstd'') + reboot pour prise en compte. 
   - Recopie des données du dd externe vers la machine (''fsarchiver restdir'')   - Recopie des données du dd externe vers la machine (''fsarchiver restdir'')
   - (plus tard) Déduplication des données.   - (plus tard) Déduplication des données.
Ligne 452: Ligne 470:
  
 Je monte mes sous-volumes btrfs avec ces options: Je monte mes sous-volumes btrfs avec ces options:
-<code>UUID=e3dc85e3-0d2b-40e3-803b-7c2cb0bf543a /               btrfs   defaults,noatime,nodiratime,autodefrag,compress=zstd,subvol=@ 0       1 +<code>UUID=e3dc85e3-0d2b-40e3-803b-7c2cb0bf543a /               btrfs   defaults,noatime,nodiratime,autodefrag,compress-force=zstd,subvol=@ 0       1 
-UUID=e3dc85e3-0d2b-40e3-803b-7c2cb0bf543a /home           btrfs   defaults,noatime,nodiratime,autodefrag,compress=zstd,subvol=@home 0       2</code>+UUID=e3dc85e3-0d2b-40e3-803b-7c2cb0bf543a /home           btrfs   defaults,noatime,nodiratime,autodefrag,compress-force=zstd,subvol=@home 0       2</code>
  
   * ''noatime'' : Ne pas enregistrer la date de dernier accès aux fichiers.   * ''noatime'' : Ne pas enregistrer la date de dernier accès aux fichiers.
   * ''nodiratime'' : Ne pas enregistrer la date de dernier accès aux répertoires.   * ''nodiratime'' : Ne pas enregistrer la date de dernier accès aux répertoires.
-  * ''compress=zstd'' : Activer la compression à l'écriture.+  * ''compress-force=zstd'' : Activer la compression à l'écriture.
   * ''autodefrag'' : Activer la défragmentation automatique.   * ''autodefrag'' : Activer la défragmentation automatique.
  
Ligne 518: Ligne 536:
   * https://doc.ubuntu-fr.org/btrfs   * https://doc.ubuntu-fr.org/btrfs
   * http://marc.merlins.org/perso/btrfs/   * http://marc.merlins.org/perso/btrfs/
 +  * https://lord.re/categories/btrfs/
   * https://linuxfr.org/users/ar7   * https://linuxfr.org/users/ar7
   * http://debian-facile.org/doc:systeme:btrfs   * http://debian-facile.org/doc:systeme:btrfs
btrfs.1596003396.txt.gz · Dernière modification : 2020/07/29 06:16 de sebsauvage