Forums


  • Petite compilation de ce que j'ai récemment appris sur le Btrfs.

    Avertissement :
    Je ne suis pas un spécialiste, loin de là.
    J'ai récemment eu des petits soucis avec mon Linux Ubuntu (principalement de ma faute) et j'ai passé pas mal de temps à trouver les informations correctes.
    Donc ce qui suit est un résumé, plus ou moins en vrac, des infos que j'ai récolté, histoire que la prochaine fois que j'en ai besoin, je n'aille pas à recommencé à chercher partout

    1 - Présentation :
    Btrfs ou B-Tree fs, ou ButterFs ou bien encore Beter Filesystem (Meilleur système de fichier) . Personnellement ne n'ai jamais entendu que la dernière.
    Un 'File system" ou système de fichier, est un programme qui organise les fichiers sur votre disque dur.
    Le Btrfs est un des remplaçants du fameux ext4 qui est utilisé sur Linux depuis des décennies ...
    Pour citer quelques avantages: il est rapide, mieux adapter aux disques SSD (et Nvme) et supporte des tailles de disque qui n'existent pas encore ... rolleyes
    Et surtout, permet de faire des "snapshots" (clichés instantanés) : l'idée est de prendre une "image" d'une partition et de la figer. D'après ce que j'ai compris (mais je ne suis pas 100% sûr) , Btrfs utiliserait des sauvegardes incrémentales des fichiers:
    Un fichier d'origine et chaque sauvegarde on enregistre que la différence avec la version précédente (positive ou négative)
    Ce qui fait que l'on peux facilement revenir en arrière en appliquant les "modifications" à l'envers ... et cela ne prend ps plus de place sur le disque ...
    Maintenant c'est à confirmer !

    2 - Les snapshots :
    Pour pouvoir utiliser cette fonction, il faut d'abord avoir formater son disque en btrfs lors de l'installation.
    Quoique j'ai vu qu'il était possible de convertir un disque en ext4 vers btrfs après coup ... je n'ai jamais essayé et cela comporte probablement un risque.

    Il faut installer en premier lieu les programmes qui permettent de manipuler le btrfs depuis le terminal
    sudo apt install btrfs-progs

    Trouver le disque ou la partition formatée en Btrfs :
    ericc@saurus:~$ lsblk 
    NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
    sda           8:0    0 931,5G  0 disk  
    └─sda1        8:1    0 931,5G  0 part  
      └─md0       9:0    0 931,4G  0 raid1 /mnt/archive
    sdb           8:16   0 931,5G  0 disk  
    └─sdb1        8:17   0 931,5G  0 part  
      └─md0       9:0    0 931,4G  0 raid1 /mnt/archive
    sr0          11:0    1  1024M  0 rom   
    nvme0n1     259:0    0 931,5G  0 disk  
    ├─nvme0n1p1 259:1    0 698,6G  0 part  /home
    │                                      /
    ├─nvme0n1p2 259:2    0   100M  0 part  /boot/efi
    ├─nvme0n1p3 259:3    0    16M  0 part  
    ├─nvme0n1p4 259:4    0 232,2G  0 part  
    └─nvme0n1p5 259:5    0   554M  0 part
    ou
    ericc@saurus:~$ df -T
    Filesystem     Type     1K-blocks      Used Available Use% Mounted on
    tmpfs          tmpfs      3198192      3052   3195140   1% /run
    efivarfs       efivarfs       128        29        95  23% /sys/firmware/efi/efivars
    /dev/nvme0n1p1 btrfs    732570624 162320940 563221620  23% /
    /dev/nvme0n1p1 btrfs    732570624 162320940 563221620  23% /home
    /dev/nvme0n1p2 vfat         98304     33103     65201  34% /boot/efi
    /dev/md0       btrfs    976629440 913587520  62261568  94% /mnt/archive
    tmpfs          tmpfs      3198188      2568   3195620   1% /run/user/1000
    Ici on voit que la partition "/dev/nvme0n1p1" est la "partition" 'root' mais aussi la "partition" 'home'
    Une des particularité de Btrfs est la déconnection entre le support physique et logique, cela permet d'augmenter la taille du support physique facilement.
    Dans ce cas, on appelle plus cela des partitions mais des "subvolumes"

    Ensuite, il est très important de savoir que, avec les versions récentes de Ubuntu, ce que vous voyez quand vous faites un
    ls -l /
    n'est pas le contenu réel de votre disque dur whistle
    En fait c'est le contenu du "snapshot" actif .

    Pour voir ce qu'il y a réellement sur le disque on fait un
    ericc@saurus:~$ sudo btrfs subvolume list /
    ID 256 gen 324411 top level 5 path @_old
    ID 257 gen 326443 top level 5 path @home
    ID 266 gen 300412 top level 256 path @_old/var/lib/portables
    ID 267 gen 300412 top level 256 path @_old/var/lib/machines
    ID 268 gen 326443 top level 5 path @
    ID 274 gen 324415 top level 5 path @before_noble_2024_06_01
    ID 275 gen 324416 top level 5 path @home_before_noble_2024_06_01
    ID 278 gen 324458 top level 5 path @apt-snapshot-release-upgrade-noble-2024-06-01_19:50:14
    ID 283 gen 326336 top level 5 path @apt-snapshot-2024-06-03_20:05:33
    Donc les noms de subvolumes commencent par "@"
    Ceci est propre à Ubuntu et n'est pas une norme officielle ni une obligation ... vous pouvez nommer vos subvolumes comme vous le voulez
    On peux aussi noter que les snapshots sont aussi des subvolumes

    Pour comprendre, il faut regarder le contenu de la fstab
    ericc@saurus:~$ cat /etc/fstab
    # /etc/fstab: static file system information.
    # file system 				mount point   type  options       	dump  pass
    # / was on /dev/nvme0n1p1 during installation
    UUID=e9c315cb-04a6-46d7-a6a1-e899b22bdc57 	/               btrfs   defaults,subvol=@ 	0       1
    # /boot/efi was on /dev/nvme0n1p2 during installation
    UUID=30A6-B1E3  				/boot/efi       vfat    umask=0077      	0       1
    # /home was on /dev/nvme0n1p1 during installation
    UUID=e9c315cb-04a6-46d7-a6a1-e899b22bdc57 	/home           btrfs   defaults,subvol=@home 	0       2
    On voit que la "partition" 'root' (/) est en fait le subvolume "@" , et la "partition" 'home' est en fait le subvolume "@home" !!
    Donc, si je remet les choses dans l'ordre, si un jour j'ai un soucis avec la "partition" 'root' , disons que une mise à jour à foiré, et que je possède un "snapshot" antérieur, il est facile et rapide de changer supprimé le subvolume foireux (@) et de renommer le snapshot en "@" et de rebooter ...

    Sauf que ... pour faire cela, 90% des tutos et article vous disent qu'il faut juste mounter la partition (nvme0n1p1) sur "/mnt" et procéder au changement
    Cela ne marche pas !
    Je ne sais pas si c'est quelque chose qui a changé récemment mais chez moi, installé depuis la 23.04, quand je fais :
    ericc@saurus:~$ sudo mount /dev/nvme0n1p1 /mnt
    je me retrouve en /mnt avec la même chose que ce qu'il y a en "/" (ou presque , mais on verra plus tard)
    Encore pire , même en bootant sur un USB live, je me retrouve avec la même chose et je ne vois pas les "@" !!
    Même "timeshift" qui est un programme pour créer des snapshots, ne voit pas les subvolumes !!! wall

    Donc en fait , il y a un système de "défaut" dans btrfs. Quand cette valeur est activée, quand vous mounter une partition, btrfs va mounter le premier subvolume avec le "top level" correspondant à ce défaut dans l'ordre des ID
    Je recommence :
    ericc@saurus:~$ sudo btrfs subvolume get-default /
    ID 5 (FS_TREE)
    On voit que le défaut est 5 ... si je prend la liste des subvolumes , le premier subvolume par ordre des ID est "@_old" qui est un ancien 'root' (@) foiré que j'ai renommé quand j'ai "restauré" un snapshot après une manipulation foireuse et hasardeuse blush2
    Donc pour mounter la "vraie" partition, il faut faire soit
    ericc@saurus:~$ sudo btrfs subvolume set-default 0 /
    sudo mount /dev/nvme0n1p1 /mnt
    ou , et j'ai trouvé cela APRÈS avoir galéré pendant des heures
    sudo mount -t btrfs -o subvolid=0 /dev/nvme0n1p1 /mnt

    Dans le premier cas, ne pas oublié de refaire un
    ericc@saurus:~$ sudo btrfs subvolume set-default 5 /
    Après avoir umounter

    Comment créer un snapshot ...
    Disons que vous prévoyez de faire une mise à jour importante et vous voulez prendre une petite assurance avant de commencer
    Vous mounter la "partition" comme je viens d'expliquer
    Puis
    sudo btrfs subvolume snapshot [-r] (subvolume) (nom du snapshot)
    sudo btrfs subvolume snapshot [-r] @ @sauvegarde_2024_06_01 par exemple pour sauvegarder le 'root'
    le '-r' est optionel et permet de créer un snapshot en 'read-only'
    Je vous conseille vivement de mettre la date dans le nom du snapshot, histoire de retrouver facilement le plus récent ... bon ceci dit il y a aussi les IDs

    A signaler qu'il existe un "script" , appelé "apt-btrfs-snapshot" et qui permet de faire automatiquement un snapshot avant chaque "apt upgrade" ....
    J'ai installé sur le mien, on va voir ce que cela donne ... mais je fais souvent des mise à jour, j'ai peur de me retrouvé vite fait avec des centaines de snapshot
    De l'autre coté, j'ai une carte vidéo Nvidia et les pilotes ne suivent pas toujours les versions du Kernel.
    Il m'est déjà arrivé deux ou trois fois de ne pas être en mesure de booter parce que le kernel avait été mis à jour mais pas le driver vidéo ... je connais maintenant la manoeuvre pour m'en sortir mais avec un snapshot cela serait plus simple


    C'est tout pour aujourd'hui
    Je ne sais pas mais j'ai l'impression de n'avoir qu' effleurer la surface du btrfs et que l'on peux aussi faire beaucoup plus avec
    Dernier point important : un snapshot n'est pas un backup !!
    Si votre disque crash , vous perdez tout, gardez cela à l'esprit en pensant que vous êtes safe parce que vous avez un snapshot


    ericc me
     

Modérateur(s): ericc, toxxic, mich_belge