Backups are the lifeblood of any homelab or small server. I usually run a nightly rsync job that copies hundreds of gigabytes from a production NFS share to a local Btrfs snapshot. On a 4‑core workstation the job is usually a quiet background task, but sometimes the process spikes to 100 % CPU and the terminal I use to monitor the job freezes. The culprit is often the default scheduling class and priority that rsync inherits from the shell.
Welcome to the Café
Explore the world of Linux with clear, approachable guides. Whether you’re just starting out or looking to sharpen your skills, you’ll find something to brew your interest here.
Why my headphone jack stopped working after the latest update—and how a single udev rule brought it back
Headphone jack gone silent after the 2026‑04 kernel update
I was mid‑streaming a podcast when the sound just… vanished. My 3.5 mm jack had been a reliable work‑horse for years, but after pulling the 5.15.12‑arch kernel I got nothing. The driver was still loaded, aplay -l still listed the jack, but the audio was dead. Turns out the culprit was a subtle tweak in ALSA’s power‑management for the HDA codec. A single udev rule and the jack was back in seconds.
How I Configured Caddy as a Reverse Proxy for My Home Lab and Solved the HTTPS Redirect Bug
Setting up Caddy as a reverse proxy for my home lab
I’ve been juggling a Plex server, Nextcloud, and a little Go API all on the same Ubuntu 24.04 box. The goal was simple: a tidy public URL for each service, automatic HTTPS, and as little upkeep as possible. Caddy 2.7 fit the bill perfectly—its ACME integration is a one‑liner, and it ships with HTTP/2 out of the box.
1. Install Caddy
sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | \
sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] \
https://dl.cloudsmith.io/public/caddy/stable/deb/debian any main" | \
sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
Caddy boots as a systemd service automatically. Just double‑check that it’s listening on the web ports:
[Read More]How I Prevented a Rootless Podman Container From Filling My Disk With Logs
The Problem
Running a rootless Podman container on a home‑lab server is great for isolation, but the logs it spits out can quietly eat up disk space. I once had a simple nginx container that, after a few days, filled a 20 GB SSD with log files. The container was running as my normal user, so I couldn’t just rm -rf /var/lib/containers/... without risking a permission error. The real issue was that Podman, by default, writes container stdout/stderr to files under /var/lib/containers/storage/overlay-containers/.../files/var/log/ and those files never rotate.
Recovering a single config file from a corrupted Borg backup without restoring the whole archive
Recover a single file from a damaged Borg archive
When a Borg repository gets corrupted, the instinct is to dump the whole thing back. That’s usually overkill if you just need one config file. Borg actually gives you a fine‑grained extraction tool that can pull a single file even from a partially broken archive.
1. Verify the repository
borg check /srv/backups/myrepo
borg check will surface any integrity problems. If you see corruption, you can try to fix it:
Running My Home NAS Backups with `nice` and `ionice` So My Desktop Never Freezes
Running a nightly backup from a home NAS to a desktop is a common task, but the copy can still hog the machine’s resources and make the UI feel sluggish.
The trick is to let the backup run with low CPU and I/O priority so the desktop stays responsive. Two simple tools—nice and ionice—are all you need.
Why the problem matters
When a rsync or tar job copies gigabytes of data, the kernel’s scheduler keeps the process in the foreground class. Even if you’re not actively using the machine, the backup can consume CPU cycles and saturate the disk queue. On a laptop or a desktop with a single NVMe drive, this shows up as a frozen terminal, delayed window redraws, or a sluggish browser.
Using a systemd path unit to clean my home server’s cache when disk space hits 90%
When the disk is almost full
I’ve run a handful of home‑servers for years, and the first thing that usually trips you up is a suddenly full disk.
Caches from apt, Docker, Flatpak, and the like can balloon without you noticing.
A quick, automated cleanup that only kicks in when the root filesystem is >90 % used keeps the system sane without you having to remember to run a script every week.
How I Stopped /var/log from Flooding the Root Filesystem with Systemd Journal Rotations
On a small home‑lab server or a single‑user laptop, the root filesystem is often the first place that runs out of space. I ran into this on a 2025‑era Raspberry Pi running Ubuntu 24.04 LTS: the systemd journal kept growing until the root partition hit 95 % and the machine refused to boot. The fix was surprisingly simple once you understand how systemd‑journald works and how to steer its output away from the root filesystem.
[Read More]Fixing the “root=UUID not found” error after cloning an SSD with Clonezilla
When Clonezilla says root=UUID not found
Cloning a bootable SSD with Clonezilla is usually painless, but the new machine can stall at the kernel prompt with:
root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx not found
The kernel can’t locate the root filesystem because the UUIDs in the boot configuration still point to the original disk. The fix is a handful of targeted edits and rebuilds.
1. Verify the new UUIDs
Boot from a live USB, open a terminal and list the block devices:
[Read More]Rootless Podman Container Drops Its Persistent Volume After a Reboot: A Quick Fix for My HomeLab 🚀
Running containers without root is a lifesaver, but I hit a snag the other night. I had a small database container that wrote data to a named volume, and the next time I rebooted my machine the data was gone. Turns out the volume directory was being created under a transient mount that didn’t survive shutdown.
Why the Volume Vanishes
In rootless mode Podman keeps everything under ~/.local/share/containers/storage. When you do podman volume create, it records the mount point in a JSON file there. On reboot the user‑session systemd instance that owns the rootless runtime comes back up, but systemd doesn’t automatically remount the user‑created volumes unless you tell it to. The result? The container starts, and the volume looks like a fresh empty directory.