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

Вопрос или проблема

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

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

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

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 обозначают директории).

Вы можете запускать команды при старте с помощью скрипта 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

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

Ответ или решение

Для того чтобы сделать модули fuse и loop постоянными при загрузке системы, выполните следующие шаги:

1. Убедитесь, что модули могут загружаться автоматически

Модули fuse и loop могут загружаться по требованию, однако иногда могут возникать проблемы с автоматической загрузкой. Чтобы убедиться, что эти модули будут загружаться при старте системы, мы можем добавить их в конфигурацию загрузки.

2. Добавление модулей в конфигурацию загрузки

Создайте файл конфигурации, который будет содержать названия модулей, которые мы хотим загрузить при старте системы. Для этого выполните следующие команды в терминале:

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

3. Использование systemd для вызова команд при старте

Если вы хотите убедиться, что модули загружаются в определенном порядке или хотите добавить дополнительные команды, вы можете создать простой systemd сервис.

  1. Создайте скрипт, который будетLoading modules при загрузке. В вашем домашнем каталоге (например, ~/Documents) создайте файл modprobe_startup.sh с следующим содержимым:
#!/bin/bash
modprobe fuse
modprobe loop
  1. Сделайте файл исполняемым:
chmod +x ~/Documents/modprobe_startup.sh
  1. Теперь создайте файл службы systemd. Для этого создайте файл /etc/systemd/system/modprobe_startup.service с следующим содержимым:
[Unit]
Description=Загрузка модулей fuse и loop

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

[Install]
WantedBy=multi-user.target

Не забудьте заменить USERNAME на ваше имя пользователя.

  1. Теперь установите и активируйте службу:
sudo systemctl daemon-reload
sudo systemctl enable modprobe_startup.service

4. Перезагрузка системы

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

Вы можете проверить, загружены ли модули, с помощью следующих команд:

lsmod | grep fuse
lsmod | grep loop

Если команды отображают результаты, это означает, что модули успешно загружены.

Заключение

Теперь модули fuse и loop будут загружаться автоматически при старте системы, что должно решить вашу проблему с VeraCrypt и другими приложениями, требующими эти модули.

Оцените материал
Добавить комментарий

Капча загружается...