¿Cómo hago para que `modprobe fuse` y `modprobe loop` sean persistentes?

¿Cómo hago para que `modprobe fuse` y `modprobe loop` sean persistentes?

Esto antes no era un problema, pero ahora lo es. No he cambiado nada significativo, por lo que probablemente una actualización lo rompió.

Cuando ejecuto VeraCrypt, se queja de que no pudo configurar el dispositivo de bucle y sugiere ejecutar modprobe fuse. Ejecutarlo no funciona. Sin embargo, corriendomodprobe fuse y modprobe looplo soluciona, hasta el próximo reinicio.

¿No deberían cargarse estos módulos automáticamente al arrancar? ¿Por qué no? ¿Cómo los hago?

Respuesta1

fusey loopse puede cargar automáticamente según demanda.

La búsqueda muestra queLos kernels de grsecurity pueden bloquear esto.. Así que hay cierto desacuerdo sobre qué tan buena idea es esta :-), pero creo que se usa en la mayoría de las distribuciones.

Si hay un error temporal con la carga automática, aún está bien cargarlo fuseen loopel momento del arranque. No crearía un conflicto con el mecanismo de carga automática. Cualquier opción del módulo debe configurarse de acuerdo con las optionslíneas en /etc/modprobe.d/, sin importar quién llame modprobe.

Por ejemplo, para asegurarse de que loopse cargue.

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

¿Cómo funciona la carga automática? Para empezar, el espacio de usuario se crea /dev/fuseestáticamente en el arranque, independientemente de si el módulo está cargado. El mecanismo de mi sistema actual es un poco barroco (ver) /lib/systemd/system/kmod-static-nodes.service. Entonces, tienes un nodo de dispositivo que puedes intentar abrir. Cuando lo hace, el kernel solicita cargar el módulo primero.

En mi sistema, la lista de nodos de dispositivos que se crean estáticamente para que pueda activar la carga del módulo del kernel apropiado es

$ 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

(Las dlíneas son directorios).

Respuesta2

Puede ejecutar comandos al inicio con un script systemd. Crea un archivo con el contenido.

modprobe fuse
modprobe loop

en ~/Documents/modprobe_startup.sh(o donde quieras guardarlo). No olvides hacerlo ejecutable con

chmod +x ~/Documents/modprobe_startup.sh

Ahora creamos un archivo de servicio systemd simple /lib/systemd/system/modprobe_startup.servicecon el contenido

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

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

[Install]
WantedBy=multi-user.target

No olvide reemplazar USERNAME con el nombre de usuario de su sistema.

Ahora para instalar,

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

y reiniciar.

información relacionada