我最近在做一个项目,需要通过连接到循环设备来挂载加密文件。虽然该项目将在 Ubuntu 系统上运行,但我尝试在我的 Arch Linux 工作站上进行设置。就在那时,我注意到 Arch 默认没有初始化任何循环设备,而我检查的所有 Ubuntu 系统(从 18.04 到 22.10)始终有 8 个预先创建的循环设备。这有点道理,因为你需要提升权限才能运行
losetup -f
另一方面,/dev/loopN 上的权限不允许普通用户使用它们。但无论如何,我都无法弄清楚谁/什么在创建这些设备。我查看了 udev 规则/lib/udev/rules.d,找不到任何相关内容。我还查看了 systemd 服务文件/lib/systemd/系统也找不到任何东西。这个问题主要是出于好奇,因为我讨厌操作系统中的魔法事件。
这是该系统上没有安装任何 snap 的证据
root@texas-tea:~# ls /dev/loop*
/dev/loop0 /dev/loop2 /dev/loop4 /dev/loop6 /dev/loop-control
/dev/loop1 /dev/loop3 /dev/loop5 /dev/loop7
root@texas-tea:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 238.5G 0 disk
├─sda1 8:1 0 714M 0 part /boot
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 237.8G 0 part
└─sda5_crypt 253:0 0 237.8G 0 crypt
├─vgtexas--tea-root 253:1 0 47.7G 0 lvm /
├─vgtexas--tea-swap_1 253:2 0 3.7G 0 lvm [SWAP]
├─vgtexas--tea-var 253:3 0 23.9G 0 lvm /var
├─vgtexas--tea-var+condor 253:4 0 952M 0 lvm /var/condor
├─vgtexas--tea-tmp 253:5 0 11.9G 0 lvm /tmp
└─vgtexas--tea-var+local 253:6 0 149.7G 0 lvm /var/local
sr0 11:0 1 1024M 0 rom
root@texas-tea:~# mount | grep loop
root@texas-tea:~#
root@texas-tea:~# losetup -l
root@texas-tea:~#
编辑:我最近意识到循环设备可以作为编译时选项创建或作为内核参数传递(请参阅此处的 max_loop=:https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html) 检查 /etc/default/[grub|grub.d] 我没有看到任何相关内容在启动时作为内核参数传递,所以我目前最好的猜测是 Ubuntu 内核编译器在构建配置中设置了 BLK_DEV_LOOP_MIN_COUNT=8。
答案1
输入lsblk
(甚至df
)你就会看见“谁/什么正在创建”这些设备:)
这些循环设备是已安装的 snap 包的挂载点。每个 snap 包使用一个设备。