openSUSE / sdbootutil

MIT License
27 stars 14 forks source link

/usr/bin/sdbootutil: line 1270: 1: parameter null or not set -- updates hang after snapshots disappeared between updates #164

Open dezza opened 13 hours ago

dezza commented 13 hours ago

Hello. New user to Tumbleweed. My bootloader is systemd-boot.

Recently snapshots disappeared from my system in-between updates and I got this error when trying to list snapshots snapper list:

ERROR
No snapper configurations exist.

Then created new config as it was gone.

sudo snapper -c root create-config /

A new issue appeared shortly thereafter.. I had seen this line creep up in-between some updates:

/usr/bin/sdbootutil: line 1270: 1: parameter null or not set

But I didn't think much of it, I thought it might be a minor issue as sometimes happens in package scripts. However when updates started failing and hanging on plymouth, openSUSE-release and plymouth-dracut with:

(1/1) Installing: plymouth-22.02.122+180.b1d5aa9-4.1.x86_64 ..............................................................................................................[done]
%posttrans(plymouth-22.02.122+180.b1d5aa9-4.1.x86_64) script output:
/usr/bin/sdbootutil: line 1270: 1: parameter null or not set

I became concerned. Now looking into the code of sdbootutil it seems like it tries to grab the snapshot id, but ends up with the whole kernel options line instead sdbootutil -v list-entries

 /.snapshot/root=/dev/mapper/cr-auto-1 splash=verbose security=apparmor mitigations=auto systemd.machine_id=f7668c0b67104ace91ed2f7f4e3e0794/snapshot does not exist
opensuse-tumbleweed-6.11.8-1-default.conf: openSUSE Tumbleweed 20241119 (@6.11.8-1-default)
  /.snapshot/root=/dev/mapper/cr-auto-1 splash=verbose security=apparmor mitigations=auto systemd.machine_id=f7668c0b67104ace91ed2f7f4e3e0794/snapshot does not exist
opensuse-tumbleweed-6.11.3-2-default.conf: openSUSE Tumbleweed 20241119 (@6.11.3-2-default)

My entries are as follows:

cat /boot/efi/loader/entries/opensuse-tumbleweed-6.11.*
# Boot Loader Specification type#1 entry
title      openSUSE Tumbleweed 20241119
version    @6.11.3-2-default
sort-key   opensuse-tumbleweed
options    root=/dev/mapper/cr-auto-1 splash=verbose security=apparmor mitigations=auto systemd.machine_id=f7668c0b67104ace91ed2f7f4e3e0794
linux      /opensuse-tumbleweed/6.11.3-2-default/linux-92b0867235cbbbfd01ba11442754e67df89d0883
initrd     /opensuse-tumbleweed/6.11.3-2-default/initrd-282940e9b5de3bdbdb8ec1ffaab434daa75e3d46
# Boot Loader Specification type#1 entry
title      openSUSE Tumbleweed 20241119
version    @6.11.8-1-default
sort-key   opensuse-tumbleweed
options    root=/dev/mapper/cr-auto-1 splash=verbose security=apparmor mitigations=auto systemd.machine_id=f7668c0b67104ace91ed2f7f4e3e0794
linux      /opensuse-tumbleweed/6.11.8-1-default/linux-735bfc1bd7e24c541fa174ce8c8b939215ddf744
initrd     /opensuse-tumbleweed/6.11.8-1-default/initrd-12936ce935bef2db45a8c93f7b5b99a8f75d627c

/etc/sysconfig/snapper

SNAPPER_CONFIGS="/ root"

/etc/fstab

UUID=75ed69cb-300b-407a-a1ff-e7a0dc95fb28  /           btrfs  defaults             0  0
UUID=75ed69cb-300b-407a-a1ff-e7a0dc95fb28  /var        btrfs  subvol=/@/var        0  0
UUID=75ed69cb-300b-407a-a1ff-e7a0dc95fb28  /usr/local  btrfs  subvol=/@/usr/local  0  0
UUID=75ed69cb-300b-407a-a1ff-e7a0dc95fb28  /swap       btrfs  subvol=/@/swap       0  0
UUID=75ed69cb-300b-407a-a1ff-e7a0dc95fb28  /srv        btrfs  subvol=/@/srv        0  0
UUID=75ed69cb-300b-407a-a1ff-e7a0dc95fb28  /root       btrfs  subvol=/@/root       0  0
UUID=75ed69cb-300b-407a-a1ff-e7a0dc95fb28  /opt        btrfs  subvol=/@/opt        0  0
UUID=75ed69cb-300b-407a-a1ff-e7a0dc95fb28  /home       btrfs  subvol=/@/home       0  0
UUID=DD74-8450                             /boot/efi   vfat   utf8                 0  2
/swap/swap none swap sw 0 0

