为什么所有快照都被挂载并列为 Ubuntu 18.04 的块设备或分区?

jor*_*rdy 43 gnome snap 18.04

从 Ubuntu 18.04 开始,运行lsblk显示 16 个 snap 循环(每个 snap 2-3 次)。问题是,为什么它们被列为 lsblk、fdisf-l 和 blkid 的结果?

它从我需要查看的实际磁盘驱动器分区(即 /dev/ 分区)中产生了很多混乱。我知道这个问题的据称重复存在,但它只询问为什么每个 snap 列出三个循环。我想知道为什么首先列出这些快照,而所谓的重复并没有回答这个问题(也许那些将其标记为重复的人可以通过解释为什么它是重复的来帮助我)。从技术上讲,它们有资格作为文件系统(我既没有创建也没有要求),但是它们妨碍了我感兴趣的 /dev/ 分区的信息输出。当 fdisk -l 输出三个page+ 列表主要填充了快照。

最近(1 周大)Ubuntu 安装的输出,我没有安装任何快照:

$ lsblk  
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT  
loop0    7:0    0  14.5M  1 loop /snap/gnome-logs/37  
loop1    7:1    0   2.3M  1 loop /snap/gnome-calculator/170  
loop2    7:2    0  86.6M  1 loop /snap/core/4486  
loop3    7:3    0  86.6M  1 loop /snap/core/4650  
loop4    7:4    0   1.6M  1 loop /snap/gnome-calculator/154  
loop5    7:5    0  14.5M  1 loop /snap/gnome-logs/34  
loop6    7:6    0   3.3M  1 loop /snap/gnome-system-monitor/36  
loop7    7:7    0   2.3M  1 loop /snap/gnome-calculator/178  
loop8    7:8    0    13M  1 loop /snap/gnome-characters/101  
loop9    7:9    0   3.7M  1 loop /snap/gnome-system-monitor/45  
loop10   7:10   0 139.5M  1 loop /snap/gnome-3-26-1604/64  
loop11   7:11   0   140M  1 loop /snap/gnome-3-26-1604/59   
loop12   7:12   0   3.7M  1 loop /snap/gnome-system-monitor/41  
loop13   7:13   0    21M  1 loop /snap/gnome-logs/25  
loop14   7:14   0  12.2M  1 loop /snap/gnome-characters/69  
loop15   7:15   0    13M  1 loop /snap/gnome-characters/96  
sda      8:0    0 298.1G  0 disk  
??sda1   8:1    0   512M  0 part /boot/efi  
??sda2   8:2    0 297.6G  0 part /  
sr0     11:0    1  1024M  0 rom  
Run Code Online (Sandbox Code Playgroud)

(以上文字的补充屏幕截图):
screenshot.jpg

我的snap list显示 6 个结果:

核心
gnome-3-26-1604
gnome-calculator
gnome-characters
gnome-logs
gnome-system-monitor

同时,gnome-disk-utility 根本不显示快照,只显示我的硬盘和光驱。

如果每个已安装的 snap 都被列为块设备(每个要添加 2-3 次),那么效率不会很高。我应该期待未来的更新来解决这个问题吗?

编辑:
fdisk-l还列出了一个很长的列表,其中包含 16 个这些“磁盘循环”的实例(磁盘 /dev/loop0、磁盘 /dev/loop1 等,每个都有详细信息,我不会在此处显示,因为它太长了)。这不可能是有意的行为,是吗?
blkid还列出了 16 个循环,如 TYPE="squashfs"。至少parted -l按预期工作,只显示我的实际磁盘分区。

我刚刚对此进行了测试,安装更多快照确实会为 lsblk 输出添加更多内容。因此,根据可用和已安装的快照数量,fdisk、lsblk、blkid 可能具有潜在的巨大输出列表。

abu*_*bua 18

当你输入命令

snap list 
Run Code Online (Sandbox Code Playgroud)

您将获得实际安装的 snap 包的输出。原因是当 snap 包更新时,旧版本被保留(参见 snapcraft 文档)

引用来自 snapcraft 文档

对于刚刚更新的快照版本之前的快照版本,垃圾收集然后删除并清除所有快照文件及其可写区域——这意味着系统上最多会出现两个版本的快照。这可以节省磁盘空间,而不会影响将快照恢复到先前已知良好状态的能力。

明确地从系统中删除快照也将删除代码并清除所有先前版本的数据。

例如,您已经安装了多个版本的gnome-calculator

如果您只需要最新版本,您可以使用

sudo snap remove gnome-calculator --revision <verison to be placed>
Run Code Online (Sandbox Code Playgroud)

使用命令

losetup -a 
Run Code Online (Sandbox Code Playgroud)

向您展示已安装的快照(循环设备)

如果要删除双数,请键入

sudo losetup -d /dev/loop<loopnumber>
Run Code Online (Sandbox Code Playgroud)

这似乎是 snap 代码的错误,因为所有旧的都保存在 /var/lib/snapd/snaps 文件中。

  • 正确的代码是“sudo snap remove”而不是“sudo remove”。请修改您的答案。 (4认同)
  • `sudo: remove: command not found` 和 `losetup -d` 没有任何改变。 (3认同)

L. *_*mes 14

从您问题中的内容来看,您的问题在于寻找一种方法来控制您在尝试查看块设备时所看到的内容,而不是 snap 如何使用块设备进行操作。

我同意你提到的fdisk -l和之间的区别parted -l。虽然fdisk显示了非常好的块设备详细输出,但它显示了太多其他东西,这些东西会分散您的注意力。

解析度

您可以使用过滤lsblk格式的输出。这可以很好地提供干净的输出,就像您使用gnome-disk-utility 获得的一样

$ lsblk -o name,mountpoint,label,size,fstype,uuid | egrep -v "^loop"
Run Code Online (Sandbox Code Playgroud)

或者正如您在问题中指出的那样:

$ sudo parted -l
Run Code Online (Sandbox Code Playgroud)

对于df您问题中的命令,请使用:

$ df | egrep -v /dev/loop
Run Code Online (Sandbox Code Playgroud)

  • 我等了很长时间才有人提出这个建议,即 lsblk 的过滤输出(而不是所有那些将过度输出辩护为正常和良好的评论)。然而,我想避免这样做,因为简单而直接的 `lsblk` 速度快、容易记住,而且在 snap 干扰它之前它工作得很好。我想要它恢复原样。希望过多的输出只是一个会得到修复的错误。 (4认同)
  • @danthonyd 感谢您的认可。我确信我理解了这个问题,并确信它应该在 AU 信息数据库中占有一席之地以供考虑和回答。这是我长期以来一直关心的问题。然而,问题不在于 Snap。问题在于`fdisk` 开发人员。他们应该添加一种方法来过滤伪设备上的真实设备,以消除过多的输出并使他们的应用程序更易于管理,例如 Gnome-disk-utility。没有人会使用 `fdisk` 来管理他们的 **loop** 设备。(继续)... (4认同)
  • ...(续)他们甚至不需要在 **fdisk** 输出中看到它。这就是 **losetup** 和其他 **pseudo** 应用程序命令的用途。那么,如果您无法使用该工具管理它,为什么还要展示它。fdisk 设计中的这个缺陷使 **parted** 和 **lsblk** 等应用程序更加流行和用户友好。 (4认同)

小智 12

我也觉得这很烦人。似乎如果它们未运行,则不应安装或列出它们。您可以运行此命令来排除所有循环设备。

$ lsblk -e 7