Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes |
btrfs [2019/11/07 13:50] – [CoW (Copy-on-write)] sebsauvage | btrfs [2020/01/20 09:42] – [Questions] sebsauvage |
---|
====== btrfs ====== | ====== btrfs ====== |
| |
<note important>Cette page est relativement récente: Il est possible qu'elle contienne des inexactitudes.</note> | |
| |
btrfs est un système de fichiers moderne, bien plus avancé qu'ext4. btrfs est examiné ici dans le cadre d'une utilisation sur un ordinateur personnel. | btrfs est un système de fichiers moderne, bien plus avancé qu'ext4. btrfs est examiné ici dans le cadre d'une utilisation sur un ordinateur personnel. |
* Avec la compression lzo (extrêmement rapide), il devrait y avoir globalement moins d'I/O disque (je n'ai pas un SSD, mais un disque dur à plateaux). | * Avec la compression lzo (extrêmement rapide), il devrait y avoir globalement moins d'I/O disque (je n'ai pas un SSD, mais un disque dur à plateaux). |
* En btrfs, les répertoires sont indexés. | * En btrfs, les répertoires sont indexés. |
| * La duplication d'un fichier ou dossier existant est instantané, et n'occupe pas d'espace disque supplémentaire (non ce n'est pas de la magie). |
* Facilité d'administration: | * Facilité d'administration: |
* Snapshots quotidiens du système (/) (pratique en cas de mise à jour ou bidouillage du système qui se passe mal). | * Snapshots quotidiens du système (/) (pratique en cas de mise à jour ou bidouillage du système qui se passe mal). |
| |
Je ne vais pas vous énumérer ici //toutes// les autres particularités de btrfs (support des très gros fichiers, gestion des volumes logiques, checksum des blocs de données et méta-données, indexation des répertoires, possibilité d'envoyer les snapshot sur une autre machine, etc.). Pour cela, je vous laisser regarder le [[https://btrfs.wiki.kernel.org/index.php/Main_Page#Features|Wiki officiel]]. | Je ne vais pas vous énumérer ici //toutes// les autres particularités de btrfs (support des très gros fichiers, gestion des volumes logiques, checksum des blocs de données et méta-données, indexation des répertoires, possibilité d'envoyer les snapshot sur une autre machine, etc.). Pour cela, je vous laisser regarder le [[https://btrfs.wiki.kernel.org/index.php/Main_Page#Features|Wiki officiel]]. |
| |
| Je ne vais ici aborder que les particularités majeurs de btrfs : Le Copy-on-Write (CoW) et les snapshots. |
==== CoW (Copy-on-write) ==== | ==== CoW (Copy-on-write) ==== |
| |
=== Copie de fichier rapide === | === Copie de fichier rapide === |
| |
Astuce: Quand vous copiez des fichiers avec ''cp'' à l'intérieur de votre partition btrfs, ajoutez l'option ''%%--reflink=always%%'' : Cela va utiliser CoW. Non seulement la copie du fichier sera **instantanée**, mais elle ne **consommera aucun espace disque supplémentaire** (Bien sûr cela ne fonctionne qu'à l'intérieur d'un même système de fichiers btrfs). | Astuce: Quand vous copiez des fichiers avec ''cp'' à l'intérieur de votre partition btrfs, ajoutez l'option ''%%--reflink=auto%%'' : Cela va utiliser CoW. Non seulement la copie du fichier sera **instantanée**, mais elle ne **consommera aucun espace disque supplémentaire** (Bien sûr cela ne fonctionne qu'à l'intérieur d'un même système de fichiers btrfs). |
| |
Exemple: ''%%cp --reflink=always fichier1 fichier2%%'' | Exemple: ''%%cp --reflink=auto fichier1 fichier2%%'' |
| |
À la différence des hardlinks, modifier ''fichier2'' ne modifiera pas ''fichier1''. | À la différence des hardlinks, modifier ''fichier2'' ne modifiera pas ''fichier1''. |
===== Compression ===== | ===== Compression ===== |
| |
La compression est active sur toute ma partition. | * La compression se fait par //extend// (par blocs de données). Elle peut être active sur certains fichiers et pas d'autres. |
| * Vous pouvez compresser des fichiers et répertoires: |
| * à la demande, avec une ligne de commande. |
| * à l'écriture (option de montage à ajouter): Tout fichier écrit sera automatiquement compressé. |
| * Quel que soit votre choix, btrfs décompresse de manière transparente. (Vous n'avez pas besoin d'activer l'option de compression dans les options de montage pour lire les fichiers compressés). |
| * Il existe 3 algorithmes de compression : lzo (le plus rapide, impacte minimal sur le CPU), zstd et zlib (plus puissant, mais beaucoup plus gourmand en CPU). |
| |
La compression est transparente et il est possible de choisir entre trois algorithmes, variant vitesse et taux de compression: lzo (le plus rapide, impacte minimal sur le CPU), zstd et zlib (plus puissant, mais beaucoup plus gourmand en CPU). Mon choix s'est porté sur lzo. | Mon expérience: |
| |
| * J'ai choisi d'activer la compression lzo à l'écriture sur tout le disque. |
| * Je ne constate aucun ralentissement, ni en lecture ni en écriture. |
| * Le disque "gratte" moins qu'en ext4. |
| * Je suis passé de 60 Go de libre (en ext4) à 242 Go de libre (sur une partition de 1 To). |
| * L'espace libre dans ''/'' et ''/home'' est désormais partagé, ce qui me laisse plus de place libre. |
| |
| Donc en ce qui me concerne, ce n'est que du positif. |
| |
* Voir occupé/libre: <code>btrfs filesystem usage /</code> | * Voir occupé/libre: <code>btrfs filesystem usage /</code> |
| |
<hidden Cliquez pour afficher comment installer et utiliser compsize> | <hidden Cliquez pour afficher comment installer et utiliser compsize> |
* ''sudo apt install build-essential'' | |
| * **Note**: //compsize// est généralement fourni dans les depôts des distributions (paquet ''btrfs-compsize''). Si ce n'est pas le cas, voici comment télécharger et compiler la dernière version: |
| |
| * ''sudo apt install build-essential libbtrfs-dev'' |
* Téléchargez et dézippez https://github.com/kilobyte/compsize/archive/master.zip | * Téléchargez et dézippez https://github.com/kilobyte/compsize/archive/master.zip |
* Entrez dans le répertoire ''compsize-master'' et lancez: ''make'' | * Entrez dans le répertoire ''compsize-master'' et lancez: ''make'' |
<code>sudo apt install jdupes | <code>sudo apt install jdupes |
ulimit -n 8192 | ulimit -n 8192 |
sudo jdupes -1 -r -B /</code> | sudo jdupes -r -B /home # déduplication répertoires utilisateurs |
* **-1** : Rester sur un même système de fichiers. | sudo jdupes -r -B /bin /etc /lib /lib64 /opt /sbin /usr # Déduplication côté système</code> |
* **-r** : Traiter les sous-répertoires. | * **-r** : Traiter les sous-répertoires. |
* **-B** : Soumettre les déduplications à btrfs. | * **-B** : Soumettre les déduplications à btrfs. |
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. | 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. |
| |
Les NAS de Synology utilisent aussi btrfs. | |
| |
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 |
| |
Quoi qu'il en soit, la règle suivante est toujours valable: **FAITES DES BACKUPS :!::!::!:** | Quoi qu'il en soit, la règle suivante est toujours valable: **FAITES DES BACKUPS :!::!::!:** |
| |
| Je ne manquerai pas d'indiquer dans cette page si j'ai des soucis avec btrfs. |
| |
---- | ---- |
Notes: | Notes: |
* Quelques personnes m'ont recommandé de mettre ''/'' dans un ''@rootfs'' au lieu de la racine btrfs ''@''. J'envisage éventuellement ça par la suite, mais pour le moment je laisse tel quel. | * Quelques personnes m'ont recommandé de mettre ''/'' dans un ''@rootfs'' au lieu de la racine btrfs ''@''. J'envisage éventuellement ça par la suite, mais pour le moment je laisse tel quel. |
* La partition VeraCrypt sera mise dans sa propre partition, car //a priori// les multiples modification du fichier conteneur risquent de créer plein de données CoW pour rien (gaspillage de place et et d'I/O). Autant lui mettre sa propre partition. | * La partition VeraCrypt est mise dans sa propre partition, car //a priori// les multiples modification du fichier conteneur risquent de créer plein de données CoW pour rien (gaspillage de place et et d'I/O). Autant lui mettre sa propre partition. |
* Je n'ai pas de partition swap, j'ai 12Go de RAM et le swap est en zram seul. | * Je n'ai pas de partition swap, j'ai 12Go de RAM et le swap est en zram seul. |
| |
- Récupération d'un HD externe 1 To temporairement (le disque de l'ordinateur à migrer fait 1 To) | - Récupération d'un HD externe 1 To temporairement (le disque de l'ordinateur à migrer fait 1 To) |
- Formatage d'une partition en ext4 sur ce HD externe. | - Formatage d'une partition en ext4 sur ce HD externe. |
* :!: Gotcha: Formattez - bien à l'avance de votre backup - votre partition de 1 To en ext4 et laissez le disque branché, car la création des inodes en tâche de fond prend une éternité. Je me suis fait avoir. J'ai perdu beaucoup de temps à cause de ça. | * :!: Gotcha: Formattez - //bien à l'avance de votre backup// - votre partition de 1 To en ext4 et //laissez le disque branché//, car la création des inodes en tâche de fond prend une éternité. Je me suis fait avoir. J'ai perdu beaucoup de temps à cause de ça. |
- Sauvegarde de /home sur ce disque avec fsarchiver<code>sudo fsarchiver -v -Z 1 savedir /mnt/sdb1/home.fsa /home</code> | - Sauvegarde de /home sur ce disque avec fsarchiver<code>sudo fsarchiver -v -Z 1 savedir /mnt/sdb1/home.fsa /home</code> |
* ''savedir''=sauvegarder un répertoire, ''-v'' pour verbose, ''-Z 1'' pour utiliser la compression ztsd (très rapide). | * ''savedir''=sauvegarder un répertoire, ''-v'' pour verbose, ''-Z 1'' pour utiliser la compression ztsd (très rapide). |
---- | ---- |
| |
| |
| ===== Migration de version de Linux Mint par ré-installation ===== |
| |
| Quand je change de version de Linux Mint, je procède par ré-installation. Cependant, même si Linux Mint supporte btrfs, l'installeur de Mint (Ubiquity) ne permet pas de spécifier des sous-volumes précis pour l'installation. |
| |
| Voici comment procéder pour upgrader Mint par ré-installation sans perdre votre **@home**: |
| |
| * Bootez sur clé USB. |
| * **Avant installation**: |
| * Dans l'explorateur de fichiers, cliquez sur votre disque dur: Vous allez voir vos sous-volume btrfs **@** et **@home**. |
| * Ouvrez un terminal dans ce dossier. |
| * Renommez-les:<code bash>sudo mv @ @.ancien |
| sudo mv @home @home.ancien</code> |
| * démontez le disque. |
| * Procédez à l'installation de Linux Mint. Dans l'installeur, choisissez "Autre chose". Sélectionnez votre partition btrfs et cliquez sur le bouton "Modifier" et utilisez votre partition btrfs pour l'installation (point de montage: ''/''), **mais :!: ne cochez surtout pas la case //Formatter//**. L'installeur va ainsi créer des sous-volumes **@** et **@home** sans toucher aux sous-volumes que vous avez sauvegardés (//.ancien//). {{ :btrfs:btrfs-ubiquity-reuse.png?direct |}} |
| * À l'installation, créez l'utilisateur système avec le même nom (pour ne pas avoir à retoucher aux droits dans /home) |
| * **Après la fin de l'installation**, **:!: ne rebootez pas**. |
| * Remontez votre partition btrfs, et renommez les sous-volumes:<code bash>sudo mv @home @home.new |
| sudo mv @home.ancien @home</code> |
| * Rebootez: Vous devriez avoir votre ''/home'' en l'état. |
| * Pour gagner de la place, supprimer ensuite les sous-volumes @.ancien et @home.new. |
| |
| ---- |
| |
===== Questions ===== | ===== Questions ===== |
| |
* Quelle est la maintenance régulière à faire, et à quelle fréquence ? (defrag, scrub, balance... ?) | * Quelle est la maintenance régulière à faire sur un système btrfs, et à quelle fréquence ? (defrag, scrub, balance... ?) |
* En dehors, bien sûr, de ne pas garder inutilement plein de snapshots (mais Timeshift est bien paramétrable de ce côté là). | * En dehors, bien sûr, de ne pas garder inutilement plein de snapshots (mais Timeshift est bien paramétrable de ce côté là). |
* Est-ce qu'il est judicieux d'utiliser btrfs à l'//intérieur// d'une partition VeraCrypt ? | |
* Pour nettoyer l'espace libre (écrire des zéros), je présume qu'avec le CoW, un ''sfill -fllvz /'' n'est pertinent ? Par quoi remplacer ? (il y a des outils internes btrfs ?). Ou c'est juste impossible ? | * Pour nettoyer l'espace libre (écrire des zéros), je présume qu'avec le CoW, un ''sfill -fllvz /'' n'est pertinent ? Par quoi remplacer ? (il y a des outils internes btrfs ?). Ou c'est juste impossible ? |
* On trouve des avis contradictoires: Est-ce que de la RAM ECC est vraiment nécessaire ? (Je dirais que non: Si vos données sont corrompues en mémoire avant d'être envoyées au système de fichier, aucun système de fichier ne les sauvera. btrfs/ZFS ne se comporteront pas pire/pas mieux dans ce cas.) | |
* Je suis en train de réfléchir à ces deux solutions: | |
* (1) ''compress=lzo'' dans les options de montage. | |
* (2) Pas de compression dans les options de montage, mais de temps en temps un ''sudo btrfs filesystem defragment -r -v -czstd /'' | |
* Je ne veux pas activer zstd dans les options de montage, car il consomme plus de CPU que lzo à l'écriture des fichiers. Donc pas bon pour du temps réel. | |
* La solution 2 permettrait d'avoir un meilleur taux de compression sans bouffer de CPU (zstd compresse mieux que lzo, et consomme autant de CPU que lzo à la décompression). | |
| |
| |
---- | ---- |