Как сделать `modprobe fuse` и `modprobe loop` постоянными?

Как сделать `modprobe fuse` и `modprobe loop` постоянными?

Раньше это не было проблемой, но теперь это так. Я ничего существенного не менял, так что, возможно, обновление сломало его.

Когда я запускаю VeraCrypt, он жалуется, что не может настроить устройство loop и предлагает запустить modprobe fuse. Запуск его не работает. Однако запускmodprobe fuse и modprobe loopисправляет это, до следующего перезапуска.

Разве эти модули не должны загружаться автоматически при загрузке? Почему нет? Как мне их сделать?

решение1

fuseи loopможет быть автоматически загружен по требованию.

Поиск показывает, чтоядра grsecurity могут это блокировать. Так что есть некоторые разногласия по поводу того, насколько хороша эта идея :-), но я считаю, что она используется в большинстве дистрибутивов.

Если есть временная ошибка с автозагрузкой, все равно можно загружать fuseи loopво время загрузки. Это не создаст конфликта с механизмом автозагрузки. Любые параметры модуля должны быть установлены в соответствии со 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

и перезагрузитесь.

Связанный контент