BEs in a strange state after upgrade to 15.0

I updated from 14.3 to 15.0 with freebsd-upgrade in December 2025. Then to 15.0-p1 with
pkg upgrade, also in December 2025.

This is the current state of the system:

[ko@hn ~]$ freebsd-version -kru
15.0-RELEASE
15.0-RELEASE
15.0-RELEASE-p1
[ko@hn ~]$ uname -a
FreeBSD hn.verizon.net 15.0-RELEASE FreeBSD 15.0-RELEASE releng/15.0-n280995-7aedc8de6446 GENERIC amd64
[ko@hn ~]$

However I see

[ko@hn ~]$ bectl list
BE Active Mountpoint Space Created
14.3-RELEASE-p1_2025-08-14_191357 NR / 46.7G 2025-08-14 19:13
15.0-RELEASE-p1_2025-12-20_122459 - - 473M 2025-12-20 12:24
15.0-RELEASE_2025-12-19_122937 - - 4.24M 2025-12-19 12:29
15.0-RELEASE_2025-12-20_115933 - - 3.96M 2025-12-20 11:59
default - - 22.8G 2024-07-02 16:00
[ko@hn ~]$

This seems weird. I must have done something wrong, but I don't know what.
 
I have something similar. I also upgrade this machine with freebsd-update and the active partition is named 14.3-RELEASE but it's running 15.0-RELEASE-p1. I never thought too much about it, just guessing that some names were automatically given by freebsd-update, for example, maybe when I ran freebsd-update to update the machine, it created a backup that I never needed and never used. (Sorry, I don't remember the names of the backups, every so often I clean them up and remove them, but I'm pretty sure at least one had 15 in its name).
 
[ko@hn ~]$ bectl list
BE Active Mountpoint Space Created
14.3-RELEASE-p1_2025-08-14_191357 NR / 46.7G 2025-08-14 19:13
15.0-RELEASE-p1_2025-12-20_122459 - - 473M 2025-12-20 12:24
15.0-RELEASE_2025-12-19_122937 - - 4.24M 2025-12-19 12:29
15.0-RELEASE_2025-12-20_115933 - - 3.96M 2025-12-20 11:59
default - - 22.8G 2024-07-02 16:00
[ko@hn ~]$
My opinions based on this and without knowing how you upgraded. I may be right, I may be wrong, I may be crazy :) I may not be exactly correct. Sorry if it gets long-winded.

