zram-size = min(ram, 8192) is Fedora's default since F34, where zram-fraction=1.0 with max-zram-size=8192 has run on desktops for five years. The previous min(ram / 2, 8192) halved that on every machine below 16G with nothing behind the fraction; at 16G and above the two already agree. A changed size only reaches a running device on the next boot, so the migration resizes an empty device now and asks for a reboot otherwise. It asks the generator what the config evaluates to rather than repeating the expression here, and does neither when the device already matches. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
39 lines
1.5 KiB
Bash
39 lines
1.5 KiB
Bash
echo "Resize zram to match the shipped config"
|
|
|
|
# 90-omarchy.conf changed the device size. The migration that first applied the
|
|
# zram tuning is one-shot, so machines that already ran it have the new file on
|
|
# disk and the old device still running; nothing would pick the size up until
|
|
# something else rebooted them.
|
|
|
|
zram_disksize=${OMARCHY_ZRAM_DISKSIZE:-/sys/block/zram0/disksize}
|
|
swaps=${OMARCHY_SWAPS:-/proc/swaps}
|
|
|
|
# The size is an expression, and the generator is the only thing that evaluates
|
|
# it. Ask it what the shipped config comes to rather than repeating the
|
|
# arithmetic here, where the two would drift apart on the next tuning change.
|
|
units=$(mktemp -d)
|
|
trap 'rm -rf "$units"' EXIT
|
|
desired_mb=$(/usr/lib/systemd/system-generators/zram-generator "$units" 2>&1 |
|
|
grep -oP '/dev/zram0 with \K[0-9]+') || true
|
|
|
|
actual_bytes=$(cat "$zram_disksize" 2>/dev/null) || actual_bytes=0
|
|
|
|
# A device already at the right size needs neither a restart nor a reboot,
|
|
# whether an earlier boot picked the config up or another user got here first.
|
|
if [[ -n $desired_mb && $actual_bytes == $((desired_mb * 1024 * 1024)) ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
if sudo systemctl daemon-reload; then
|
|
# Resizing swaps the device off first, which faults every stored page back
|
|
# into memory. That's only cheap while it's empty, so a device under
|
|
# pressure keeps its old size until the next boot.
|
|
zram_used=$(awk '$1 == "/dev/zram0" {print $4}' "$swaps")
|
|
|
|
if [[ ${zram_used:-0} == 0 ]] && sudo systemctl restart dev-zram0.swap; then
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
omarchy-state set reboot-required
|