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:53]
manu
linux:btrfs [2024/11/12 22:52] (current)
manu
Line 42: Line 42:
 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 /backup+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 49: Line 49:
 </​cli>​ </​cli>​
  
-Increase or reduce the partition size online:+Or
 <cli prompt='#'>​ <cli prompt='#'>​
-# btrfs filesystem ​resize -42g /backup+# 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>​ </​cli>​
  
-==== Convert an ext4 partition ​to BTRFS ==== +Increase or reduce the partition ​size online:
- +
-Make a backup before doing this operation (supported on ext2, 3, 4 and reiserfs)+
 <cli prompt='#'>​ <cli prompt='#'>​
-manu-opensuse:​~ ​# btrfs-convert /dev/<​device>​+# btrfs filesystem resize ​-42g /backup
 </​cli>​ </​cli>​
  
-===== Avanced functions ===== +To prevent device from changing name, you can also use the UUIDwhich is persistent name
- +
-==== Sub-volumes ==== +
- +
-A subvolume is a part of filesystem with its own independent file/​directory hierarchy. Subvolumes ​can share file extents. A snapshot is also subvolumebut with given initial content of the original subvolume. +
- +
- +
-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='#'>​ <cli prompt='#'>​
 manu-opensuse:/​ # lsblk -a -o UUID,​NAME,​FSUSED,​FSTYPE manu-opensuse:/​ # lsblk -a -o UUID,​NAME,​FSUSED,​FSTYPE
Line 97: Line 95:
 UUID=07e198ed-18a3-41ed-9e48-bde82ead65fc ​ /​backup ​      ​btrfs ​ defaults,​compress ​     0  1 UUID=07e198ed-18a3-41ed-9e48-bde82ead65fc ​ /​backup ​      ​btrfs ​ defaults,​compress ​     0  1
 </​cli>​ </​cli>​
 +==== Convert an ext4 partition to BTRFS ====
  
 +Make a backup before doing this operation (supported on ext2, 3, 4 and reiserfs)
 +<cli prompt='#'>​
 +manu-opensuse:​~ # btrfs-convert /​dev/<​device>​
 +</​cli>​
  
-subvolumes et snapshots+===== Avanced functions =====
  
-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.+==== Sub-volumes ====
  
 +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.
 +
 +=== 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.
 +<cli prompt='#'>​
 # btrfs subvolume create /backup/aaa # btrfs subvolume create /backup/aaa
 # btrfs subvolume create /backup/bbb # btrfs subvolume create /backup/bbb
 +</​cli>​
  
-Liste des subvolumes ​disponibles ​+List available ​subvolumes ​on /backup
 +<cli prompt='#'>​
 # btrfs subvolume list /backup/ # btrfs subvolume list /backup/
 +</​cli>​
  
-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 : snapshot ​is a copy-on-write ​of Btrfs. ​It shares the same blocks as the filesystemIt doesn'​t preserve in case of corruption.
- +
-    ​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éesAinsi, si les données sont endommagées,​ elles le seront aussi bien sur le snapshot que sur le subvolumeCette 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 :+
  
 +Create a snapshot :
 +<cli prompt='#'>​
 # btrfs subvolume snapshot /backup/aaa /​backup/​bbb/​snapshot1 # btrfs subvolume snapshot /backup/aaa /​backup/​bbb/​snapshot1
 +</​cli>​
  
-Supprimer un subvolume (et snapshot) : +Suppress a subvolume (and those snapshots) : 
 +<cli prompt='#'>​
 # btrfs subvolume delete /​bbb/​bbb/​snapshot1 # btrfs subvolume delete /​bbb/​bbb/​snapshot1
 +</​cli>​
  
-Lister les propriétés d’un ​subvolume : +List properties of subvolume : 
 +<cli prompt='#'>​
 # btrfs property list -ts /​path/​to/​subvolume # btrfs property list -ts /​path/​to/​subvolume
 +</​cli>​
  
-Passer un subvolume ​en RW : +Put a subvolume ​in RW: 
 +<cli prompt='#'>​
 # btrfs property set -ts /​path/​to/​subvolume ro false # btrfs property set -ts /​path/​to/​subvolume ro false
 +</​cli>​
  
-Passer un subvolume ​en RO : +Put a subvolume ​in RO: 
 +<cli prompt='#'>​
 # btrfs property set -ts /​path/​to/​subvolume ro true # btrfs property set -ts /​path/​to/​subvolume ro true
 +</​cli>​
  
-Manipulations d’un ​subvolume+=== 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. 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 sub snap -r /​path/​to/​subvolume /​path/​to/​snapshot
 # btrfs subvolume delete /​path/​to/​subvolume # btrfs subvolume delete /​path/​to/​subvolume
 +</​cli>​
  
 On passera ensuite le volume en RO/RW : On passera ensuite le volume en RO/RW :
 +<cli prompt='#'>​
 # btrfs property set -ts /​path/​to/​snapshot ro false # btrfs property set -ts /​path/​to/​snapshot ro false
 +</​cli>​
  
 Envoyer un subvolume Envoyer un subvolume
  
 Pour transférer un subvolume vers un autre serveur, il faut créer un snapshot en RO du subvolume en question. 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 # btrfs sub snap -r /​path/​to/​subvolume /​path/​to/​snapshot-RO
 +</​cli>​
  
-On peut ensuite envoyer le volume via SSH +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"​ # btrfs send /​path/​to/​snapshot-RO | ssh root@192.0.2.1 "btrfs receive /​path/​to/​remote-snapshot"​
 +</​cli>​
  
 Compression Compression
Line 160: Line 178:
 Maintenance 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 :+==== Quota for Subvolumes ====
  
-# btrfs scrub start /backup/ +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:
-# btrfs scrub status ​/backup/+
  
-Vérification plus poussée sur une partition non montée ​:+Enable quota support: 
 +<cli prompt='#'>​ 
 +# btrfs quota enable / 
 +</​cli>​
  
-# btrfs check -p /dev/sda9+Get a list of subvolumes:​ 
 +<cli prompt='#'>​ 
 +# btrfs subvolume list / 
 +</cli>
  
-Voir si la partition a présenté des erreurs :+Quotas can only be set for existing subvolumes.
  
-# btrfs dev stats /backup+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>​
  
-==== Snapshoting ====+TipTip: Nullifying a Quota
  
-==== Compression ====+In case you want to nullify an existing quota, set a quota size of none: 
 +<cli prompt='#'>​ 
 +# btrfs qgroup limit none /var/tmp 
 +</​cli>​
  
-==== RAID protection ====+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 196: Line 236:
 </​cli>​ </​cli>​
  
- +<cli prompt='#'>​ 
-btrfs device replace +btrfs device replace 
- +</​cli>​
  
 Create a subvolume with compression Create a subvolume with compression
Line 247: 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='#'>​
linux/btrfs.1609771999.txt.gz · Last modified: 2021/01/04 15:53 by manu