meta data for this page
  •  

Differences

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

Link to this comparison view

Next revision
Previous revision
linux:fs:btrfs:maintenance [2020/06/02 19:34] – created niziaklinux:fs:btrfs:maintenance [2025/01/03 07:52] (current) niziak
Line 1: Line 1:
 ====== BTRFS Maintenance scripts ====== ====== BTRFS Maintenance scripts ======
  
 +===== btrfsmaintenance =====
  
 +<code bash>
 +apt install btrfsmaintenance
 +</code>
 +
 +<file sh /etc/default/btrfsmaintenance>
 +BTRFS_TRIM_PERIOD="weekly"
 +</file>
 +
 +<code bash>
 +systemctl restart btrfsmaintenance-refresh
 +
 +#systemctl enable btrfs-scrub.timer btrfs-trim.timer
 +#systemctl start btrfs-trim.service
 +#systemctl start btrfs-scrub.service
 +</code>
 +===== Defragment =====
 +From [[https://helmundwalter.de/blog/btrfs-finding-and-fixing-highly-fragmented-files/|BTRFS fragmentation can hurt the performance of your System]]
 +
 +Find the most fragmented files on your System:
 +
 +<code bash>
 +find / -xdev -type f| xargs filefrag 2>/dev/null | sed 's/^\(.*\): \([0-9]\+\) extent.*/\2 \1/' | awk -F ' ' '$1 > 500' | sort -n -r | head -30
 +</code>
 +
 +You should review this list. If there is something with 10000+ extends, it is a candidate to be flagged as nodatacow. In my case, I have discovered that the fail2ban sqlite database was using 170k extends which is a lot!
 +
 +<code bash>
 +find / -xdev -type f| xargs filefrag 2>/dev/null | sed 's/^\(.*\): \([0-9]\+\) extent.*/\2 \1/' | awk -F ' ' '$1 > 500' | cut -f ' ' -f2 2>/dev/null | xargs -r btrfs -v fi defrag -f -czstd
 +</code>
 +
 +
 +===== Headline =====
 +
 +<file bash /usr/local/bin/btrfsQuota.sh>
 +#!/bin/bash
 +[[ ! -d $1 ]] && { echo Please pass mountpoint as first argument >&2 ;
 +exit 1 ; }
 +
 +while read x i x g x x l x p
 +do
 +    volName[i]=$p
 +done < <(btrfs subvolume list $1)
 +
 +while read g r e
 +do
 +    [[ -z $name ]] && echo -e "subvol\tqgroup\ttotal\tunshared"
 +    group=${g##*/}
 +    [[ ! -z ${volName[group]} ]] && name=${volName[group]} || name='(unknown)'
 +    echo $name $g `numfmt --to=iec $r` `numfmt --to=iec $e`
 +done < <(btrfs qgroup show --raw $1 | tail -n+3) | column -t
 +</file>
  
  
Line 8: Line 60:
 To solve ''After deleting a subvolume, you must manually delete the associated qgroup.'' mentioned here: [[https://btrfs.wiki.kernel.org/index.php/Quota_support#Known_issues]] To solve ''After deleting a subvolume, you must manually delete the associated qgroup.'' mentioned here: [[https://btrfs.wiki.kernel.org/index.php/Quota_support#Known_issues]]
  
-<file bash /usr/local/bin/btrfQGroupClean.sh>+<file bash /usr/local/bin/btrfsQGroupClean.sh>
 #!/bin/bash #!/bin/bash
  
Line 29: Line 81:
  
 <file cron crontab> <file cron crontab>
-@daily /usr/local/bin/btrfQGroupClean.sh+@daily /usr/local/bin/btrfsQGroupClean.sh
 </file> </file>