You started with an install that created a BE named "default" dated 2024-07-02 (not sure what version it is but assuming it's a 14.x, maybe 14.0 that was upgraded to 14.3)
Then you ran freebsd-update one or more times and wound up creating the BE named 14.3-RELEASE-p1_2025-08-14_191357 (freebsd-update does this automatically by default) on 2025-08-14.
I think you than did "bectl activate 14.3-RELEASE-p1_2025-08-14_191357" (that's how you got the NR in the second column)
Now every time you reboot you are in that BE.
You did freebsd-update upgrade to 15.0 while booted into the BE named "14.3.......". That upgraded that specific BE to 15.0.
Then doing the freebsd-update install as part of the upgrade created the BE named 15.0-RELEASE_2025-12-19_122937, then subsequent freebsd-update installs to get to 15.0-p1 created the other BEs named "15.0...."

So why? My observation of behavior, not from looking at source.
freebsd-update creates a new BE BEFORE applying changes so when the command finishes, your current BE is the lates, and a new one represents before that. Take a look at the creation dates to get an idea of the flow.
How does freebsd-update create the name of the BE it creates? I'm not sure, but it appears to be based on either "what version is running" or "what the versioning for the update is".

If you had never activated the 14.3 BE, but stayed in "default" your BE named default would be 15.0-p1, and you would have a set of BEs named to correspond to every freebsd-update you ran.

Yes, it can get confusing, but for me it was:
freebsd-update updates into the currently running BE (default behavior)
freebsd-update creates a new BE before it applies any updates

How I deal with it?
I bectl rename things after freebsd-update, and bectl destroy old/outdated BEs.
Example:
you bectl rename 14.3-RELEASE-p1_2025-08-14_191357 15.0-RELEASE-p0 to reflect that BE actual contents
you can probably bectl destroy -o 15.0-RELEASE-p1_2025-12-20_122459 15.0-RELEASE_2025-12-19_122937 15.0-RELEASE_2025-12-20_115933
then figure out what is in the BE named default (bectl mount default, then you can run strings on the kernel image in that temp mount) and bectl rename default
 
My opinions based on this and without knowing how you upgraded. I may be right, I may be wrong, I may be crazy :) I may not be exactly correct. Sorry if it gets long-winded.

You started with an install that created a BE named "default" dated 2024-07-02 (not sure what version it is but assuming it's a 14.x, maybe 14.0 that was upgraded to 14.3)
Then you ran freebsd-update one or more times and wound up creating the BE named 14.3-RELEASE-p1_2025-08-14_191357 (freebsd-update does this automatically by default) on 2025-08-14.
I think you than did "bectl activate 14.3-RELEASE-p1_2025-08-14_191357" (that's how you got the NR in the second column)
Now every time you reboot you are in that BE.
Yes, I'm pretty sure that's what I did!
You did freebsd-update upgrade to 15.0 while booted into the BE named "14.3.......".
Yes, very likely so.
That upgraded that specific BE to 15.0.
Then doing the freebsd-update install as part of the upgrade created the BE named 15.0-RELEASE_2025-12-19_122937, then subsequent freebsd-update installs to get to 15.0-p1 created the other BEs named "15.0...."
Right, except the -p1 was made with pkg upgrade. Don't know if that makes any difference.
So why? My observation of behavior, not from looking at source.
freebsd-update creates a new BE BEFORE applying changes
Yes, it gives a message saying that it's making a backup of the current BE.
so when the command finishes, your current BE is the lates, and a new one represents before that. Take a look at the creation dates to get an idea of the flow.
How does freebsd-update create the name of the BE it creates? I'm not sure, but it appears to be based on either "what version is running" or "what the versioning for the update is".

If you had never activated the 14.3 BE, but stayed in "default" your BE named default would be 15.0-p1, and you would have a set of BEs named to correspond to every freebsd-update you ran.
Well, I would hope so.
Yes, it can get confusing, but for me it was:
freebsd-update updates into the currently running BE (default behavior)
freebsd-update creates a new BE before it applies any updates

How I deal with it?
I bectl rename things after freebsd-update, and bectl destroy old/outdated BEs.
Example:
you bectl rename 14.3-RELEASE-p1_2025-08-14_191357 15.0-RELEASE-p0 to reflect that BE actual contents
you can probably bectl destroy -o 15.0-RELEASE-p1_2025-12-20_122459 15.0-RELEASE_2025-12-19_122937 15.0-RELEASE_2025-12-20_115933
then figure out what is in the BE named default (bectl mount default, then you can run strings on the kernel image in that temp mount) and bectl rename default
Thanks, the bectl mount was very useful, I hadn't thought of that. Here is what happens:

[ko@hn ~]$ sudo bectl mount default /mnt
/mnt
[ko@hn ~]$
[ko@hn ~]$ /mnt/bin/freebsd-version
14.2-RELEASE-p3
[ko@hn ~]$

So "default" is pretty old. Now I did

ko@hn ~]$ sudo bectl mount 15.0-RELEASE-p1_2025-12-20_122459 /mnt
/mnt
[ko@hn ~]$ /mnt/bin/freebsd-version
15.0-RELEASE-p1
[ko@hn ~]$
[ko@hn ~]$

So it looks like I should (a) destroy "default", (b) rename the -p1 BE to "default", and (c) activate default, yes?
 
So it looks like I should (a) destroy "default", (b) rename the -p1 BE to "default", and (c) activate default, yes?
Maybe :)
My preference/what I do is don't have a BE named default.
Why? Because in the boot loader it means nothing.
Here's what I wind up having
bectl list
BE Active Mountpoint Space Created
14.3-RELEASE-p6 - - 5.35G 2025-07-18 12:31
15.0-RELEASE-p0 - - 96.0M 2025-12-20 07:56
15.0-RELEASE-p1 NR / 20.2G 2025-12-06 13:01

Basically I rename BE's to what they actually are and agressively trim the timestamped autogenerated ones.
If I were to do things on your system, I would
bectl rename 14.3-RELEASE-p1_2025-08-14_191357 15.0-RELEASE-p1 and leave it as the active (NR)
bectl destroy -o all the others.
I follow quarterly packages, so I will typically "bectl create" before I pkg upgrade so I can rollback.
 
Maybe :)
My preference/what I do is don't have a BE named default.
Why? Because in the boot loader it means nothing.
Here's what I wind up having
bectl list
BE Active Mountpoint Space Created
14.3-RELEASE-p6 - - 5.35G 2025-07-18 12:31
15.0-RELEASE-p0 - - 96.0M 2025-12-20 07:56
15.0-RELEASE-p1 NR / 20.2G 2025-12-06 13:01

Basically I rename BE's to what they actually are and agressively trim the timestamped autogenerated ones.
If I were to do things on your system, I would
bectl rename 14.3-RELEASE-p1_2025-08-14_191357 15.0-RELEASE-p1 and leave it as the active (NR)
bectl destroy -o all the others.
I follow quarterly packages, so I will typically "bectl create" before I pkg upgrade so I can rollback.
OK, I'm convinced :). Thanks very much for all your help.
 
Back
Top