User Tools

Site Tools


linux:btrfs

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
linux:btrfs [2021/01/04 15:38]
manu
linux:btrfs [2024/11/12 22:52] (current)
manu
Line 24: Line 24:
 <cli prompt='#'>​ <cli prompt='#'>​
 manu-opensuse:​~ # mkfs.btrfs /dev/sdb3 manu-opensuse:​~ # mkfs.btrfs /dev/sdb3
-manu-opensuse:​~ # mount -t btrfs /​dev/​sdb3 ​ /mnt/btrfs+manu-opensuse:​~ # cat /​etc/​fstab 
 +... 
 +/dev/sdb3 /backup btrfs defaults 0 0 
 + 
 +manu-opensuse:​~ # mkdir /backup 
 +manu-opensuse:​~ # mount -t btrfs /​dev/​sdb3 ​ /backup
 </​cli>​ </​cli>​
  
Line 32: Line 37:
 Label: none  uuid: a3da64e9-f198-4cb2-adcd-01ec0541cba9 Label: none  uuid: a3da64e9-f198-4cb2-adcd-01ec0541cba9
         Total devices 1 FS bytes used 11.58GiB         Total devices 1 FS bytes used 11.58GiB
-        devid    1 size 40.00GiB used 13.80GiB path /dev/sda3+        devid    1 size 40.00GiB used 13.80GiB path /dev/sdb3
 </​cli>​ </​cli>​
  
 First, let's see how much free space we have: First, let's see how much free space we have:
 <cli prompt='#'>​ <cli prompt='#'>​
-manu-opensuse:/​ # btrfs fi df -h /+manu-opensuse:/​ # btrfs filesystem ​df -h /backup
 Data, single: total=38.97GiB,​ used=35.73GiB Data, single: total=38.97GiB,​ used=35.73GiB
 System, single: total=32.00MiB,​ used=16.00KiB System, single: total=32.00MiB,​ used=16.00KiB
Line 44: Line 49:
 </​cli>​ </​cli>​
  
 +Or
 +<cli prompt='#'>​
 +# btrfs filesystem usage /backup
 +Overall:
 +    Device size:                  20.02GiB
 +    Device allocated: ​            ​13.78GiB
 +    Device unallocated: ​           6.24GiB
 +    Device missing: ​                 0.00B
 +    Used:                         ​10.02GiB
 +    Free (estimated): ​             9.63GiB ​     (min: 9.63GiB)
 +    Data ratio: ​                      1.00
 +    Metadata ratio: ​                  1.00
 +    Global reserve: ​             144.00MiB ​     (used: 0.00B)
 +
 +             ​Data ​    ​Metadata ​ System
 +Id Path      single ​  ​single ​   single ​  ​Unallocated
 +-- --------- -------- --------- -------- -----------
 + 1 /dev/sda3 13.00GiB 768.00MiB 32.00MiB ​    ​6.24GiB
 +-- --------- -------- --------- -------- -----------
 +   ​Total ​    ​13.00GiB 768.00MiB 32.00MiB ​    ​6.24GiB
 +   ​Used ​      ​9.61GiB 421.36MiB 16.00KiB
 +</​cli>​
 +
 +Increase or reduce the partition size online:
 +<cli prompt='#'>​
 +# btrfs filesystem resize -42g /backup
 +</​cli>​
 +
 +To prevent device from changing name, you can also use the UUID, which is a persistent name
 +<cli prompt='#'>​
 +manu-opensuse:/​ # lsblk -a -o UUID,​NAME,​FSUSED,​FSTYPE
 +UUID                                   ​NAME ​                   FSUSED FSTYPE
 +                                       ​sda ​                           ​
 +F926-FC70 ​                             ├─sda1 ​                   8.3M vfat
 +a2e132cf-d69c-448c-bc59-9e833bebb95c ​  ​├─sda2 ​                        ext3
 +a3da64e9-f198-4cb2-adcd-01ec0541cba9 ​  ​├─sda3 ​                  36.6G btrfs
 +4c91d4e3-89f7-4b17-9507-84b17c69d777 ​  ​├─sda4 ​                  15.2G xfs
 +859cf5c6-a1ba-4711-98b2-387b8c2bd860 ​  ​├─sda5 ​                        swap
 +1z8s8i-WQL7-yutq-VKYE-cbBD-p1ZB-3dCuwo └─sda6 ​                        ​LVM2_member
 +35bfc2a9-a3c0-4eee-82a1-1f62ca52aad7 ​    ​├─libraryvg-vmlv ​     107.9G ext4
 +
 +manu-opensuse:/​ # cat /etc/fstab
 +UUID=a3da64e9-f198-4cb2-adcd-01ec0541cba9 ​ /             ​btrfs ​ defaults ​              ​0 ​ 0
 +UUID=a3da64e9-f198-4cb2-adcd-01ec0541cba9 ​ /var          btrfs  subvol=/​@/​var ​         0  0
 +UUID=07e198ed-18a3-41ed-9e48-bde82ead65fc ​ /​backup ​      ​btrfs ​ defaults,​compress ​     0  1
 +</​cli>​
 ==== Convert an ext4 partition to BTRFS ==== ==== Convert an ext4 partition to BTRFS ====
  
