Cannot rollback using read only snapshot IO ERROR (.snapshots is not a btrfs subvolume).

Hello!

I for some reason cannot rollback using a bootable read only snapshot.
After I boot in the snapshot and type

sudo snapper rollback

I get

Creating read-only snapshot of default subvolume.IO Error (.snapshots is not a btrfs subvolume).

I have a SSD at sda1 with dualboot (using btrfs for / partition) and FAT for the /boot/efi partition and a HDD with my /home partition using ext4.

$ sudo fdisk -l
Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors
Disk model: Samsung SSD 850 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 346B060B-3147-11E5-8265-3065EC6B6CE7

Device         Start       End   Sectors  Size Type
/dev/sda1       2048   1230847   1228800  600M Windows recovery environment
/dev/sda2    1230848   1845247    614400  300M EFI System
/dev/sda3    1845248   2107391    262144  128M Microsoft reserved
/dev/sda4    2107392 123742207 121634816   58G Microsoft basic data
/dev/sda5  233515008 234436607    921600  450M Windows recovery environment
/dev/sda6  123742208 232949759 109207552 52,1G Linux filesystem
/dev/sda7  232949760 233515007    565248  276M EFI System

Partition table entries are not in disk order.


Disk /dev/sdb: 465,8 GiB, 500107862016 bytes, 976773168 sectors
Disk model: ST500LM000-1EJ16
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: C2660D3D-1BDF-4DE0-9CE7-6D8F280BA95F

Device         Start       End   Sectors   Size Type
/dev/sdb1       2048   1230847   1228800   600M Windows recovery environment
/dev/sdb2    1230848   1845247    614400   300M EFI System
/dev/sdb3    1845248   2107391    262144   128M Microsoft reserved
/dev/sdb4    2107392 442509311 440401920   210G Microsoft basic data
/dev/sdb5  942096384 960970751  18874368     9G Linux swap
/dev/sdb6  442509312 942096383 499587072 238,2G Linux filesystem

Partition table entries are not in disk order.


Disk /dev/loop0: 86,9 MiB, 91099136 bytes, 177928 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Does anyone know what is causing it.

What exactly is not clear in “.snapshots is not a btrfs subvolume”? Start with posting output of

btrfs su li /
btrfs su get-default /
cat /proc/mounts

from your system

Here is the output

 # btrfs su li /

ID 257 gen 88023 top level 5 path @
ID 258 gen 88024 top level 257 path var
ID 259 gen 87619 top level 257 path usr/local
ID 260 gen 87567 top level 257 path tmp
ID 261 gen 87238 top level 257 path srv
ID 262 gen 87931 top level 257 path root
ID 263 gen 87235 top level 257 path opt
ID 264 gen 87237 top level 257 path boot/grub2/x86_64-efi
ID 265 gen 87237 top level 257 path boot/grub2/i386-pc
ID 460 gen 87987 top level 257 path .snapshots
ID 461 gen 83043 top level 460 path .snapshots/1/snapshot
ID 462 gen 83043 top level 460 path .snapshots/2/snapshot
ID 463 gen 83043 top level 460 path .snapshots/3/snapshot
ID 501 gen 83043 top level 460 path .snapshots/41/snapshot
ID 504 gen 83043 top level 460 path .snapshots/44/snapshot
ID 509 gen 83043 top level 460 path .snapshots/45/snapshot
ID 518 gen 83073 top level 460 path .snapshots/52/snapshot
ID 523 gen 83073 top level 460 path .snapshots/57/snapshot
ID 538 gen 83073 top level 460 path .snapshots/72/snapshot
ID 541 gen 83380 top level 460 path .snapshots/75/snapshot
ID 551 gen 84135 top level 460 path .snapshots/85/snapshot
ID 567 gen 84804 top level 460 path .snapshots/100/snapshot
ID 568 gen 84805 top level 460 path .snapshots/101/snapshot
ID 569 gen 84808 top level 460 path .snapshots/102/snapshot
ID 570 gen 84809 top level 460 path .snapshots/103/snapshot
ID 577 gen 85712 top level 460 path .snapshots/110/snapshot
ID 598 gen 87212 top level 460 path .snapshots/131/snapshot
ID 599 gen 87308 top level 460 path .snapshots/132/snapshot
ID 600 gen 87352 top level 460 path .snapshots/133/snapshot
ID 601 gen 87354 top level 460 path .snapshots/134/snapshot
ID 602 gen 87358 top level 460 path .snapshots/135/snapshot
ID 603 gen 87359 top level 460 path .snapshots/136/snapshot
ID 604 gen 87408 top level 460 path .snapshots/137/snapshot
ID 605 gen 87503 top level 460 path .snapshots/138/snapshot
ID 606 gen 87642 top level 460 path .snapshots/139/snapshot
ID 607 gen 87713 top level 460 path .snapshots/140/snapshot
ID 608 gen 87730 top level 460 path .snapshots/141/snapshot
ID 609 gen 87765 top level 460 path .snapshots/142/snapshot
ID 610 gen 87848 top level 460 path .snapshots/143/snapshot
ID 611 gen 87902 top level 460 path .snapshots/144/snapshot
ID 612 gen 87928 top level 460 path .snapshots/145/snapshot
ID 613 gen 87931 top level 460 path .snapshots/146/snapshot
ID 614 gen 87986 top level 460 path .snapshots/147/snapshot

