======================================= FreeBSD upgrade using bectl on ZFS ======================================= Upgrading with bectl takes full advantage of ZFS and requires only a single reboot to finish the process. I have used some extra commands to help highlight what is changing after each step. ======================================= TLDR upgrade to 14.0 --------------------------------------- root@freebsd:~ # bectl create 14.0 root@freebsd:~ # bectl mount 14.0 Successfully mounted 14.0 at /tmp/be_mount.FooK root@freebsd:~ # freebsd-update -b /tmp/be_mount.FooK -r 14.0-RELEASE upgrade root@freebsd:~ # freebsd-update -b /tmp/be_mount.FooK install root@freebsd:~ # freebsd-update -b /tmp/be_mount.FooK install root@freebsd:~ # mount -t devfs devfs /tmp/be_mount.FooK/dev root@freebsd:~ # pkg --chroot=/tmp/be_mount.FooK upgrade -fy root@freebsd:~ # umount /tmp/be_mount.FooK/dev root@freebsd:~ # freebsd-update -b /tmp/be_mount.FooK install root@freebsd:~ # bectl umount 14.0 root@freebsd:~ # bectl activate 14.0 Successfully activated boot environment 14.0 root@freebsd:~ # bectl rename default 14.0-RELEASE_2024-04-26_045501 root@freebsd:~ # bectl rename 14.0 default root@freebsd:~ # bectl list root@freebsd:~ # shutdown -r now ======================================= Typical install --------------------------------------- root@freebsd:~ # freebsd-version -kru 13.1-RELEASE 13.1-RELEASE 13.1-RELEASE root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created default zroot/ROOT/default NR / 585M 2024-04-26 10:40 root@freebsd:~ # zfs list -o name,canmount,mountpoint,creation -r zroot/ROOT NAME CANMOUNT MOUNTPOINT CREATION zroot/ROOT on none Fri Apr 26 10:40 2024 zroot/ROOT/default noauto / Fri Apr 26 10:40 2024 ======================================= Typical patch upgrade --------------------------------------- root@freebsd:~ # freebsd-update fetch root@freebsd:~ # freebsd-update install root@freebsd:~ # shutdown -r now root@freebsd:~ # freebsd-version -kru 13.1-RELEASE-p9 13.1-RELEASE-p9 13.1-RELEASE-p9 root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 73.7M 2024-04-26 14:48 default zroot/ROOT/default NR / 798M 2024-04-26 10:40 root@freebsd:~ # zfs list -o name,canmount,mountpoint,creation -r zroot/ROOT NAME CANMOUNT MOUNTPOINT CREATION zroot/ROOT on none Fri Apr 26 10:40 2024 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 noauto / Fri Apr 26 14:48 2024 zroot/ROOT/default noauto / Fri Apr 26 10:40 2024 ======================================= Typical minor upgrade --------------------------------------- root@freebsd:~ # freebsd-update -r 13.2-RELEASE upgrade root@freebsd:~ # freebsd-update install root@freebsd:~ # shutdown -r now root@freebsd:~ # freebsd-update install root@freebsd:~ # shutdown -r now root@freebsd:~ # freebsd-version -kru 13.2-RELEASE-p11 13.2-RELEASE-p11 13.2-RELEASE-p11 root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/default@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/default@2024-04-26-14:59:00-0 - - 1.19M 2024-04-26 14:59 default zroot/ROOT/default NR / 1.96G 2024-04-26 10:40 root@freebsd:~ # zfs list -o name,canmount,mountpoint,creation -r zroot/ROOT NAME CANMOUNT MOUNTPOINT CREATION zroot/ROOT on none Fri Apr 26 10:40 2024 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 noauto / Fri Apr 26 14:58 2024 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 noauto / Fri Apr 26 14:48 2024 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 noauto / Fri Apr 26 14:59 2024 zroot/ROOT/default noauto / Fri Apr 26 10:40 2024 ======================================= bectl minor upgrade --------------------------------------- root@freebsd:~ # bectl create 13.3 root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/default@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/default@2024-04-26-14:59:00-0 - - 1.20M 2024-04-26 14:59 13.3 zroot/ROOT/13.3 - - 8K 2024-04-26 23:29 zroot/ROOT/default@2024-04-26-23:29:30-0 - - 0 2024-04-26 23:29 default zroot/ROOT/default NR / 1.96G 2024-04-26 10:40 root@freebsd:~ # bectl mount 13.3 Successfully mounted 13.3 at /tmp/be_mount.GPGG root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/default@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/default@2024-04-26-14:59:00-0 - - 1.20M 2024-04-26 14:59 13.3 zroot/ROOT/13.3 - /tmp/be_mount.GPGG 120K 2024-04-26 23:29 zroot/ROOT/default@2024-04-26-23:29:30-0 - - 0 2024-04-26 23:29 default zroot/ROOT/default NR / 1.96G 2024-04-26 10:40 root@freebsd:~ # zfs list -o name,canmount,mountpoint,creation -r zroot/ROOT NAME CANMOUNT MOUNTPOINT CREATION zroot/ROOT on none Fri Apr 26 10:40 2024 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 noauto / Fri Apr 26 14:58 2024 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 noauto / Fri Apr 26 14:48 2024 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 noauto / Fri Apr 26 14:59 2024 zroot/ROOT/13.3 noauto / Fri Apr 26 23:29 2024 zroot/ROOT/default noauto / Fri Apr 26 10:40 2024 root@freebsd:~ # freebsd-update -b /tmp/be_mount.GPGG -r 13.3-RELEASE upgrade root@freebsd:~ # freebsd-update -b /tmp/be_mount.GPGG install root@freebsd:~ # freebsd-update -b /tmp/be_mount.GPGG install root@freebsd:~ # bectl umount 13.3 root@freebsd:~ # bectl activate 13.3 Successfully activated boot environment 13.3 root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/13.3@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/13.3@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/13.3@2024-04-26-14:59:00-0 - - 1.20M 2024-04-26 14:59 13.3 zroot/ROOT/13.3 R - 2.55G 2024-04-26 23:29 default zroot/ROOT/default N / 450M 2024-04-26 10:40 zroot/ROOT/13.3@2024-04-26-23:29:30-0 - - 440M 2024-04-26 23:29 root@freebsd:~ # bectl rename default 13.3-RELEASE_2024-04-26_232930 root@freebsd:~ # bectl rename 13.3 default root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/default@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/default@2024-04-26-14:59:00-0 - - 1.20M 2024-04-26 14:59 13.3-RELEASE_2024-04-26_232930 zroot/ROOT/13.3-RELEASE_2024-04-26_232930 N / 450M 2024-04-26 10:40 zroot/ROOT/default@2024-04-26-23:29:30-0 - - 440M 2024-04-26 23:29 default zroot/ROOT/default R - 2.55G 2024-04-26 23:29 root@freebsd:~ # shutdown -r now root@freebsd:~ # freebsd-version -kru 13.3-RELEASE-p1 13.3-RELEASE-p1 13.3-RELEASE-p2 root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/default@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/default@2024-04-26-14:59:00-0 - - 1.20M 2024-04-26 14:59 13.3-RELEASE_2024-04-26_232930 zroot/ROOT/13.3-RELEASE_2024-04-26_232930 - - 450M 2024-04-26 10:40 zroot/ROOT/default@2024-04-26-23:29:30-0 - - 440M 2024-04-26 23:29 default zroot/ROOT/default NR / 2.55G 2024-04-26 23:29 root@freebsd:~ # zfs list -o name,canmount,mountpoint,creation -r zroot/ROOT NAME MOUNTPOINT CREATION zroot/ROOT none Fri Apr 26 10:40 2024 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 / Fri Apr 26 14:58 2024 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 / Fri Apr 26 14:48 2024 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 / Fri Apr 26 14:59 2024 zroot/ROOT/13.3-RELEASE_2024-04-26_232930 / Fri Apr 26 10:40 2024 zroot/ROOT/default / Fri Apr 26 23:29 2024 ======================================= bectl major upgrade --------------------------------------- root@freebsd:~ # bectl create 14.0 root@freebsd:~ # bectl mount 14.0 Successfully mounted 14.0 at /tmp/be_mount.ws5T root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/default@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/default@2024-04-26-14:59:00-0 - - 1.20M 2024-04-26 14:59 13.3-RELEASE_2024-04-26_232930 zroot/ROOT/13.3-RELEASE_2024-04-26_232930 - - 450M 2024-04-26 10:40 zroot/ROOT/default@2024-04-26-23:29:30-0 - - 440M 2024-04-26 23:29 14.0 zroot/ROOT/14.0 - /tmp/be_mount.ws5T 8K 2024-04-26 23:50 zroot/ROOT/default@2024-04-26-23:50:05-0 - - 0 2024-04-26 23:50 default zroot/ROOT/default NR / 2.55G 2024-04-26 23:29 root@freebsd:~ # freebsd-update -b /tmp/be_mount.ws5T -r 14.0-RELEASE upgrade root@freebsd:~ # freebsd-update -b /tmp/be_mount.ws5T install root@freebsd:~ # freebsd-update -b /tmp/be_mount.ws5T install root@freebsd:~ # mount -t devfs devfs /tmp/be_mount.ws5T/dev root@freebsd:~ # pkg --chroot=/tmp/be_mount.ws5T upgrade -fy root@freebsd:~ # umount /tmp/be_mount.ws5T/dev root@freebsd:~ # freebsd-update -b /tmp/be_mount.ws5T install root@freebsd:~ # bectl umount 14.0 root@freebsd:~ # bectl activate 14.0 Successfully activated boot environment 14.0 root@freebsd:~ # bectl rename default 14.0-RELEASE_2024-04-26_235005 root@freebsd:~ # bectl rename 14.0 default root@freebsd:~ # bectl list -a E/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/default@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/default@2024-04-26-14:59:00-0 - - 1.20M 2024-04-26 14:59 13.3-RELEASE_2024-04-26_232930 zroot/ROOT/13.3-RELEASE_2024-04-26_232930 - - 450M 2024-04-26 10:40 zroot/ROOT/default@2024-04-26-23:29:30-0 - - 440M 2024-04-26 23:29 14.0-RELEASE_2024-04-26_235005 zroot/ROOT/14.0-RELEASE_2024-04-26_235005 N / 761M 2024-04-26 23:29 zroot/ROOT/default@2024-04-26-23:50:05-0 - - 481M 2024-04-26 23:50 default zroot/ROOT/default R - 3.06G 2024-04-26 23:50 root@freebsd:~ # shutdown -r now root@freebsd:~ # freebsd-version -kru 14.0-RELEASE-p6 14.0-RELEASE-p6 14.0-RELEASE-p6 root@freebsd:~ # bectl list -a BE/Dataset/Snapshot Active Mountpoint Space Created 13.1-RELEASE-p9_2024-04-26_145807 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 - - 8K 2024-04-26 14:58 zroot/ROOT/default@2024-04-26-14:58:07-0 - - 5.52M 2024-04-26 14:58 13.1-RELEASE_2024-04-26_144840 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 - - 8K 2024-04-26 14:48 zroot/ROOT/default@2024-04-26-14:48:40-0 - - 74.1M 2024-04-26 14:48 13.2-RELEASE-p11_2024-04-26_145900 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 - - 8K 2024-04-26 14:59 zroot/ROOT/default@2024-04-26-14:59:00-0 - - 1.20M 2024-04-26 14:59 13.3-RELEASE_2024-04-26_232930 zroot/ROOT/13.3-RELEASE_2024-04-26_232930 - - 450M 2024-04-26 10:40 zroot/ROOT/default@2024-04-26-23:29:30-0 - - 440M 2024-04-26 23:29 14.0-RELEASE_2024-04-26_235005 zroot/ROOT/14.0-RELEASE_2024-04-26_235005 - - 761M 2024-04-26 23:29 zroot/ROOT/default@2024-04-26-23:50:05-0 - - 481M 2024-04-26 23:50 default zroot/ROOT/default NR / 3.06G 2024-04-26 23:50 root@freebsd:~ # zfs list -o name,canmount,mountpoint,creation -r zroot/ROOT NAME MOUNTPOINT CREATION zroot/ROOT none Fri Apr 26 10:40 2024 zroot/ROOT/13.1-RELEASE-p9_2024-04-26_145807 / Fri Apr 26 14:58 2024 zroot/ROOT/13.1-RELEASE_2024-04-26_144840 / Fri Apr 26 14:48 2024 zroot/ROOT/13.2-RELEASE-p11_2024-04-26_145900 / Fri Apr 26 14:59 2024 zroot/ROOT/13.3-RELEASE_2024-04-26_232930 / Fri Apr 26 10:40 2024 zroot/ROOT/14.0-RELEASE_2024-04-26_235005 / Fri Apr 26 23:29 2024 zroot/ROOT/default / Fri Apr 26 23:50 2024 ======================================= If you make a mistake just start over --------------------------------------- root@freebsd:~ # bectl umount 12.3 root@freebsd:~ # bectl destroy 12.3 root@freebsd:~ # bectl create 13.3 root@freebsd:~ # bectl mount 13.3 ======================================= References & Inspiration --------------------------------------- https://docs.freebsd.org/en/books/handbook/cutting-edge/ https://man.freebsd.org/cgi/man.cgi?query=bectl https://man.freebsd.org/cgi/man.cgi?query=freebsd-update https://herrhotzenplotz.de/nico/readme.be-install =======================================