-Make a backup before doing this operation+Make a backup before doing this operation ​(supported on ext2, 3, 4 and reiserfs)
 <cli prompt='#'>​ <cli prompt='#'>​
 manu-opensuse:​~ # btrfs-convert /​dev/<​device>​ manu-opensuse:​~ # btrfs-convert /​dev/<​device>​
Line 55: Line 106:
 ==== Sub-volumes ==== ==== Sub-volumes ====
  
-==== Snapshoting ====+A subvolume is a part of filesystem with its own independent file/​directory hierarchy. Subvolumes can share file extents. A snapshot is also subvolume, but with a given initial content of the original subvolume.
  
-==== Compression ====+=== subvolumes et snapshots ​===
  
-==== RAID protection ====+Un subvolume est comparable à un simple répertoire (il peut contenir des fichiers et d’autres répertoires). Lorsque que l’on utilise Btrfs, il existe au moins un subvolume, le subvolume racine. 
 +<cli prompt='#'>​ 
 +# btrfs subvolume create /​backup/​aaa 
 +# btrfs subvolume create /​backup/​bbb 
 +</​cli>​
  
 +List available subvolumes on /backup:
 +<cli prompt='#'>​
 +# btrfs subvolume list /backup/
 +</​cli>​
  
 +Note : A snapshot is a copy-on-write of Btrfs. It shares the same blocks as the filesystem. It doesn'​t preserve in case of corruption.
  
 +Create a snapshot :
 +<cli prompt='#'>​
 +# btrfs subvolume snapshot /backup/aaa /​backup/​bbb/​snapshot1
 +</​cli>​
 +
 +Suppress a subvolume (and those snapshots) :
 +<cli prompt='#'>​
 +# btrfs subvolume delete /​bbb/​bbb/​snapshot1
 +</​cli>​
 +
 +List properties of subvolume :
 +<cli prompt='#'>​
 +# btrfs property list -ts /​path/​to/​subvolume
 +</​cli>​
 +
 +Put a subvolume in RW:
 +<cli prompt='#'>​
 +# btrfs property set -ts /​path/​to/​subvolume ro false
 +</​cli>​
 +
 +Put a subvolume in RO:
 +<cli prompt='#'>​
 +# btrfs property set -ts /​path/​to/​subvolume ro true
 +</​cli>​
 +
 +=== Operations on subvolume ===
 +
 +Pour déplacer un subvolume, il faut créer un snapshot en read-only du subvolume que l’on souhaite déplacer/​renommer puis supprimer l’original.
 +<cli prompt='#'>​
 +# btrfs sub snap -r /​path/​to/​subvolume /​path/​to/​snapshot
 +# btrfs subvolume delete /​path/​to/​subvolume
 +</​cli>​
 +
 +On passera ensuite le volume en RO/RW :
 +<cli prompt='#'>​
 +# btrfs property set -ts /​path/​to/​snapshot ro false
 +</​cli>​
 +
 +Envoyer un subvolume
 +
 +Pour transférer un subvolume vers un autre serveur, il faut créer un snapshot en RO du subvolume en question.
 +<cli prompt='#'>​
 +# btrfs sub snap -r /​path/​to/​subvolume /​path/​to/​snapshot-RO
 +</​cli>​
 +
 +You can synchronize a BTRFS snapshot with a remote server:
 +<cli prompt='#'>​
 +# btrfs send /​path/​to/​snapshot-RO | ssh root@192.0.2.1 "btrfs receive /​path/​to/​remote-snapshot"​
 +</​cli>​
 +
 +Compression
 +
 +On peut monter avec l’option compress=zlib ou compress=lzo pour activer une compression à la volée des fichiers. Si le volume avant n’avait pas l’option compress on pourra tout recompresser avec btrfs filesystem defragment -czlib ou -clzo.
 +Maintenance
 +
 +==== Quota for Subvolumes ====
 +
 +The Btrfs root file system subvolumes /var/log, /var/crash and /var/cache can use all of the available disk space during normal operation, and cause a system malfunction. To help avoid this situation, SUSE Linux Enterprise Server now offers Btrfs quota support for subvolumes. If you set up the root file system by using the respective YaST proposal, it is prepared accordingly:​ quota groups (qgroup) for all subvolumes are already set up. To set a quota for a subvolume in the root file system, proceed as follows:
 +
 +Enable quota support:
 +<cli prompt='#'>​
 +# btrfs quota enable /
 +</​cli>​
 +
 +Get a list of subvolumes:
 +<cli prompt='#'>​
 +# btrfs subvolume list /
 +</​cli>​
 +
 +Quotas can only be set for existing subvolumes.
 +
 +Set a quota for one of the subvolumes that was listed in the previous step. A subvolume can either be identified by path (for example /var/tmp) or by 0/SUBVOLUME ID (for example 0/272). The following example sets a quota of 5 GB for /var/tmp.
 +<cli prompt='#'>​
 +# btrfs qgroup limit 5G /var/tmp
 +</​cli>​
 +
 +The size can either be specified in bytes (5000000000),​ kilobytes (5000000K), megabytes (5000M), or gigabytes (5G). The resulting values in bytes slightly differ, since 1024 Bytes = 1 KiB, 1024 KiB = 1 MiB, etc.
 +
 +To list the existing quotas, use the following command. The column max_rfer shows the quota in bytes.
 +<cli prompt='#'>​
 +# btrfs qgroup show -r /
 +</​cli>​
 +
 +TipTip: Nullifying a Quota
 +
 +In case you want to nullify an existing quota, set a quota size of none:
 +<cli prompt='#'>​
 +# btrfs qgroup limit none /var/tmp
 +</​cli>​
 +
 +To disable quota support for a partition and all its subvolumes, use btrfs quota disable:
 +<cli prompt='#'>​
 +# btrfs quota disable /
 +</​cli>​
 +
 +
 +
 +
 +
 +==== RAID protection ====
  
 Defrag, relocate chunks with less than 5% of usage: Defrag, relocate chunks with less than 5% of usage:
