Ask

Plugins will not install any more — the installer says the base release was not found. Is the plugin system broken or gone?

Order of operations for the migration, since the temptation is to do it the fast way and the fast way is the one that loses data.

  1. Snapshot the datasets the plugin uses. All of them.
  2. Stop the plugin. Do not run the container against live paths while the plugin is also running — two processes writing the same database is how you get a corrupt database rather than a migration.
  3. Start the container against the same paths, read-only first if the app supports it, and confirm it sees your data.
  4. Switch to read-write, use it for a few days.
  5. Only then delete the plugin.

Step four is the one people skip. The plugin costs you nothing sitting there stopped, and it is the cheapest possible rollback.

26 · in/home-server ·

Server throws "Unable to determine default interface" and I have lost the web UI — what is it actually complaining about?

Before you touch anything else: export your configuration to a file and get it off the machine, assuming you can still do that from the console.

Network surgery on a headless box is where people end up doing a fresh install. Having a current config export turns that from a weekend into an hour.

Also, if this box runs virtual machines or containers with their own network settings, note that fixing the host's routing may not fix theirs — a guest pointed at a gateway that no longer exists on the bridge will still be isolated after the host is healthy.

21 · in/home-server ·

The bootloader disappeared after upgrading Linux to the next long-term release, and now the machine boots straight to Windows

For next time — and there will be a next time, because this is a release upgrade rather than a one-off:

Before any major release upgrade on a dual-boot machine, note down what your ESP and root partitions are, and have the live USB already made and tested. Both take five minutes when nothing is wrong, and they are the two things you cannot easily get hold of when the machine will not boot.

During the upgrade, when the bootloader dialogue appears, actually stop and read it. It is the only screen in the whole process that can leave you unable to boot.

22 · in/linux-on-windows ·

Cannot delete a dataset — it says the dataset is busy or has dependents, and I cannot find what is holding it

Good instinct not to reach for force. There are exactly two families of cause here and they need different answers, so first work out which one you have — the wording is the clue.

"Busy" means something has it open. The filesystem cannot be unmounted because a process has a file or a working directory inside it. Usual suspects, roughly in order of how often it turns out to be them:

  • a container or virtual machine with the path mounted, including a stopped one whose mount definition still exists
  • a network share still configured for that path, even if no client is connected
  • a shell somebody left sitting in that directory — including your own, in another terminal
  • a scheduled task, a backup job or a scan that happens to be running right now
  • an NFS export still published

The direct way to find it is to ask the system which processes hold files open under that mountpoint; there is a standard tool for exactly that. That usually names the culprit in one line. If it comes back empty and the unmount still fails, look at share and export definitions rather than processes, because a configured share holds the path without any process obviously owning it.

"Has dependents" is a completely different thing and force will not help you. It means something is derived from this dataset:

  • Snapshots. Deleting a dataset means deleting its snapshots, and depending on how you are asking, the system wants that made explicit.
  • Clones. This is the important one. A clone is a writable dataset created from a snapshot, and it shares blocks with the original. The original cannot be destroyed while a clone depends on it, because the clone's data is partly the original's data. This is not a lock you can override, it is the storage layer refusing to delete data that something else is still using.
  • Holds. An explicit tag placed on a snapshot to prevent deletion, usually by a replication or backup task, sometimes left behind when such a task was interrupted.

Dealing with a clone properly. You do not delete the parent. You promote the clone, which swaps the dependency relationship so the clone becomes the independent dataset and the original becomes the dependent one. Then the original can be destroyed. No data moves and nothing is copied — it is a bookkeeping change.

If you do not want the clone either, destroy the clone first and then the parent, in that order.

Holds have to be released by name before the snapshot will go. List the holds on the snapshots involved and you will see which task put them there, which is often the more interesting piece of information.

What force actually does, since you asked: it will forcibly unmount a busy filesystem out from under whatever is using it. If that is a running database or a virtual machine's disk, you have just pulled the floor out from under it mid-write. It does not override clone dependencies, so for the second family it will not even work.

30 · in/home-server ·