/.snapshots is not listed here in fstab.. Not sure if this is a problem, but it seems to be mounted correctly under /.snapshots possibly because it is a subvolume and mounted automatically..

aplanas commented 13 hours ago

There is an issue with the Plymouth package currently. I do not know the details but is rebooting early and somehow the post snapshot is also not created.

Is sdbootutil add-all-kernels working, or is producing the same error? If fails, can you run bash -x sdbootutil add-all-kernels and paste the output (for example in https://paste.opensuse.org/)

dezza commented 13 hours ago

sdbootutil add-all-kernels does not fail (exit 0), but the issue prevails as above with sdbootutil -v list-entries and zypper in -f -y plymouth

aplanas commented 12 hours ago

Ok, lets focus first in the list-entries one. Do bash -x sdbootutil -v list-entries and paste the output. As it will be long, a good place in the one for the other comment.

Also what do you have for snapper ls?

dezza commented 12 hours ago
+ set -e
+ shopt -s nullglob
+ dialog_altenate_screen=
+ dialog_backtitle=sdbootutil
+ interactive=
+ verbose=
+ nl='
'
++ uname -m
+ shimdir=/usr/share/efi/x86_64
+ arg_esp_path=
+ arg_entry_token=
+ arg_arch=
+ arg_all_entries=
+ arg_entry_keys=()
+ arg_no_variables=
+ arg_no_reuse_initrd=
+ arg_no_random_seed=
+ arg_portable=
+ arg_sync=
+ arg_only_default=
+ arg_default_snapshot=
+ arg_ask_key_pin_or_pw=
+ arg_method=
+ arg_signed_policy=
+ have_snapshots=
+ image=
+ unlock_method=
+ color_red=
+ color_end=
+ [[ ehxB == *i* ]]
+ [[ ehxB != *i* ]]
+ '[' '' = true ']'
+ '[' '' = 1 ']'
+ state_file=/var/lib/misc/transactional-update.state
+ update_predictions=
+ tracked_devices=()
+ rollback=()
++ mktemp -d -t sdbootutil.XXXXXX
+ tmpdir=/tmp/sdbootutil.TF1o20
+ trap cleanup EXIT
+ entryfile=/tmp/sdbootutil.TF1o20/entries.json
+ initialentryfile=/tmp/sdbootutil.TF1o20/initial_entries.json
+ snapperfile=/tmp/sdbootutil.TF1o20/snapper.json
+ tmpfile=/tmp/sdbootutil.TF1o20/tmp
+ entry_filter=("cat")
+ declare -A found_kernels
+ declare -A installed_kernels
+ declare -A stale_kernels
+ is_bootable=
++ getopt -o hc:v --long help,flicker,verbose,esp-path:,entry-token:,arch:,image:,entry-keys:,no-variables,no-reuse-initrd,no-random-seed,all,sync,portable,only-default,default-snapshot,ask-key,ask-pin,ask-pw,method:,signed-policy -n sdbootutil -- -v list-entries
+ getopttmp=' -v -- '\''list-entries'\'''
+ eval set -- ' -v -- '\''list-entries'\'''
++ set -- -v -- list-entries
+ true
+ case "$1" in
+ verbose=1
+ shift
+ true
+ case "$1" in
+ shift
+ break
+ '[' -z '' ']'
+ '[' -n 1 ']'
+ '[' 1 -gt 1 ']'
+ SYSTEMD_LOG_LEVEL=info
+ export SYSTEMD_LOG_LEVEL
+ case "$1" in
+ '[' -n '' ']'
++ bootctl
++ sed -ne 's/Firmware Arch: *\(\w\+\)/firmware_arch="\1"/p;s/ *token: *\(\w\+\)/entry_token="\1"/p;s, *\$BOOT: *\([^ ]\+\).*,boot_root="\1",p'
+ eval ' firmware_arch="x64"
boot_root="/boot/efi"
entry_token="opensuse"-tumbleweed'
++ firmware_arch=x64
++ boot_root=/boot/efi
++ entry_token=opensuse-tumbleweed
+ read -r root_uuid root_device
++ findmnt / -v -r -n -o UUID,SOURCE
+ root_device_is_crypt=
++ lsblk --noheadings -o TYPE /dev/mapper/cr-auto-1
+ '[' crypt = crypt ']'
+ root_device_is_crypt=1
+ root_subvol=
+ subvol_prefix=
++ stat -f -c %T /
+ '[' btrfs = btrfs ']'
+ '[' -d /.snapshots ']'
+ have_snapshots=1
++ btrfs subvol show /
++ head -1
+ root_subvol=
+ subvol_prefix=
+ root_snapshot=
+ '[' -n 1 ']'
+ '[' -n '' ']'
+ root_snapshot=
+ root_snapshot=
+ '[' -n '' ']'
+ '[' -n '' ']'
+ '[' -n /boot/efi ']'
+ '[' -n 75ed69cb-300b-407a-a1ff-e7a0dc95fb28 ']'
+ '[' -n '' ']'
+ '[' -z 1 ']'
+ err 'Can'\''t determine root subvolume'
+ '[' '' = 1 ']'
+ echo 'Error: Can'\''t determine root subvolume'
Error: Can't determine root subvolume
+ exit 1
+ cleanup
+ local i
+ rm -rf /tmp/sdbootutil.TF1o20

sudo snapper ls (it only shows snapshots since after sudo snapper -c root create-config / 22 Nov sounds right.)

udo snapper ls
[sudo] password for root: 
  # │ Type   │ Pre # │ Date                         │ User │ Cleanup  │ Description  │ Userdata
────┼────────┼───────┼──────────────────────────────┼──────┼──────────┼──────────────┼──────────────
  0 │ single │       │                              │ root │          │ current      │
  3 │ single │       │ fre 22 nov 2024 12:00:22 CET │ root │ timeline │ timeline     │
 19 │ pre    │       │ fre 22 nov 2024 13:26:10 CET │ root │ number   │ zypp(zypper) │ important=yes
 20 │ post   │    19 │ fre 22 nov 2024 13:26:11 CET │ root │ number   │              │ important=yes
 24 │ single │       │ lør 23 nov 2024 09:00:02 CET │ root │ timeline │ timeline     │
127 │ pre    │       │ lør 23 nov 2024 20:07:36 CET │ root │ number   │ zypp(zypper) │ important=no
128 │ post   │   127 │ lør 23 nov 2024 20:07:37 CET │ root │ number   │              │ important=no
131 │ pre    │       │ søn 24 nov 2024 07:48:00 CET │ root │ number   │ zypp(zypper) │ important=no
132 │ post   │   131 │ søn 24 nov 2024 07:48:13 CET │ root │ number   │              │ important=no
133 │ single │       │ søn 24 nov 2024 08:00:47 CET │ root │ timeline │ timeline     │
134 │ pre    │       │ søn 24 nov 2024 08:24:05 CET │ root │ number   │ zypp(zypper) │ important=no
135 │ post   │   134 │ søn 24 nov 2024 08:24:12 CET │ root │ number   │              │ important=no
138 │ pre    │       │ søn 24 nov 2024 10:02:02 CET │ root │ number   │ zypp(zypper) │ important=no
139 │ post   │   138 │ søn 24 nov 2024 10:02:07 CET │ root │ number   │              │ important=no
140 │ pre    │       │ søn 24 nov 2024 10:16:43 CET │ root │ number   │ zypp(zypper) │ important=no
141 │ post   │   140 │ søn 24 nov 2024 10:16:45 CET │ root │ number   │              │ important=no
144 │ pre    │       │ søn 24 nov 2024 12:00:57 CET │ root │ number   │ zypp(zypper) │ important=no
145 │ post   │   144 │ søn 24 nov 2024 12:00:59 CET │ root │ number   │              │ important=no
146 │ pre    │       │ søn 24 nov 2024 12:34:05 CET │ root │ number   │ zypp(zypper) │ important=no
147 │ post   │   146 │ søn 24 nov 2024 12:34:07 CET │ root │ number   │              │ important=no
148 │ pre    │       │ søn 24 nov 2024 12:34:32 CET │ root │ number   │ zypp(zypper) │ important=no
149 │ post   │   148 │ søn 24 nov 2024 12:34:34 CET │ root │ number   │              │ important=no
155 │ pre    │       │ søn 24 nov 2024 17:56:21 CET │ root │ number   │ zypp(zypper) │ important=no
156 │ post   │   155 │ søn 24 nov 2024 17:56:29 CET │ root │ number   │              │ important=no
160 │ pre    │       │ søn 24 nov 2024 21:04:17 CET │ root │ number   │ zypp(zypper) │ important=no
161 │ post   │   160 │ søn 24 nov 2024 21:04:20 CET │ root │ number   │              │ important=no
164 │ single │       │ man 25 nov 2024 11:00:00 CET │ root │ timeline │ timeline     │
167 │ pre    │       │ man 25 nov 2024 13:04:36 CET │ root │ number   │ zypp(zypper) │ important=no
168 │ post   │   167 │ man 25 nov 2024 13:04:38 CET │ root │ number   │              │ important=no
169 │ pre    │       │ man 25 nov 2024 13:13:52 CET │ root │ number   │ zypp(zypper) │ important=no
170 │ post   │   169 │ man 25 nov 2024 13:13:53 CET │ root │ number   │              │ important=no
171 │ pre    │       │ man 25 nov 2024 13:14:02 CET │ root │ number   │ zypp(zypper) │ important=no
172 │ post   │   171 │ man 25 nov 2024 13:14:04 CET │ root │ number   │              │ important=no
173 │ pre    │       │ man 25 nov 2024 13:37:23 CET │ root │ number   │ zypp(zypper) │ important=no
174 │ post   │   173 │ man 25 nov 2024 13:37:24 CET │ root │ number   │              │ important=no
176 │ pre    │       │ man 25 nov 2024 15:39:06 CET │ root │ number   │ zypp(zypper) │ important=no
177 │ post   │   176 │ man 25 nov 2024 15:39:15 CET │ root │ number   │              │ important=no
180 │ single │       │ tir 26 nov 2024 16:00:00 CET │ root │ timeline │ timeline     │
181 │ single │       │ tir 26 nov 2024 17:00:00 CET │ root │ timeline │ timeline     │
182 │ single │       │ tir 26 nov 2024 18:00:00 CET │ root │ timeline │ timeline     │
183 │ single │       │ tir 26 nov 2024 19:00:00 CET │ root │ timeline │ timeline     │
184 │ single │       │ tir 26 nov 2024 20:00:00 CET │ root │ timeline │ timeline     │
185 │ single │       │ tir 26 nov 2024 21:00:02 CET │ root │ timeline │ timeline     │
186 │ single │       │ ons 27 nov 2024 10:48:55 CET │ root │ timeline │ timeline     │
187 │ single │       │ ons 27 nov 2024 11:00:10 CET │ root │ timeline │ timeline     │
188 │ pre    │       │ ons 27 nov 2024 11:13:10 CET │ root │ number   │ zypp(zypper) │ important=yes
189 │ pre    │       │ ons 27 nov 2024 11:32:11 CET │ root │ number   │ zypp(zypper) │ important=yes
190 │ pre    │       │ ons 27 nov 2024 11:34:31 CET │ root │ number   │ zypp(zypper) │ important=yes
191 │ pre    │       │ ons 27 nov 2024 11:36:47 CET │ root │ number   │ zypp(zypper) │ important=yes
192 │ pre    │       │ ons 27 nov 2024 11:39:30 CET │ root │ number   │ zypp(zypper) │ important=yes
193 │ pre    │       │ ons 27 nov 2024 11:39:48 CET │ root │ number   │ zypp(zypper) │ important=yes
194 │ pre    │       │ ons 27 nov 2024 11:39:54 CET │ root │ number   │ zypp(zypper) │ important=yes
195 │ pre    │       │ ons 27 nov 2024 11:49:37 CET │ root │ number   │ zypp(zypper) │ important=no
196 │ pre    │       │ ons 27 nov 2024 11:49:51 CET │ root │ number   │ zypp(zypper) │ important=no
197 │ pre    │       │ ons 27 nov 2024 11:50:07 CET │ root │ number   │ zypp(zypper) │ important=no
198 │ pre    │       │ ons 27 nov 2024 11:54:10 CET │ root │ number   │ zypp(zypper) │ important=no
199 │ pre    │       │ ons 27 nov 2024 11:54:18 CET │ root │ number   │ zypp(zypper) │ important=no
200 │ post   │   199 │ ons 27 nov 2024 11:54:20 CET │ root │ number   │              │ important=no
201 │ pre    │       │ ons 27 nov 2024 11:55:48 CET │ root │ number   │ zypp(zypper) │ important=no
202 │ pre    │       │ ons 27 nov 2024 11:56:12 CET │ root │ number   │ zypp(zypper) │ important=no
203 │ pre    │       │ ons 27 nov 2024 11:56:20 CET │ root │ number   │ zypp(zypper) │ important=no
204 │ post   │   203 │ ons 27 nov 2024 11:56:21 CET │ root │ number   │              │ important=no
205 │ single │       │ ons 27 nov 2024 12:00:00 CET │ root │ timeline │ timeline     │
206 │ pre    │       │ ons 27 nov 2024 12:10:03 CET │ root │ number   │ zypp(zypper) │ important=no
207 │ single │       │ ons 27 nov 2024 13:00:00 CET │ root │ timeline │ timeline     │
208 │ pre    │       │ ons 27 nov 2024 13:37:36 CET │ root │ number   │ zypp(zypper) │ important=no
209 │ pre    │       │ ons 27 nov 2024 13:37:41 CET │ root │ number   │ zypp(zypper) │ important=no
aplanas commented 12 hours ago

somehow you lost the default snapshot (usually snapshot 1). What do you have for btrfs subvolume get-default /

dezza commented 12 hours ago

btrfs subvolume get-default /

ID 256 gen 9521 top level 5 path @
aplanas commented 12 hours ago

yeah ... we need to set a new default one. Lets try this: snapper modify --default 3, now btrfs subvolume get-default / should point to snapshot 3, and snapper ls should show a * close to the number 3.

With this maybe we go back to how the system was on Nov 22, so you will need to upgrade it again. Upgrade all you can except Plymouth for now (the package is broken, and a fix I think is on preparation)

Optionally, after that, to clean a bit the system, you remove all the snapshots that comes after 3: snapper rm 19-XXX

dezza commented 12 hours ago

Thanks a lot for your quick and precise help, both btrfs and opensuse is new to me.

snapper ls shows 3+ (not a [*] star next to 3..)

   # │ Type   │ Pre # │ Date                     │ User │ Cleanup  │ Description  │ Userdata
─────┼────────┼───────┼──────────────────────────┼──────┼──────────┼──────────────┼──────────────
  0  │ single │       │                          │ root │          │ current      │
  3+ │ single │       │ Fri Nov 22 12:00:22 2024 │ root │ timeline │ timeline     │
 19  │ pre    │       │ Fri Nov 22 13:26:10 2024 │ root │ number   │ zypp(zypper) │ important=yes
 20  │ post   │    19 │ Fri Nov 22 13:26:11 2024 │ root │ number   │              │ important=yes
 24  │ single │       │ Sat Nov 23 09:00:02 2024 │ root │ timeline │ timeline     │
127  │ pre    │       │ Sat Nov 23 20:07:36 2024 │ root │ number   │ zypp(zypper) │ important=no
128  │ post   │   127 │ Sat Nov 23 20:07:37 2024 │ root │ number   │              │ important=no
131  │ pre    │       │ Sun Nov 24 07:48:00 2024 │ root │ number   │ zypp(zypper) │ important=no
132  │ post   │   131 │ Sun Nov 24 07:48:13 2024 │ root │ number   │              │ important=no
133  │ single │       │ Sun Nov 24 08:00:47 2024 │ root │ timeline │ timeline     │
134  │ pre    │       │ Sun Nov 24 08:24:05 2024 │ root │ number   │ zypp(zypper) │ important=no
135  │ post   │   134 │ Sun Nov 24 08:24:12 2024 │ root │ number   │              │ important=no
138  │ pre    │       │ Sun Nov 24 10:02:02 2024 │ root │ number   │ zypp(zypper) │ important=no
139  │ post   │   138 │ Sun Nov 24 10:02:07 2024 │ root │ number   │              │ important=no
140  │ pre    │       │ Sun Nov 24 10:16:43 2024 │ root │ number   │ zypp(zypper) │ important=no
141  │ post   │   140 │ Sun Nov 24 10:16:45 2024 │ root │ number   │              │ important=no
144  │ pre    │       │ Sun Nov 24 12:00:57 2024 │ root │ number   │ zypp(zypper) │ important=no
145  │ post   │   144 │ Sun Nov 24 12:00:59 2024 │ root │ number   │              │ important=no
146  │ pre    │       │ Sun Nov 24 12:34:05 2024 │ root │ number   │ zypp(zypper) │ important=no
147  │ post   │   146 │ Sun Nov 24 12:34:07 2024 │ root │ number   │              │ important=no
148  │ pre    │       │ Sun Nov 24 12:34:32 2024 │ root │ number   │ zypp(zypper) │ important=no
149  │ post   │   148 │ Sun Nov 24 12:34:34 2024 │ root │ number   │              │ important=no
155  │ pre    │       │ Sun Nov 24 17:56:21 2024 │ root │ number   │ zypp(zypper) │ important=no
156  │ post   │   155 │ Sun Nov 24 17:56:29 2024 │ root │ number   │              │ important=no
160  │ pre    │       │ Sun Nov 24 21:04:17 2024 │ root │ number   │ zypp(zypper) │ important=no
161  │ post   │   160 │ Sun Nov 24 21:04:20 2024 │ root │ number   │              │ important=no
164  │ single │       │ Mon Nov 25 11:00:00 2024 │ root │ timeline │ timeline     │
167  │ pre    │       │ Mon Nov 25 13:04:36 2024 │ root │ number   │ zypp(zypper) │ important=no
168  │ post   │   167 │ Mon Nov 25 13:04:38 2024 │ root │ number   │              │ important=no
169  │ pre    │       │ Mon Nov 25 13:13:52 2024 │ root │ number   │ zypp(zypper) │ important=no
170  │ post   │   169 │ Mon Nov 25 13:13:53 2024 │ root │ number   │              │ important=no
171  │ pre    │       │ Mon Nov 25 13:14:02 2024 │ root │ number   │ zypp(zypper) │ important=no
172  │ post   │   171 │ Mon Nov 25 13:14:04 2024 │ root │ number   │              │ important=no
173  │ pre    │       │ Mon Nov 25 13:37:23 2024 │ root │ number   │ zypp(zypper) │ important=no
174  │ post   │   173 │ Mon Nov 25 13:37:24 2024 │ root │ number   │              │ important=no
176  │ pre    │       │ Mon Nov 25 15:39:06 2024 │ root │ number   │ zypp(zypper) │ important=no
177  │ post   │   176 │ Mon Nov 25 15:39:15 2024 │ root │ number   │              │ important=no
180  │ single │       │ Tue Nov 26 16:00:00 2024 │ root │ timeline │ timeline     │
181  │ single │       │ Tue Nov 26 17:00:00 2024 │ root │ timeline │ timeline     │
182  │ single │       │ Tue Nov 26 18:00:00 2024 │ root │ timeline │ timeline     │
183  │ single │       │ Tue Nov 26 19:00:00 2024 │ root │ timeline │ timeline     │
184  │ single │       │ Tue Nov 26 20:00:00 2024 │ root │ timeline │ timeline     │
185  │ single │       │ Tue Nov 26 21:00:02 2024 │ root │ timeline │ timeline     │
186  │ single │       │ Wed Nov 27 10:48:55 2024 │ root │ timeline │ timeline     │
187  │ single │       │ Wed Nov 27 11:00:10 2024 │ root │ timeline │ timeline     │
188  │ pre    │       │ Wed Nov 27 11:13:10 2024 │ root │ number   │ zypp(zypper) │ important=yes
189  │ pre    │       │ Wed Nov 27 11:32:11 2024 │ root │ number   │ zypp(zypper) │ important=yes
190  │ pre    │       │ Wed Nov 27 11:34:31 2024 │ root │ number   │ zypp(zypper) │ important=yes
191  │ pre    │       │ Wed Nov 27 11:36:47 2024 │ root │ number   │ zypp(zypper) │ important=yes
192  │ pre    │       │ Wed Nov 27 11:39:30 2024 │ root │ number   │ zypp(zypper) │ important=yes
193  │ pre    │       │ Wed Nov 27 11:39:48 2024 │ root │ number   │ zypp(zypper) │ important=yes
194  │ pre    │       │ Wed Nov 27 11:39:54 2024 │ root │ number   │ zypp(zypper) │ important=yes
195  │ pre    │       │ Wed Nov 27 11:49:37 2024 │ root │ number   │ zypp(zypper) │ important=no
196  │ pre    │       │ Wed Nov 27 11:49:51 2024 │ root │ number   │ zypp(zypper) │ important=no
197  │ pre    │       │ Wed Nov 27 11:50:07 2024 │ root │ number   │ zypp(zypper) │ important=no
198  │ pre    │       │ Wed Nov 27 11:54:10 2024 │ root │ number   │ zypp(zypper) │ important=no
199  │ pre    │       │ Wed Nov 27 11:54:18 2024 │ root │ number   │ zypp(zypper) │ important=no
200  │ post   │   199 │ Wed Nov 27 11:54:20 2024 │ root │ number   │              │ important=no
201  │ pre    │       │ Wed Nov 27 11:55:48 2024 │ root │ number   │ zypp(zypper) │ important=no
202  │ pre    │       │ Wed Nov 27 11:56:12 2024 │ root │ number   │ zypp(zypper) │ important=no
203  │ pre    │       │ Wed Nov 27 11:56:20 2024 │ root │ number   │ zypp(zypper) │ important=no
204  │ post   │   203 │ Wed Nov 27 11:56:21 2024 │ root │ number   │              │ important=no
205  │ single │       │ Wed Nov 27 12:00:00 2024 │ root │ timeline │ timeline     │
206  │ pre    │       │ Wed Nov 27 12:10:03 2024 │ root │ number   │ zypp(zypper) │ important=no
207  │ single │       │ Wed Nov 27 13:00:00 2024 │ root │ timeline │ timeline     │
208  │ pre    │       │ Wed Nov 27 13:37:36 2024 │ root │ number   │ zypp(zypper) │ important=no
209  │ pre    │       │ Wed Nov 27 13:37:41 2024 │ root │ number   │ zypp(zypper) │ important=no
210  │ single │       │ Wed Nov 27 14:00:00 2024 │ root │ timeline │ timeline     │

But now sdbootutil -v list-entries

Error: Can't determine root subvolume

btrfs subvolume get-default /

ID 267 gen 3717 top level 264 path @/.snapshots/3/snapshot
aplanas commented 12 hours ago

This + close to the 3 needs to be converted to a * . For that you would need to reboot

dezza commented 11 hours ago

It mounts root read-only after reboot.

aplanas commented 11 hours ago

That would make sense, as the subvol part in the cmdline is missing.

Check if the sdbootutil -v list-entries works now. If it does, we need to re-create the entries: sdbootutil update-all-entries look on the boot loader entries to see that now the rootflag=subvol=... is part of the cmdline. If it is there, reboot.

If not, we can try some more dangerous: sdbootutil remove-all-kernels; sdbootutil add-all-kernels This will reinstall the kernel, the initrd and the boot entries. This can help to synchronize the current kernels from the new default snapshot

dezza commented 11 hours ago

It gives the same

/ snapshot/root=/dev/mapper/cr-auto-1 splash=verbose security=apparmor mitigations=auto systemd.machine_id=f7668c0b67104ace91ed2f7f4e3e0794/snapshot does not exist
opensuse-tumbleweed-6.11.8-1-default.conf: openSUSE Tumbleweed 20241119 (@6.11.8-1-default)
/ snapshot/root=/dev/mapper/cr-auto-1 splash=verbose security=apparmor mitigations=auto systemd.machine_id=f7668c0b67104ace91ed2f7f4e3e0794/snapshot does not exist
opensuse-tumbleweed-6.11.3-2-default.conf: openSUSE Tumbleweed 20241119 (@6.11.3-2-default)

I can try the second option.

dezza commented 11 hours ago

After doing second option it made no change, still no exist in entries, still read-only. (after reboot)

There is no rootflag= option in entries

aplanas commented 11 hours ago

Ok, lets start again: you confirm that snapper ls present a default snapshot now (3*), right?

Can you paste bash -x sdbootutil -v list-entries?

dezza commented 10 hours ago

snapper ls

# │ Type   │ Pre # │ Date │ User │ Cleanup │ Description │ Userdata
──┼────────┼───────┼──────┼──────┼─────────┼─────────────┼─────────
0 │ single │       │      │ root │         │ current     │

Its just become 0 I think.

bash -x sdbootutil -v list-entries

+ set -e
+ shopt -s nullglob
+ dialog_altenate_screen=
+ dialog_backtitle=sdbootutil
+ interactive=
+ verbose=
+ nl='
'
++ uname -m
+ shimdir=/usr/share/efi/x86_64
+ arg_esp_path=
+ arg_entry_token=
+ arg_arch=
+ arg_all_entries=
+ arg_entry_keys=()
+ arg_no_variables=
+ arg_no_reuse_initrd=
+ arg_no_random_seed=
+ arg_portable=
+ arg_sync=
+ arg_only_default=
+ arg_default_snapshot=
+ arg_ask_key_pin_or_pw=
+ arg_method=
+ arg_signed_policy=
+ have_snapshots=
+ image=
+ unlock_method=
+ color_red=
+ color_end=
+ [[ ehxB == *i* ]]
+ [[ ehxB != *i* ]]
+ '[' '' = true ']'
+ '[' '' = 1 ']'
+ state_file=/var/lib/misc/transactional-update.state
+ update_predictions=
+ tracked_devices=()
+ rollback=()
++ mktemp -d -t sdbootutil.XXXXXX
+ tmpdir=/tmp/sdbootutil.Tcgxem
+ trap cleanup EXIT
+ entryfile=/tmp/sdbootutil.Tcgxem/entries.json
+ initialentryfile=/tmp/sdbootutil.Tcgxem/initial_entries.json
+ snapperfile=/tmp/sdbootutil.Tcgxem/snapper.json
+ tmpfile=/tmp/sdbootutil.Tcgxem/tmp
+ entry_filter=("cat")
+ declare -A found_kernels
+ declare -A installed_kernels
+ declare -A stale_kernels
+ is_bootable=
++ getopt -o hc:v --long help,flicker,verbose,esp-path:,entry-token:,arch:,image:,entry-keys:,no-variables,no-reuse-initrd,no-random-seed,all,sync,portable,only-default,default-snapshot,ask-key,ask-pin,ask-pw,method:,signed-policy -n sdbootutil -- -v list-entries
+ getopttmp=' -v -- '\''list-entries'\'''
+ eval set -- ' -v -- '\''list-entries'\'''
++ set -- -v -- list-entries
+ true
+ case "$1" in
+ verbose=1
+ shift
+ true
+ case "$1" in
+ shift
+ break
+ '[' -z '' ']'
+ '[' -n 1 ']'
+ '[' 1 -gt 1 ']'
+ SYSTEMD_LOG_LEVEL=info
+ export SYSTEMD_LOG_LEVEL
+ case "$1" in
+ '[' -n '' ']'
++ bootctl
++ sed -ne 's/Firmware Arch: *\(\w\+\)/firmware_arch="\1"/p;s/ *token: *\(\w\+\)/entry_token="\1"/p;s, *\$BOOT: *\([^ ]\+\).*,boot_root="\1",p'
+ eval ' firmware_arch="x64"
boot_root="/boot/efi"
entry_token="opensuse"-tumbleweed'
++ firmware_arch=x64
++ boot_root=/boot/efi
++ entry_token=opensuse-tumbleweed
+ read -r root_uuid root_device
++ findmnt / -v -r -n -o UUID,SOURCE
+ root_device_is_crypt=
++ lsblk --noheadings -o TYPE /dev/mapper/cr-auto-1
+ '[' crypt = crypt ']'
+ root_device_is_crypt=1
+ root_subvol=
+ subvol_prefix=
++ stat -f -c %T /
+ '[' btrfs = btrfs ']'
+ '[' -d /.snapshots ']'
+ have_snapshots=1
++ btrfs subvol show /
++ head -1
+ root_subvol=
+ subvol_prefix=
+ root_snapshot=
+ '[' -n 1 ']'
+ '[' -n '' ']'
+ root_snapshot=
+ root_snapshot=
+ '[' -n '' ']'
+ '[' -n '' ']'
+ '[' -n /boot/efi ']'
+ '[' -n 75ed69cb-300b-407a-a1ff-e7a0dc95fb28 ']'
+ '[' -n '' ']'
+ '[' -z 1 ']'
+ err 'Can'\''t determine root subvolume'
+ '[' '' = 1 ']'
+ echo 'Error: Can'\''t determine root subvolume'
Error: Can't determine root subvolume
+ exit 1
+ cleanup
+ local i
+ rm -rf /tmp/sdbootutil.Tcgxem
aplanas commented 10 hours ago

Where is 3? We need 3 as default snapshot

Edit: did you removed 3???

dezza commented 10 hours ago

Where is 3? We need 3 as default snapshot

Edit: did you removed 3???

No, I have definetily not removed 3. I removed the snapshots afterwards, so only 3 was left before I rebooted. This is from my history:

snapper rm 24 127 131 132 133 134 135 138 139 140 141 144 145 146 147 148 149 155 156 160 161 164 167 168 169 170 171 172 173 174 176 177 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
dezza commented 10 hours ago

It also still shows here:

btrfs subvolume list /

ID 256 gen 9578 top level 5 path @
ID 257 gen 8397 top level 256 path @/swap
ID 258 gen 9711 top level 256 path @/var
ID 259 gen 9235 top level 256 path @/usr/local
ID 260 gen 8356 top level 256 path @/srv
ID 261 gen 9711 top level 256 path @/root
ID 262 gen 8397 top level 256 path @/opt
ID 263 gen 9711 top level 256 path @/home
ID 264 gen 9576 top level 256 path @/.snapshots
ID 267 gen 3717 top level 264 path @/.snapshots/3/snapshot
ID 475 gen 9569 top level 264 path @/.snapshots/4/snapshot
ID 476 gen 9575 top level 264 path @/.snapshots/5/snapshot
aplanas commented 10 hours ago

Oh good ... : )