Line 76: Line 236:
 </​cli>​ </​cli>​
  
- +<cli prompt='#'>​ 
-btrfs device replace +btrfs device replace 
- +</​cli>​
  
 Create a subvolume with compression Create a subvolume with compression
Line 127: Line 286:
 pre    | 180 |       | Wed Jun 27 11:54:39 2018 | root | number ​ | zypp(zypper) ​         | important=no ​ pre    | 180 |       | Wed Jun 27 11:54:39 2018 | root | number ​ | zypp(zypper) ​         | important=no ​
 </​cli>​ </​cli>​
 +
 +Delete snapshot
 +<cli prompt='#'>​
 +manu-opensuse:​~ # snapper delete 172
 +</​cli>​
 +
 +You can reduce it using the following command:
 +<cli prompt='#'>​
 +manu-opensuse:​~ # snapper set-config SPACE_LIMIT=0.2 NUMBER_LIMIT=2-6 NUMBER_LIMIT_IMPORTANT=4
 +</​cli>​
 +
 +===== BTRFS corruption =====
 +
 +Check data integrity on block and metadata level with repair if needed (using -B in background if needed)
 +<cli prompt='#'>​
 +# btrfs scrub start /backup
 +</​cli>​
 +
 +<cli prompt='#'>​
 +# btrfs scrub status /backup
 +UUID:             ​76fac721-2294-4f89-a1af-620cde7a1980
 +Scrub started: ​   Wed Apr 10 12:34:56 2023
 +Status: ​          ​running
 +Duration: ​        ​0:​00:​05
 +Time left:        0:00:05
 +ETA:              Wed Apr 10 12:35:01 2023
 +Total to scrub: ​  ​28.32GiB
 +Bytes scrubbed: ​  ​13.76GiB ​ (48.59%)
 +Rate:             ​2.75GiB/​s
 +Error summary: ​   no errors found
 +</​cli>​
 +
 +With some errors found:
 +<​code>​
 +Error summary: ​   csum=72
 +  Corrected: ​     2
 +  Uncorrectable: ​ 72
 +  Unverified: ​    0
 +</​code>​
 +
 +**btrfs check** seems to verify and optionally attempt repair of the structure of the filesystem. **btrfs scrub** verifies (and possibly repairs) the checksums of every data and metadata block
 +
 +Advanced check on a partition:
 +<cli prompt='#'>​
 +# btrfs check -p /dev/sda9
 +</​cli>​
 +
 +Check if the filesystem is in error, and indicate a progress bar:
 +<cli prompt='#'>​
 +# btrfs device stats /dev/sda3
 +[/​dev/​sda3].write_io_errs ​  0
 +[/​dev/​sda3].read_io_errs ​   0
 +[/​dev/​sda3].flush_io_errs ​  0
 +[/​dev/​sda3].corruption_errs 0
 +[/​dev/​sda3].generation_errs 0
 +</​cli>​
 +
 +===== script btrfs_size.sh =====
  
 <cli prompt='#'>​ <cli prompt='#'>​
