Вопрос или проблема
Ранее это не было проблемой, но теперь это так. Я ничего значительного не менял, так что, вероятно, обновление сломало это.
Когда я запускаю 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
сервис.
- Создайте скрипт, который будетLoading modules при загрузке. В вашем домашнем каталоге (например,
~/Documents
) создайте файлmodprobe_startup.sh
с следующим содержимым:
#!/bin/bash
modprobe fuse
modprobe loop
- Сделайте файл исполняемым:
chmod +x ~/Documents/modprobe_startup.sh
- Теперь создайте файл службы
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
на ваше имя пользователя.
- Теперь установите и активируйте службу:
sudo systemctl daemon-reload
sudo systemctl enable modprobe_startup.service
4. Перезагрузка системы
После выполнения всех этих шагов перезагрузите систему и проверьте, что модули загружаются автоматически.
Вы можете проверить, загружены ли модули, с помощью следующих команд:
lsmod | grep fuse
lsmod | grep loop
Если команды отображают результаты, это означает, что модули успешно загружены.
Заключение
Теперь модули fuse
и loop
будут загружаться автоматически при старте системы, что должно решить вашу проблему с VeraCrypt и другими приложениями, требующими эти модули.