如何使“modprobe熔断”和“modprobe循环”持久存在?

如何使“modprobe熔断”和“modprobe循环”持久存在?

这曾经不是问题,但现在却成了问题。我没有改变任何重要的东西,所以可能是更新破坏了它。

当我运行 VeraCrypt 时,它抱怨无法设置循环设备并建议运行modprobe fuse.运行它不起作用。然而,运行modprobe fuse modprobe loop修复它,直到下次重新启动。

这些模块不应该在启动时自动加载吗?为什么不?我该如何制作它们?

答案1

fuse并且loop可以根据需要自动加载。

搜索显示grsecurity 内核可能会阻止此操作。因此,对于这个想法有多好存在一些分歧:-),但我相信大多数发行版都使用它。

如果自动加载存在临时错误,fuseloop在启动时加载仍然可以。它不会与自动加载机制产生冲突。无论谁调用,任何模块选项都应根据options中的行进行设置。/etc/modprobe.d/modprobe

例如,确保loop已加载

echo 'loop' | sudo tee -a /etc/modules-load.d/modules.conf

自动加载是如何工作的?首先,用户空间/dev/fuse在启动时静态创建,无论模块是否加载。我当前系统上的机制有点巴洛克风格——请参阅/lib/systemd/system/kmod-static-nodes.service。因此,您有一个可以尝试打开的设备节点。当您这样做时,内核首先调用加载模块。

在我的系统上,静态创建的设备节点列表是,这样您就可以触发加载适当的内核模块

$ cat /run/tmpfiles.d/kmod.conf
c! /dev/fuse 0600 - - - 10:229
c! /dev/btrfs-control 0600 - - - 10:234
c! /dev/loop-control 0600 - - - 10:237
d /dev/net 0755 - - -
c! /dev/net/tun 0600 - - - 10:200
c! /dev/ppp 0600 - - - 108:0
c! /dev/uinput 0600 - - - 10:223
c! /dev/uhid 0600 - - - 10:239
d /dev/vfio 0755 - - -
c! /dev/vfio/vfio 0600 - - - 10:196
c! /dev/vhci 0600 - - - 10:137
c! /dev/vhost-net 0600 - - - 10:238
c! /dev/vhost-vsock 0600 - - - 10:241
d /dev/snd 0755 - - -
c! /dev/snd/timer 0600 - - - 116:33
d /dev/snd 0755 - - -
c! /dev/snd/seq 0600 - - - 116:1
c! /dev/cuse 0600 - - - 10:203

(这些d行是目录)。

答案2

您可以使用 systemd 脚本在启动时运行命令。创建一个包含内容的文件

modprobe fuse
modprobe loop

~/Documents/modprobe_startup.sh(或任何你想存储它的地方)。不要忘记使其可执行

chmod +x ~/Documents/modprobe_startup.sh

现在我们创建一个简单的 systemd 服务文件,其中/lib/systemd/system/modprobe_startup.service包含以下内容

[Unit]
Description=runs ~/Documents/modprobe_startup.sh

[Service]
Type=simple
ExecStart=/bin/bash /home/USERNAME/Documents/modprobe_startup.sh

[Install]
WantedBy=multi-user.target

不要忘记将 USERNAME 替换为您系统的用户名。

现在要安装,

sudo cp /lib/systemd/system/modprobe_startup.service /etc/systemd/system/modprobe_startup.service
sudo chmod 644 /etc/systemd/system/modprobe_startup.service
systemctl enable modprobe_startup.service

并重新启动。

相关内容