Line 292: Line 509:
 </​cli>​ </​cli>​
  
-===== BTRFS Howto ===== 
- 
- 
- 
- 
- 
-# apt install btrfs-tools 
- 
-Utilisation de base 
- 
-Formater une partition : 
- 
-# mkfs.btrfs /dev/sda9 
- 
-Montage persistant (ajouter l’option ssd pour les disques SSD) : 
- 
-# echo "/​dev/​sda9 /backup btrfs defaults 0 0" >> /etc/fstab 
-# mount /backup 
- 
-Augmenter la taille d’une partition montée : 
- 
-# btrfs filesystem resize +42g /backup 
-<cli prompt='#'>​ 
-manu-opensuse:/​ # lsblk -a -o UUID,​NAME,​FSUSED,​FSTYPE 
-UUID                                   ​NAME ​                   FSUSED FSTYPE 
-                                       ​sda ​                           ​ 
-F926-FC70 ​                             ├─sda1 ​                   8.3M vfat 
-a2e132cf-d69c-448c-bc59-9e833bebb95c ​  ​├─sda2 ​                        ext3 
-a3da64e9-f198-4cb2-adcd-01ec0541cba9 ​  ​├─sda3 ​                  36.6G btrfs 
-4c91d4e3-89f7-4b17-9507-84b17c69d777 ​  ​├─sda4 ​                  15.2G xfs 
-859cf5c6-a1ba-4711-98b2-387b8c2bd860 ​  ​├─sda5 ​                        swap 
-1z8s8i-WQL7-yutq-VKYE-cbBD-p1ZB-3dCuwo └─sda6 ​                        ​LVM2_member 
-35bfc2a9-a3c0-4eee-82a1-1f62ca52aad7 ​    ​├─libraryvg-vmlv ​     107.9G ext4 
- 
-manu-opensuse:/​ # cat /etc/fstab 
-UUID=a3da64e9-f198-4cb2-adcd-01ec0541cba9 ​ /             ​btrfs ​ defaults ​              ​0 ​ 0 
-UUID=a3da64e9-f198-4cb2-adcd-01ec0541cba9 ​ /var          btrfs  subvol=/​@/​var ​         0  0 
-UUID=07e198ed-18a3-41ed-9e48-bde82ead65fc ​ /​backup ​      ​btrfs ​ defaults,​compress ​     0  1 
-</​cli>​ 
- 
-Réduire la taille d’une partition montée : 
- 
-# btrfs filesystem resize -42g /backup 
- 
-subvolumes et snapshots 
- 
-Un subvolume est comparable à un simple répertoire (il peut contenir des fichiers et d’autres répertoires). Lorsque que l’on utilise Btrfs, il existe au moins un subvolume, le subvolume racine. 
- 
-# btrfs subvolume create /backup/aaa 
-# btrfs subvolume create /backup/bbb 
- 
-Liste des subvolumes disponibles : 
- 
-# btrfs subvolume list /backup/ 
- 
-Un snapshot est un intantané figé de toutes les données contenues dans un subvolume. Si par exemple vous disposez deux fichiers (“foo” et “bar”) dans un subvolume, un snapshot avant la suppression d’un de ces deux vous permettra de le récupérer dans ce snapshot. 
- 
-    Note : Un snapshot n’est pas une sauvegarde, il s’appuie sur le mécanisme de copy-on-write de Btrfs. Il partage donc les mêmes blocs de données. Ainsi, si les données sont endommagées,​ elles le seront aussi bien sur le snapshot que sur le subvolume. Cette fonctionnalité est utile pour conserver une ou plusieurs copies locales qui peuvent enuite être utilisées pour effectuer un rollback ou une sauvegarde à partir de l’état figé d’un subvolume. 
- 
-Créer un snapshot : 
- 
-# btrfs subvolume snapshot /backup/aaa /​backup/​bbb/​snapshot1 
- 
-Supprimer un subvolume (et snapshot) : 
- 
-# btrfs subvolume delete /​bbb/​bbb/​snapshot1 
- 
-Lister les propriétés d’un subvolume : 
- 
-# btrfs property list -ts /​path/​to/​subvolume 
- 
-Passer un subvolume en RW : 
- 
-# btrfs property set -ts /​path/​to/​subvolume ro false 
- 
-Passer un subvolume en RO : 
- 
-# btrfs property set -ts /​path/​to/​subvolume ro true 
- 
-Manipulations d’un subvolume 
- 
-Pour déplacer un subvolume, il faut créer un snapshot en read-only du subvolume que l’on souhaite déplacer/​renommer puis supprimer l’original. 
- 
-# btrfs sub snap -r /​path/​to/​subvolume /​path/​to/​snapshot 
-# btrfs subvolume delete /​path/​to/​subvolume 
- 
-On passera ensuite le volume en RO/RW : 
- 
-# btrfs property set -ts /​path/​to/​snapshot ro false 
- 
-Envoyer un subvolume 
- 
-Pour transférer un subvolume vers un autre serveur, il faut créer un snapshot en RO du subvolume en question. 
- 
-# btrfs sub snap -r /​path/​to/​subvolume /​path/​to/​snapshot-RO 
- 
-On peut ensuite envoyer le volume via SSH : 
- 
-# btrfs send /​path/​to/​snapshot-RO | ssh root@192.0.2.1 "btrfs receive /​path/​to/​remote-snapshot"​ 
- 
-Compression 
- 
-On peut monter avec l’option compress=zlib ou compress=lzo pour activer une compression à la volée des fichiers. Si le volume avant n’avait pas l’option compress on pourra tout recompresser avec btrfs filesystem defragment -czlib ou -clzo. 
-Maintenance 
- 
-Vérifier l’intégrité d’un subvolume avec l’opération scrub qui lance une lecture de l’ensemble des données et métadonnées du système de fichiers et utilise les sommes de contrôle pour identifier et réparer les données corrompues éventuelles : 
- 
-# btrfs scrub start /backup/ 
-# btrfs scrub status /backup/ 
- 
-Vérification plus poussée sur une partition non montée : 
- 
-# btrfs check -p /dev/sda9 
- 
-Voir si la partition a présenté des erreurs : 
  
-# btrfs dev stats /backup 
linux/btrfs.1609771126.txt.gz · Last modified: 2021/01/04 15:38 by manu