All revisions of snaps are mounted, when they don't need to be

EDIT: I thought that snap mounts were causing the slow boot, but looking at systemd-analyze critical-chain I was wrong about that. As such, I’ve edited this post.

I’ve had slow boots on my fast system with SSD and finally got around to running systemd-analyze blame and while I learned that snap mounts were not in the critical-chain of boot, I found that for each snap revision that is mounted, many are adding >500ms to mount. Eg:

$ systemd-analyze blame --no-pager|grep dev-loop
           652ms dev-loop37.device
           642ms dev-loop42.device
           640ms dev-loop36.device
           624ms dev-loop29.device
           621ms dev-loop44.device
           615ms dev-loop47.device
           610ms dev-loop40.device
           608ms dev-loop52.device
           607ms dev-loop48.device
           604ms dev-loop43.device
           602ms dev-loop38.device
           600ms dev-loop41.device
           593ms dev-loop33.device
           592ms dev-loop34.device
           590ms dev-loop28.device
           590ms dev-loop51.device
           586ms dev-loop53.device
           585ms dev-loop31.device
           585ms dev-loop35.device
           584ms dev-loop46.device
           583ms dev-loop49.device
           580ms dev-loop45.device
           579ms dev-loop39.device
           578ms dev-loop54.device
           566ms dev-loop56.device
           565ms dev-loop22.device
           554ms dev-loop50.device
           553ms dev-loop21.device
           553ms dev-loop32.device
           551ms dev-loop55.device
           549ms dev-loop30.device
           548ms dev-loop26.device
           544ms dev-loop27.device
           536ms dev-loop25.device
           533ms dev-loop58.device
           525ms dev-loop23.device
           525ms dev-loop57.device
           160ms dev-loop16.device
           147ms dev-loop12.device
           143ms dev-loop18.device
           135ms dev-loop13.device
           132ms dev-loop11.device
           127ms dev-loop15.device
           118ms dev-loop14.device
           117ms dev-loop17.device
           106ms dev-loop20.device
            98ms dev-loop19.device
            75ms dev-loop8.device
            72ms dev-loop10.device
            70ms dev-loop9.device
            41ms dev-loop59.device
            28ms dev-loop4.device
            28ms dev-loop5.device
            28ms dev-loop2.device
            26ms dev-loop1.device
            23ms dev-loop6.device
            18ms dev-loop7.device
            10ms dev-loop3.device
             8ms dev-loop0.device

If I look at df output, I can see all these correspond to snaps:

