openSUSE / snapper

Manage filesystem snapshots and allow undo of system modifications
http://snapper.io/
GNU General Public License v2.0
850 stars 122 forks source link

Snapper is failing to create snapshots #901

Closed mfgbhatti closed 1 month ago

mfgbhatti commented 2 months ago

Operating System: Linux arch 6.8.7-arch1-1

Versions: snapper version 0.10.7 libsnapper version 7.4.0

Snapper Config:

# subvolume to snapshot
SUBVOLUME="/"

# filesystem type
FSTYPE="btrfs"

# btrfs qgroup for space aware cleanup algorithms
QGROUP="1/0"

# fraction or absolute size of the filesystems space the snapshots may use
SPACE_LIMIT="0.5"

# fraction or absolute size of the filesystems space that should be free
FREE_LIMIT="0.2"

# users and groups allowed to work with config
ALLOW_USERS="farhan"
ALLOW_GROUPS="wheel"

# sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots
# directory
SYNC_ACL="yes"

# start comparing pre- and post-snapshot in background after creating
# post-snapshot
BACKGROUND_COMPARISON="yes"

# run daily number cleanup
NUMBER_CLEANUP="yes"

# limit for number cleanup
NUMBER_MIN_AGE="3600"
NUMBER_LIMIT="6-12"
NUMBER_LIMIT_IMPORTANT="8-10"

# create hourly snapshots
TIMELINE_CREATE="yes"

# cleanup hourly snapshots after some time
TIMELINE_CLEANUP="yes"

# limits for timeline cleanup
TIMELINE_MIN_AGE="3600"
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="3"
TIMELINE_LIMIT_WEEKLY="2"
TIMELINE_LIMIT_MONTHLY="3"
TIMELINE_LIMIT_YEARLY="0"

# cleanup empty pre-post-pairs
EMPTY_PRE_POST_CLEANUP="yes"

# limits for empty pre-post-pair cleanup
EMPTY_PRE_POST_MIN_AGE="1800"

Pacman Hooks: Yes, I am using snap-pac for pre and post upgrade snapshots

Btrfs Subvolumes:

ID 258 gen 43274 top level 5 path @log
ID 259 gen 43128 top level 5 path @spool
ID 260 gen 43264 top level 5 path @cache
ID 262 gen 43013 top level 5 path @opt
ID 265 gen 43268 top level 5 path @snapshots
ID 1122 gen 42984 top level 265 path @snapshots/825/snapshot
ID 1124 gen 43274 top level 5 path @

Snapper Log:

  MIL libsnapper(2561) snapperd.cc(main):315 - Exiting
  MIL libsnapper(3328) Snapper.cc(Snapper):97 - Snapper constructor
  MIL libsnapper(3328) Snapper.cc(Snapper):98 - snapper version 0.10.7
  MIL libsnapper(3328) Snapper.cc(Snapper):99 - libsnapper version 7.4.0
  MIL libsnapper(3328) Snapper.cc(Snapper):100 - config_name:root root_prefix:/ disable_filters:false
  MIL libsnapper(3328) AsciiFile.cc(reload):922 - loading file /etc/snapper/configs/root
  MIL libsnapper(3328) AsciiFile.cc(get_value):1078 - key:SUBVOLUME value:/
  MIL libsnapper(3328) AsciiFile.cc(get_value):1078 - key:FSTYPE value:btrfs
  MIL libsnapper(3328) AsciiFile.cc(get_value):1078 - key:QGROUP value:1/0
  MIL libsnapper(3328) AsciiFile.cc(get_value):1078 - key:SYNC_ACL value:yes
  MIL libsnapper(3328) AsciiFile.cc(get_value):1078 - key:ALLOW_USERS value:farhan
  MIL libsnapper(3328) AsciiFile.cc(get_value):1078 - key:ALLOW_GROUPS value:wheel
  MIL libsnapper(3328) Snapper.cc(Snapper):130 - subvolume:/ filesystem:btrfs
  MIL libsnapper(3328) Snapper.cc(loadIgnorePatterns):204 - number of ignore patterns:8
  MIL libsnapper(3328) Snapshot.cc(read):344 - found 2 snapshots
  WAR libsnapper(3328) Client.cc(check_permission):436 - THROW: no permissions
  WAR libsnapper(3328) Client.cc(dispatch):1947 - CAUGHT: no permissions
  MIL libsnapper(3328) Snapper.cc(~Snapper):142 - Snapper destructor
  MIL libsnapper(3328) snapperd.cc(main):315 - Exiting

Pacman Log:

 [PACMAN] synchronizing package lists
 [PACMAN] starting full system upgrade
 [PACMAN] Running 'pacman -Syu'
 [PACMAN] synchronizing package lists
 [PACMAN] starting full system upgrade
 [ALPM] running '05-snap-pac-pre.hook'...
 [ALPM-SCRIPTLET] Creating snapshot failed.
 [ALPM-SCRIPTLET] ==> root:
 [ALPM] transaction started
 [ALPM] transaction completed
 [ALPM] running 'zz-snap-pac-post.hook'...
 [ALPM-SCRIPTLET] Invalid snapshot '--type'.
 [ALPM-SCRIPTLET] ==> root:

Snapshots Directory Permissions:

drwxr-x---+   1 root root    6 Apr 19 00:24 .snapshots

