Every Linux release reaches end-of-life on a published date, and on that date the security patches stop. For a budget server the interesting question is not whether to upgrade but when: do it early and you burn a weekend on a version too new to have third-party support, do it late and you run an unpatched box that your provider may eventually suspend. There is a window of a few months in which the upgrade is cheap, and outside it the same task becomes either risky or urgent. Scheduling that window is a cost decision with a computable answer. Plan the version you will land on using the budget VPS comparison table, because standard image availability varies by provider and directly sets how much manual work the upgrade costs.
The three costs of an upgrade
An OS major-version upgrade — Debian 11 to 12, Ubuntu 22.04 to 24.04, AlmaLinux 8 to 9 — has three separable costs. Only one of them is usually discussed.
- Direct time. The hours of doing it: image rebuild, package reinstall, config migration, testing. Typically 2–6 hours for a small server with a handful of services.
- Exposure risk. The chance that something breaks and the server is degraded for hours or days. This rises steeply if you upgrade in the first weeks after a release, while package maintainers are still catching up.
- Unpatched risk. After end-of-life, every new vulnerability is permanently open. This is zero before the EOL date and grows without bound after it.
The optimum sits between the two risks: late enough that the ecosystem has stabilised, early enough that you still have months of patch coverage.
The scheduling rule
A practical rule that works across distributions:
Upgrade target: 4–7 months after the new release’s .0 date, and no later than 12 months before the current version’s EOL.
Both bounds matter. The lower bound avoids the early-adopter period, when a package you depend on may not have a build for the new release. The upper bound leaves real margin — you want to be operating on a supported release, not counting down to the last patch.
| Release cadence | Example | Typical support window | Upgrade window opens |
|---|---|---|---|
| 2 years, 5 years support | Ubuntu LTS | 60 months | ~24 months after release |
| 2 years, 5 years support | Debian stable | ~60 months | ~30 months after release |
| ~3 years, 10 years support | RHEL-clone | ~120 months | ~60 months after release |
The exact numbers matter less than writing the date down. A server acquired on a budget plan often arrives with whatever image the provider defaults to, and that image may already be a year into its life when you receive it.
Rebuild or in-place
There are two ways to do the upgrade and their cost profiles are opposites.
- Clean rebuild. Provision a new server on the new release, install the stack from scratch, migrate data, cut over. Higher setup cost, lower breakage risk, and it doubles as a tested disaster-recovery exercise. Requires provider support for in-place rebuild or a parallel server.
- In-place upgrade. Run the distribution’s upgrade tool on the existing server. Lower setup cost, higher breakage risk, no clean rollback, and it silently carries forward years of accumulated configuration and abandoned packages.
For a small budget server, the clean rebuild is usually the cheaper option once you count the cost of a failed in-place upgrade. It also cleanly resets the drift that accumulates in any long-lived box. The catch is that it needs either a second server for a few hours or a provider snapshot you can revert to, so check that capability before you need it.
Pricing the deferral
Deferring is not free even though it costs no money today. Put a rough value on the unpatched risk to make it comparable:
Deferral cost ≈ (chance of a serious vulnerability in a given month) × (cost if it happens) × months deferred
For a public-facing server on a budget plan, the chance of a remotely exploitable serious flaw in any given six-month stretch is high enough that the expected cost quickly exceeds the hours a rebuild would take. For an internal box behind a firewall with no public services, the arithmetic comes out the other way and deferral is defensible. The point is that the decision should be made per server, not per fleet.
The prerequisite work that makes it cheap
Everything that reduces upgrade cost is done before the upgrade, and most of it takes under an hour:
- Configuration in version control. If your config files are in a git repo, a rebuild is a checkout plus a deploy. If they are hand-edited, it is archaeology.
- Data separated from system. A database and uploads directory on their own volume moves with a copy, not a migration plan.
- Documented service inventory. A list of every service, its ports, its config path and its data path. Without this the rebuild discovers dependencies one failure at a time.
- A current, tested backup. The upgrade is the second-worst day to discover the backup is broken.
Those four items turn a 4-hour risky job into a 1-hour routine one. They cost a few hours once and are reusable at every future upgrade, which makes them the highest-leverage maintenance work available on a cheap server.
A calendar that costs nothing
Put two entries in your calendar per server when you provision it: one at the window opening date, one 90 days before the EOL date. The first is a reminder to plan the rebuild; the second is the point at which you stop planning and start executing, because after it you are working under time pressure. Both are free to create and both prevent the situation where the upgrade happens on a day the provider emails about an unsupported image.
If you run more than one server, stagger them. Never upgrade all of them in the same week — the whole point of having several is that one can be broken without taking everything down.
What to check before booking the window
Three facts decide whether the window is realistic: the current release’s EOL date, the target release’s image availability at your provider, and whether your critical packages have builds for the target. All three are public and checkable in ten minutes. The most common scheduling failure is a package with no build for the new release, discovered halfway through a rebuild.
When you next compare plans, treat the release a provider offers as part of the price: landing on a version with three years of support left is worth more than a marginally cheaper plan on an image with twelve months remaining. Check the current options and their default releases via the affordable VPS server research and provider notes, then book the window before the reminder becomes urgent.

