diff --git a/README.md b/README.md index aaf2f50..0cb497f 100644 --- a/README.md +++ b/README.md @@ -126,3 +126,58 @@ Make the changes to `/usr` persist reboots ```bash rpm-ostree usroverlay --hotfix ``` + +## encrypted BTRFS on ssd-like disk maintenance/health + +It is **very** important for performance to have trimming working. To test it +run the below to trim all mounted filesystems (can take long time, like over +10,20 minutes) (if root disk is not trimmed, it have discard not enabled at +some level): + +```bash +fstrim -av +``` + +If trimming is not working, check the below: + +- `/etc/crypttab` if it have discard set for root +- `discard=async`, `discard=sync`, or `discard` flags set in `/etc/fstab` +- `lsblk -o +DISC-GRAN,DISC-MAX` - the additional columns should have non-zero values +- `cryptsetup luksDump /dev/nvme0n1p3` - if flag `allow-discards` is set +(optional but best way to make cryptsetup allow discards by default) + +Setting performance improving flags on luks volume: + +```bash +cryptsetup refresh \ + --allow-discards \ + --perf-no_read_workqueue \ + --perf-no_write_workqueue \ + --persistent \ + /dev/mapper/ +``` + +Arch wiki about workqueues: https://wiki.archlinux.org/title/Dm-crypt/Specialties#Disable_workqueue_for_increased_solid_state_drive_(SSD)_performance + +Recommended flags for btrfs volume mounting (compression flag optional, I guess): + +``` +noatime,space_cache=v2,discard=async,compress-force=zstd:1 +``` + +If for some reason `space_cache` is not set properly on volume mount, do this +, (fs need to be unmounted): + +- clear any v1 and v2 space_cache +- mount with space_cache=v2 flag +- check if flag is set correctly (maybe also create some file there?) + +```bash +btrfs check --clear-space-cache v1 /dev/mapper/ +btrfs check --clear-space-cache v2 /dev/mapper/ + +mount -o space_cache=v2 /dev/mapper/ /mnt +mount | grep space_cache +echo "hello" > /mnt/some/path/file.txt +umount /mnt +```