$ df|grep loop
/dev/loop0                     238720    238720         0 100% /snap/chromium/9
/dev/loop3                        128       128         0 100% /snap/test-policy-app/x10
/dev/loop2                     182016    182016         0 100% <redacted>
/dev/loop1                       3456      3456         0 100% /snap/test-seccomp-compat/1
/dev/loop4                     107136    107136         0 100% /snap/gnome-3-24/3
/dev/loop5                        128       128         0 100% /snap/snappy-debug/32
/dev/loop6                        128       128         0 100% /snap/test-sandbox/x23
/dev/loop7                      83456     83456         0 100% /snap/core/2898
/dev/loop9                      20608     20608         0 100% /snap/gnome-clocks/13
/dev/loop8                        256       256         0 100% /snap/test-hello-dbus-service-system/2
/dev/loop10                    117888    117888         0 100% /snap/vlc/4
/dev/loop11                      6144      6144         0 100% /snap/gnome-clocks/21
/dev/loop14                       896       896         0 100% /snap/godd/2
/dev/loop13                    156544    156544         0 100% <redacted>
/dev/loop12                    147712    147712         0 100% <redacted>
/dev/loop15                     40832     40832         0 100% /snap/lxd/4168
/dev/loop16                    117632    117632         0 100% /snap/musescore/1
/dev/loop18                    146688    146688         0 100% <redacted>
/dev/loop17                      8704      8704         0 100% /snap/snappy-debug/70
/dev/loop19                       128       128         0 100% /snap/test-sandbox/x22
/dev/loop20                     11648     11648         0 100% /snap/ubuntu-image/64
/dev/loop22                     29568     29568         0 100% /snap/test-snapd-wayland/1
/dev/loop21                     65152     65152         0 100% /snap/git-ubuntu/251
/dev/loop23                     14080     14080         0 100% /snap/ubuntu-image/66
/dev/loop25                       128       128         0 100% /snap/test-policy-app/x12
/dev/loop27                     26752     26752         0 100% /snap/review-tools/171
/dev/loop28                     35584     35584         0 100% /snap/gradio/11
/dev/loop26                     35584     35584         0 100% /snap/gradio/9
/dev/loop29                    238208    238208         0 100% /snap/chromium/13
/dev/loop30                      8704      8704         0 100% /snap/snappy-debug/75
/dev/loop31                     40832     40832         0 100% /snap/lxd/4197
/dev/loop33                     11136     11136         0 100% /snap/debug-tools/x1
/dev/loop34                       256       256         0 100% /snap/test-hello-dbus-service-session/2
/dev/loop36                       640       640         0 100% /snap/test-snapd-syscall/x8
/dev/loop35                     11136     11136         0 100% /snap/debug-tools/x2
/dev/loop32                     83456     83456         0 100% /snap/core/2774
/dev/loop37                     40832     40832         0 100% /snap/lxd/4279
/dev/loop38                     65280     65280         0 100% /snap/git-ubuntu/268
/dev/loop39                       128       128         0 100% /snap/devmode/x1
/dev/loop40                     35584     35584         0 100% /snap/gradio/13
/dev/loop41                    236288    236288         0 100% /snap/chromium/46
/dev/loop42                     65280     65280         0 100% /snap/git-ubuntu/271
/dev/loop43                     21376     21376         0 100% /snap/gnome-clocks/19
/dev/loop44                       128       128         0 100% /snap/test-policy-app/x11
/dev/loop45                       640       640         0 100% /snap/test-snapd-syscall/x7
/dev/loop46                    165888    165888         0 100% <redacted>
/dev/loop47                       640       640         0 100% /snap/test-snapd-syscall/x9
/dev/loop48                       128       128         0 100% /snap/strict/x1
/dev/loop49                     83456     83456         0 100% /snap/core/2844
/dev/loop51                       128       128         0 100% /snap/hello-world/x1
/dev/loop50                     26752     26752         0 100% /snap/review-tools/168
/dev/loop52                    118272    118272         0 100% /snap/musescore/3
/dev/loop53                     11648     11648         0 100% /snap/ubuntu-image/62
/dev/loop54                       128       128         0 100% /snap/test-sandbox/x21
/dev/loop55                       256       256         0 100% /snap/test-hello-dbus-client-system/2
/dev/loop56                       256       256         0 100% /snap/test-hello-dbus-client-session/2
/dev/loop57                      2176      2176         0 100% /snap/what-snap/8
/dev/loop58                       128       128         0 100% /snap/hello-world/27
/dev/loop59                     26752     26752         0 100% /snap/review-tools/174

The longer times seem to correspond to the size of the snap. Here are the sizes of the snaps:

