
Раньше это не было проблемой, но теперь это так. Я ничего существенного не менял, так что, возможно, обновление сломало его.
Когда я запускаю 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
и перезагрузитесь.