# btrfs su get-default /
ID 257 gen 88023 top level 5 path @

 # cat /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,nosuid,size=4029828k,nr_inodes=1007457,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
efivarfs /sys/firmware/efi/efivars efivarfs rw,nosuid,nodev,noexec,relatime 0 0
bpf /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
/dev/sda6 / btrfs rw,relatime,ssd,space_cache,subvolid=257,subvol=/@ 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=30,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=2261 0 0
mqueue /dev/mqueue mqueue rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,relatime,pagesize=2M 0 0
nfsd /proc/fs/nfsd nfsd rw,relatime 0 0
/dev/sda6 /var btrfs rw,relatime,ssd,space_cache,subvolid=258,subvol=/@/var 0 0
/dev/sda6 /boot/grub2/i386-pc btrfs rw,relatime,ssd,space_cache,subvolid=265,subvol=/@/boot/grub2/i386-pc 0 0
/dev/sda6 /root btrfs rw,relatime,ssd,space_cache,subvolid=262,subvol=/@/root 0 0
/dev/sda6 /opt btrfs rw,relatime,ssd,space_cache,subvolid=263,subvol=/@/opt 0 0
/dev/sda6 /usr/local btrfs rw,relatime,ssd,space_cache,subvolid=259,subvol=/@/usr/local 0 0
/dev/sda6 /boot/grub2/x86_64-efi btrfs rw,relatime,ssd,space_cache,subvolid=264,subvol=/@/boot/grub2/x86_64-efi 0 0
/dev/sda6 /srv btrfs rw,relatime,ssd,space_cache,subvolid=261,subvol=/@/srv 0 0
/dev/sda7 /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev 0 0
/dev/loop0 /snap/core/4917 squashfs ro,nodev,relatime 0 0
/dev/sdb6 /home ext4 rw,relatime,data=ordered 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
tmpfs /run/user/1000 tmpfs rw,nosuid,nodev,relatime,size=808532k,mode=700,uid=1000,gid=100 0 0
gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=100 0 0
tracefs /sys/kernel/debug/tracing tracefs rw,relatime 0 0

openSUSE changed btrfs subvolume layout long ago. Your system was probably installed before layout was changed.

It may be possible to perform rollback if you manually mount .snapshots subvolume (subvolid=460) on /.snapshots directory, but you may well hit some other issue then. If it will be successful, you will need to add /.snapshots to /etc/fstab on new root to have it mounted automatically.

Strange. I installed my OpenSuse in July this year. The only think I think could be an issue is that when I installed I didn’t allow snapshots. I activated the snapper months later.

Yes, indeed. In this case installer creates different subvolume layout and does not add /.snapshots to /etc/fstab.

I tested rollback in such configuration, and it appears to work after manual mount. I.e. after booting into read-only snapshot do
“mount -o subvol=@/.snapshots /dev/XXX /.snapshots” (where /dev/XXX is your root device) and issue “snapper rollback”. After reboot you will need to add /.snapshots to /etc/fstab. From now on all future snapshots will capture updated /etc/fstab and rollback should work as documented. All snapshots created before this point in time still require manual workaround (because they do not mount /.snapshots automatically).

1 Like

When adding a second snapper configuration /.snapshots got accidently deleted from /etc/fstab. Manual mounting, rollback, reboot and adding the mount again to /etc/fstab indeed returned snapper to business as usual.