删除 snap/snapd 后如何处理未使用的循环分区?

删除 snap/snapd 后如何处理未使用的循环分区?

在个人使用 Ubuntu Server 时,我删除了对我而言不必要的东西。我想要彻底清理的是 snapd & snap。

我使用最简洁的方式 ( snap remove <the default installed snap:core,lxd,snapd>+ apt remove --purge snap) 删除了 snap 和 snapd。它确实删除了守护进程、缓存和/snap文件夹,但它没有清除循环分区,它暂时被卸载了。

提到我应该在卸载所有之前运行一个额外的清理命令,但为时已晚。命令应该是snap remove --purge <installed snap:core,lxd,snapd>,提到这里

我怎样才能以最佳方式删除这些循环分区?
重新安装 snap 会很难吗?(如果需要)

查看 lsblk 的结果:

>$lsblk -a
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0     0B  1 loop
loop1                       7:1    0     0B  1 loop
loop2                       7:2    0     0B  1 loop
loop3                       7:3    0     0B  1 loop
loop4                       7:4    0     0B  1 loop
loop5                       7:5    0     0B  1 loop
loop6                       7:6    0     0B  0 loop
loop7                       7:7    0     0B  0 loop
sda                         8:0    0 279.4G  0 disk
├─sda1                      8:1    0     1M  0 part
[...]

使用的分配器如下

>$uname -a
Linux ubuntu 5.15.0-83-generic #92-Ubuntu SMP Mon Aug 14 09:30:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

更新一

毫无疑问 loop{0..7} 与 snap 有关,请参见下面的命令输出删除快照:

>$ lsblk -a
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0  63.5M  1 loop /snap/core20/2015
loop1                       7:1    0 111.9M  1 loop /snap/lxd/24322
loop2                       7:2    0    87M  1 loop /snap/lxd/27037
loop3                       7:3    0  53.3M  1 loop /snap/snapd/19457
loop4                       7:4    0  40.4M  1 loop /snap/snapd/20671
loop5                       7:5    0  63.9M  1 loop /snap/core20/2182
loop6                       7:6    0     0B  0 loop
loop7                       7:7    0     0B  0 loop
sda                         8:0    0 279.4G  0 disk
├─sda1                      8:1    0     1M  0 part
[...]

答案1

这些设备不一定是专门为 SNAP 或任何其他应用程序创建的,但免费设备可随时loop用于任何需要设备的应用程序。loop

0-7 是由内核在初始化时自动创建的(无论是否存在 SNAP 包管理器或snapd守护进程)...引自内核的命令行参数

max_loop=       [LOOP] The number of loop block devices that get
(loop.max_loop) unconditionally pre-created at init time. The default
                number is configured by BLK_DEV_LOOP_MIN_COUNT. Instead
                of statically allocating a predefined number, loop
                devices can be requested on-demand with the
                /dev/loop-control interface. 

...max_loop=曾经被设置8为历史功能限制,即losetup(8)无法在运行时动态创建新的循环块设备,直到/dev/loop-control2011 年左右利用接口来实现这一点才成为可能……这后来成为既不需要也不是可取的硬限制……引用自[PATCH 3/3] 循环:添加 BLK_DEV_LOOP_MIN_COUNT=%i 以允许发行版 0 预分配循环设备

+ /*
+  * If max_loop is specified, create that many devices upfront.
+  * This also becomes a hard limit. If max_loop is not specified,
+  * create CONFIG_BLK_DEV_LOOP_MIN_COUNT loop devices at module
+  * init time. Loop devices can be requested on-demand with the
+  * /dev/loop-control interface, or be instantiated by accessing
+  * a 'dead' device node.
+  */ 

...所以现在似乎被设置为0/未指定...此外,引用[PATCH v1] loop:修复 max_loop 命令行参数设置为 0 时的处理

The max_loop commandline argument can be used to override the
value of CONFIG_BLK_DEV_LOOP_MIN_COUNT. However, when max_loop is set
to 0 through the commandline, the current logic treats it as if it had
not been set, and creates CONFIG_BLK_DEV_LOOP_MIN_COUNT devices
anyway. 

...CONFIG_BLK_DEV_LOOP_MIN_COUNT在 Ubuntu 中是:

$ grep 'CONFIG_BLK_DEV_LOOP_MIN_COUNT' /boot/config-"$(uname -r)"
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8

...还体现在:

$ cat /sys/module/loop/parameters/max_loop 
8

所以您可以将当前内核下启动时创建的循环设备数量限制为通过设置启动管理器(例如 GRUB)中的内核启动参数“ max_loop=1”,据称可以没有任何在未来使用“ ”修补的内核下max_loop=0...并且这不应该影响将来重新安装 SNAP 包管理系统,因为循环设备应该根据需要动态创建。

答案2

的存在loop{0..7}与 Snap 无关。Snap 仅仅使用了其中的 6 个。仅仅因为 Snap 使用了 1GB 的硬盘,并不意味着您需要扔掉 1TB 的硬盘才能摆脱 Snap。

如果你跑ls /dev进来https://bellard.org/jslinux/vm.html?url=alpine-x86.cfg&mem=192,您将看到loop{0..7}。这是 Alpine Linux,并非基于 Ubuntu,因此它从未支持 snap。然而,没有 snap,它仍然有那些循环设备。这是正常的。

相关内容