$ ls -l /var/lib/snapd/snaps/*.snap
-rw-r--r-- 1 root root 243847168 Sep  1 11:23 chromium_13.snap
-rw-r--r-- 1 root root 241881088 Sep 27 22:00 chromium_46.snap
-rw-r--r-- 1 root root 244436992 Sep  1 11:15 chromium_9.snap
-rw-r--r-- 1 root root  85385216 Sep  5 17:24 core_2774.snap
-rw-r--r-- 1 root root  85348352 Sep 11 21:26 core_2844.snap
-rw-r--r-- 1 root root  85348352 Sep 18 23:10 core_2898.snap
-rw------- 1 root root  11350016 Feb 22  2017 debug-tools_x1.snap
-rw------- 1 root root  11350016 Feb 22  2017 debug-tools_x2.snap
-rw------- 1 root root      4096 Nov 29  2016 devmode_x1.snap
-rw-r--r-- 1 root root  66609152 Sep 18 23:10 git-ubuntu_251.snap
-rw-r--r-- 1 root root  66768896 Sep 20 16:30 git-ubuntu_268.snap
-rw-r--r-- 1 root root  66768896 Sep 21 05:48 git-ubuntu_271.snap
-rw-r--r-- 1 root root 109633536 Jul 14 13:25 gnome-3-24_3.snap
-rw-r--r-- 1 root root  21053440 Sep  1 00:41 gnome-clocks_13.snap
-rw-r--r-- 1 root root  21778432 Sep 21 17:48 gnome-clocks_19.snap
-rw-r--r-- 1 root root   6225920 Sep 26 22:48 gnome-clocks_21.snap
-rw------- 1 root root    827392 Oct 27  2016 godd_2.snap
-rw-r--r-- 1 root root  36315136 Sep 14 09:49 gradio_11.snap
-rw-r--r-- 1 root root  36315136 Sep 17 17:20 gradio_13.snap
-rw-r--r-- 1 root root  36315136 Sep 13 14:56 gradio_9.snap
-rw-r--r-- 1 root root     20480 Aug 11 08:33 hello-world_27.snap
-rw------- 1 root root     20480 Sep 25 16:46 hello-world_x1.snap
-rw-r--r-- 1 root root  41697280 Sep 20 04:48 lxd_4168.snap
-rw-r--r-- 1 root root  41730048 Sep 20 18:18 lxd_4197.snap
-rw-r--r-- 1 root root  41746432 Sep 27 07:47 lxd_4279.snap
-rw-r--r-- 1 root root 120352768 Jun 12 10:11 musescore_1.snap
-rw-r--r-- 1 root root 121090048 Jun 16 16:24 musescore_3.snap
-rw-r--r-- 1 root root  27377664 Sep 21 22:13 review-tools_168.snap
-rw-r--r-- 1 root root  27377664 Sep 25 17:18 review-tools_171.snap
-rw-r--r-- 1 root root  27381760 Sep 28 14:37 review-tools_174.snap
-rw-r--r-- 1 root root     28672 Jun 13 17:29 snappy-debug_32.snap
-rw-r--r-- 1 root root   8888320 Jul 13 18:08 snappy-debug_70.snap
-rw-r--r-- 1 root root   8888320 Jul 14 08:38 snappy-debug_75.snap
-rw-r--r-- 1 root root   2297856 Jul  6 18:12 spread_28.snap
-rw------- 1 root root      4096 May  9 10:24 strict_x1.snap
-rw-r--r-- 1 root root    217088 Sep  7 14:29 test-hello-dbus-client-session_2.snap
-rw-r--r-- 1 root root    217088 Sep  7 14:29 test-hello-dbus-client-system_2.snap
-rw-r--r-- 1 root root    217088 Sep  7 14:29 test-hello-dbus-service-session_2.snap
-rw-r--r-- 1 root root    217088 Sep  7 14:30 test-hello-dbus-service-system_2.snap
-rw------- 1 root root      4096 Mar 23  2017 test-policy-app_x10.snap
-rw------- 1 root root      4096 Mar 28  2017 test-policy-app_x11.snap
-rw------- 1 root root      4096 May 18 13:34 test-policy-app_x12.snap
-rw------- 1 root root      4096 Jan 20  2017 test-sandbox_x21.snap
-rw------- 1 root root      4096 Jan 20  2017 test-sandbox_x22.snap
-rw------- 1 root root      4096 Jan 20  2017 test-sandbox_x23.snap
-rw-r--r-- 1 root root   3465216 Aug 25 12:23 test-seccomp-compat_1.snap
-rw------- 1 root root    602112 Sep 26 23:48 test-snapd-syscall_x7.snap
-rw------- 1 root root    602112 Sep 26 23:55 test-snapd-syscall_x8.snap
-rw------- 1 root root    626688 Sep 27 08:23 test-snapd-syscall_x9.snap
-rw-r--r-- 1 root root  30224384 Aug 25 09:59 test-snapd-wayland_1.snap
-rw-r--r-- 1 root root  11907072 Jul  7 15:05 ubuntu-image_62.snap
-rw-r--r-- 1 root root  11907072 Jul 10 08:35 ubuntu-image_64.snap
-rw-r--r-- 1 root root  14290944 Jul 12 15:45 ubuntu-image_66.snap
-rw-r--r-- 1 root root 120627200 Aug  1 09:45 vlc_4.snap
-rw-r--r-- 1 root root   2170880 Aug 17 16:46 what-snap_8.snap

This exercise reminded me that a relatively cheap way to make things a bit better is to only mount the active snap.

1 Like

Yes, we can change that at some point. Today it’s an easy way to make sure the snap’s metadata is easily accessible. Adding to the backlog.

2 Likes

I’m in favor of cleaning this up (not listing so many prior revisions of snaps as loop-mounted filesystems). Having them listed there clutters up commands like lsblk and may confuse some users.

3 Likes

I second that. Only the “current” version should be mounted by default, the others also make boot unnecessarily longer.

1 Like

I wonder whether the situation changed in 2021?