Confirm that the default snapshot is still 3: btrfs subvolume get-default /

Lets edit manually the boot entries. Add rootflags=subvol=@/.snapshots/3/snapshot at the end of the option field in both boot entries, and see if it works rebooting

dezza commented 10 hours ago

mount -v | grep -i snap

/dev/mapper/cr-auto-1 on / type btrfs (rw,relatime,ssd,space_cache=v2,subvolid=267,subvol=/@/.snapshots/3/snapshot)

I just got an idea.. Could the lack of display in snapper ls be because I lack the /.snapshot entry in fstab? Can you confirm whether it should be there in newer updates?

I will add rootflags=subvol=@/.snapshots/3/snapshot in entries.

aplanas commented 9 hours ago

It should be there, you are right (ignore the grub subvolumes):

UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /                       btrfs  defaults                      0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /var                    btrfs  subvol=/@/var                 0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /usr/local              btrfs  subvol=/@/usr/local           0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /srv                    btrfs  subvol=/@/srv                 0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /root                   btrfs  subvol=/@/root                0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /opt                    btrfs  subvol=/@/opt                 0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /home                   btrfs  subvol=/@/home                0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /boot/grub2/x86_64-efi  btrfs  subvol=/@/boot/grub2/x86_64-efi  0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /boot/grub2/i386-pc     btrfs  subvol=/@/boot/grub2/i386-pc  0  0
UUID=b14dcd8e-63f3-42ea-a79c-14af8fa00479  swap                    swap   defaults                      0  0
UUID=92148c01-55d8-489b-a698-d2e3a4f3bf51  /.snapshots             btrfs  subvol=/@/.snapshots          0  0
UUID=C780-CB73                             /boot/efi               vfat   utf8                          0  2
dezza commented 9 hours ago

Yes, it also works if I mount it inside, I only need to find a way to mount rw to make the change now.

snapper ls

 # │ Type   │ Pre # │ Date                     │ User │ Cleanup  │ Description  │ Userdata
───┼────────┼───────┼──────────────────────────┼──────┼──────────┼──────────────┼─────────────
0  │ single │       │                          │ root │          │ current      │
3* │ single │       │ Fri Nov 22 12:00:22 2024 │ root │ timeline │ timeline     │
4  │ pre    │       │ Wed Nov 27 14:34:09 2024 │ root │ number   │ zypp(zypper) │ important=no
5  │ post   │     4 │ Wed Nov 27 14:34:18 2024 │ root │ number   │              │ important=no
aplanas commented 8 hours ago

You can do a "mount -o remount,rw", or mount the device in a different place and edit from there