Command snapper -c root create --description test worked but it created two single snapshots. Running same command again produced one snapshot. Just read snapper log, I already pasted above, there is a discrepancy. There was only one snapshot as you can see in btrfs output but snapper is reporting found 2 snapshots. This behavior started after I restored a snapshot by using live arch usb.

Steps Taken to resolve:

  1. Deleted .snapshots directory
  2. reinstalled snapper, snap-pac
aschnell commented 2 months ago

One thing is AFAIS that you hit bug https://github.com/openSUSE/snapper/issues/856:

WAR libsnapper(3328) Client.cc(check_permission):436 - THROW: no permissions

But that should not cause further problems.

What really looks strange is this:

[ALPM-SCRIPTLET] Invalid snapshot '--type'.

As if a program passes --type instead of a snapshot number.

mfgbhatti commented 2 months ago

I am using snap-pac. It was working as expected before I restored. There is also pre-upgrade snapshot [ALPM-SCRIPTLET] Creating snapshot failed. One interesting thing happening as you can see in ls -la /.snapshot

drwxr-x---+ 1 root root  24 Apr 19 18:34 .
drwxr-xr-x  1 root root 158 Apr 18 18:35 ..
drwxr-xr-x  1 root root  32 Apr 17 23:55 825
drwxr-xr-x  1 root root  32 Apr 19 00:45 826
drwxr-xr-x  1 root root  32 Apr 19 00:45 827
drwxr-xr-x  1 root root  32 Apr 19 00:48 828

But in snapper.log I can still see MIL libsnapper(3038) Snapshot.cc(read):344 - found 5 snapshots

mfgbhatti commented 2 months ago

After upgrading to latest version, everything is working as expected. Here is the latest snapper.log.

  MIL libsnapper(3004) Snapper.cc(Snapper):97 - Snapper constructor
  MIL libsnapper(3004) Snapper.cc(Snapper):98 - snapper version 0.11.0
  MIL libsnapper(3004) Snapper.cc(Snapper):99 - libsnapper version 7.4.3
  MIL libsnapper(3004) Snapper.cc(Snapper):100 - config_name:root root_prefix:/ disable_filters:false
  MIL libsnapper(3004) AsciiFile.cc(reload):920 - loading file /etc/snapper/configs/root
  MIL libsnapper(3004) AsciiFile.cc(get_value):1076 - key:SUBVOLUME value:/
  MIL libsnapper(3004) AsciiFile.cc(get_value):1076 - key:FSTYPE value:btrfs
  MIL libsnapper(3004) AsciiFile.cc(get_value):1076 - key:QGROUP value:1/0
  ERR libsnapper(3004) Btrfs.cc(evalConfigInfo):116 - qgroup '1/0' does not exist
  MIL libsnapper(3004) AsciiFile.cc(get_value):1076 - key:SYNC_ACL value:yes
  MIL libsnapper(3004) AsciiFile.cc(get_value):1076 - key:ALLOW_USERS value:farhan
  MIL libsnapper(3004) AsciiFile.cc(get_value):1076 - key:ALLOW_GROUPS value:wheel
  MIL libsnapper(3004) Snapper.cc(Snapper):130 - subvolume:/ filesystem:btrfs
  MIL libsnapper(3004) Snapper.cc(loadIgnorePatterns):204 - number of ignore patterns:8
  MIL libsnapper(3004) Snapshot.cc(read):340 - found 3 snapshots
  WAR libsnapper(3004) FileUtils.cc(SDir):88 - THROW: open failed path://.snapshots/830 errno:2 (No such file or directory)
  WAR libsnapper(3004) Btrfs.cc(checkSnapshot):484 - CAUGHT: open failed path://.snapshots/830 errno:2 (No such file or directory)
  WAR libsnapper(3004) FileUtils.cc(SDir):88 - THROW: open failed path://.snapshots/831 errno:2 (No such file or directory)
  WAR libsnapper(3004) Btrfs.cc(checkSnapshot):484 - CAUGHT: open failed path://.snapshots/831 errno:2 (No such file or directory)
  MIL libsnapper(3004) AsciiFile.cc(get_value):1076 - key:BACKGROUND_COMPARISON value:yes
  MIL libsnapper(3004) Comparison.cc(Comparison):60 - num1:830 num2:831
  MIL libsnapper(3004) Comparison.cc(load):272 - num1:830 num2:831
  MIL libsnapper(3004) Comparison.cc(create):141 - num1:830 num2:831
  MIL libsnapper(3004) Btrfs.cc(cmpDirs):1360 - special btrfs cmpDirs
  MIL libsnapper(3004) Btrfs.cc(process):1331 - dir1:'//.snapshots/830/snapshot' dir2:'//.snapshots/831/snapshot'
  MIL libsnapper(3004) Btrfs.cc(cmpDirs):1372 - stopwatch 3.184126s for comparing directories
  MIL libsnapper(3004) Comparison.cc(create):161 - found 1256 lines
  MIL libsnapper(3004) Comparison.cc(save):318 - num1:830 num2:831
  MIL libsnapper(3004) Snapper.cc(~Snapper):142 - Snapper destructor
  MIL libsnapper(3004) snapperd.cc(main):315 - Exiting
aschnell commented 1 month ago

Unclear cause but is fixed now.